using Xunit; using IvfTl.AutoFocus.Layout; namespace IvfTl.AutoFocus.Tests { public class FocusRangeResolverTests { private static FocusRangeRawConfig Raw( int? wellH = null, int? wellV = null, int? devH = null, int? devV = null, int expMin = 10, int expMax = 800, int hCenter = 71000, int vCenter = 88000) => new FocusRangeRawConfig { WellHRange = wellH, WellVRange = wellV, DeviceHRange = devH, DeviceVRange = devV, ExposureMin = expMin, ExposureMax = expMax, HorizontalCenter = hCenter, VerticalCenter = vCenter, }; [Fact] public void 半幅_well级覆盖设备级() { var r = FocusRangeResolver.Resolve(Raw(wellH: 1500, wellV: 4000, devH: 2000, devV: 6000)); Assert.Equal(1500, r.HHalf); Assert.Equal(4000, r.VHalf); } [Fact] public void 半幅_well空则继承设备级() { var r = FocusRangeResolver.Resolve(Raw(wellH: null, wellV: null, devH: 2000, devV: 6000)); Assert.Equal(2000, r.HHalf); Assert.Equal(6000, r.VHalf); } [Fact] public void 半幅_两级皆空则回退引擎默认() { var r = FocusRangeResolver.Resolve(Raw(wellH: null, wellV: null, devH: null, devV: null)); Assert.Equal(FocusRangeResolver.DefaultHHalf, r.HHalf); Assert.Equal(FocusRangeResolver.DefaultVHalf, r.VHalf); } [Fact] public void 曝光范围_透传设备级() { var r = FocusRangeResolver.Resolve(Raw(expMin: 15, expMax: 600)); Assert.Equal(15, r.ExpLo); Assert.Equal(600, r.ExpHi); } [Fact] public void 中心_原样透传() { var r = FocusRangeResolver.Resolve(Raw(hCenter: 71000, vCenter: 88000)); Assert.Equal(71000, r.HCenter); Assert.Equal(88000, r.VCenter); } } }