128 lines
5.2 KiB
C#
128 lines
5.2 KiB
C#
using FsCheck;
|
|
using FsCheck.Fluent;
|
|
using System;
|
|
using XplorePlane.Models;
|
|
|
|
namespace XplorePlane.Tests.Generators
|
|
{
|
|
/// <summary>
|
|
/// FsCheck 3.x 自定义生成器:为所有状态模型定义 Arbitrary 生成器。
|
|
/// </summary>
|
|
public class StateGenerators
|
|
{
|
|
private static Gen<double> PositionGen =>
|
|
Gen.Choose(-10000000, 10000000).Select(i => i / 1000.0);
|
|
|
|
private static Gen<double> SpeedGen =>
|
|
Gen.Choose(0, 1000000).Select(i => i / 1000.0);
|
|
|
|
private static Gen<double> VoltageGen =>
|
|
Gen.Choose(0, 450000).Select(i => i / 1000.0);
|
|
|
|
private static Gen<double> PowerGen =>
|
|
Gen.Choose(0, 3000000).Select(i => i / 1000.0);
|
|
|
|
private static Gen<double> FrameRateGen =>
|
|
Gen.Choose(0, 120000).Select(i => i / 1000.0);
|
|
|
|
private static Gen<double> MatrixGen =>
|
|
Gen.Choose(-10000000, 10000000).Select(i => i / 1000.0);
|
|
|
|
public static Arbitrary<MotionState> MotionStateArb()
|
|
{
|
|
var gen = from xm in PositionGen
|
|
from ym in PositionGen
|
|
from zt in PositionGen
|
|
from zd in PositionGen
|
|
from tiltD in PositionGen
|
|
from dist in PositionGen
|
|
from xmSpd in SpeedGen
|
|
from ymSpd in SpeedGen
|
|
from ztSpd in SpeedGen
|
|
from zdSpd in SpeedGen
|
|
from tiltDSpd in SpeedGen
|
|
from distSpd in SpeedGen
|
|
select new MotionState(xm, ym, zt, zd, tiltD, dist,
|
|
xmSpd, ymSpd, ztSpd, zdSpd, tiltDSpd, distSpd);
|
|
return gen.ToArbitrary();
|
|
}
|
|
|
|
public static Arbitrary<RaySourceState> RaySourceStateArb()
|
|
{
|
|
var gen = from isOn in ArbMap.Default.GeneratorFor<bool>()
|
|
from voltage in VoltageGen
|
|
from power in PowerGen
|
|
select new RaySourceState(isOn, voltage, power);
|
|
return gen.ToArbitrary();
|
|
}
|
|
|
|
public static Arbitrary<DetectorState> DetectorStateArb()
|
|
{
|
|
var gen = from isConnected in ArbMap.Default.GeneratorFor<bool>()
|
|
from isAcquiring in ArbMap.Default.GeneratorFor<bool>()
|
|
from frameRate in FrameRateGen
|
|
from res in Gen.Elements("1024x1024", "2048x2048", "2880x2880", "3072x3072", "4260x4260")
|
|
select new DetectorState(isConnected, isAcquiring, frameRate, res);
|
|
return gen.ToArbitrary();
|
|
}
|
|
|
|
public static Arbitrary<SystemState> SystemStateArb()
|
|
{
|
|
var gen = from mode in Gen.Elements(
|
|
OperationMode.Idle,
|
|
OperationMode.Scanning,
|
|
OperationMode.CTAcquire,
|
|
OperationMode.RecipeRun)
|
|
from hasError in ArbMap.Default.GeneratorFor<bool>()
|
|
from msg in ArbMap.Default.GeneratorFor<NonEmptyString>()
|
|
let errorMessage = hasError ? msg.Get : string.Empty
|
|
select new SystemState(mode, hasError, errorMessage);
|
|
return gen.ToArbitrary();
|
|
}
|
|
|
|
public static Arbitrary<CameraState> CameraStateArb()
|
|
{
|
|
var gen = from isConnected in ArbMap.Default.GeneratorFor<bool>()
|
|
from isStreaming in ArbMap.Default.GeneratorFor<bool>()
|
|
from width in Gen.Choose(0, 8192)
|
|
from height in Gen.Choose(0, 8192)
|
|
from frameRate in FrameRateGen
|
|
select new CameraState(isConnected, isStreaming, null, width, height, frameRate);
|
|
return gen.ToArbitrary();
|
|
}
|
|
|
|
public static Arbitrary<CalibrationMatrix> CalibrationMatrixArb()
|
|
{
|
|
var gen = from m11 in MatrixGen
|
|
from m12 in MatrixGen
|
|
from m13 in MatrixGen
|
|
from m21 in MatrixGen
|
|
from m22 in MatrixGen
|
|
from m23 in MatrixGen
|
|
from m31 in MatrixGen
|
|
from m32 in MatrixGen
|
|
from m33 in MatrixGen
|
|
select new CalibrationMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33);
|
|
return gen.ToArbitrary();
|
|
}
|
|
|
|
public static Arbitrary<PhysicalPosition> PhysicalPositionArb()
|
|
{
|
|
var gen = from x in PositionGen
|
|
from y in PositionGen
|
|
from z in PositionGen
|
|
select new PhysicalPosition(x, y, z);
|
|
return gen.ToArbitrary();
|
|
}
|
|
|
|
public static Arbitrary<LinkedViewState> LinkedViewStateArb()
|
|
{
|
|
var gen = from pos in PhysicalPositionArb().Generator
|
|
from isExecuting in ArbMap.Default.GeneratorFor<bool>()
|
|
from ticks in Gen.Choose(0, int.MaxValue)
|
|
let dt = DateTime.MinValue.AddTicks((long)ticks * 10000)
|
|
select new LinkedViewState(pos, isExecuting, dt);
|
|
return gen.ToArbitrary();
|
|
}
|
|
}
|
|
} |