diff --git a/O2DESNet.UnitTests/O2DESNet.UnitTests.csproj b/O2DESNet.UnitTests/O2DESNet.UnitTests.csproj index fbaeab2..2f2b354 100644 --- a/O2DESNet.UnitTests/O2DESNet.UnitTests.csproj +++ b/O2DESNet.UnitTests/O2DESNet.UnitTests.csproj @@ -1,20 +1,20 @@  - netcoreapp3.1 + net8.0 false - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/O2DESNet.UnitTests/PhaseTracker_Tests.cs b/O2DESNet.UnitTests/PhaseTracker_Tests.cs index 979395b..f077ec8 100644 --- a/O2DESNet.UnitTests/PhaseTracker_Tests.cs +++ b/O2DESNet.UnitTests/PhaseTracker_Tests.cs @@ -13,10 +13,12 @@ public void PhaseTracer_at_MinDateTime() pr.UpdPhase("Busy2", DateTime.MinValue.AddMinutes(2)); pr.UpdPhase("Idle", DateTime.MinValue.AddMinutes(2.5)); pr.UpdPhase("Busy2", DateTime.MinValue.AddMinutes(2.9)); - if (Diff(pr.GetProportion("Idle", DateTime.MinValue.AddMinutes(3)), 1.6 / 3)) Assert.Fail(); - if (Diff(pr.GetProportion("Busy1", DateTime.MinValue.AddMinutes(3)), 0.8 / 3)) Assert.Fail(); - if (Diff(pr.GetProportion("Busy2", DateTime.MinValue.AddMinutes(3)), 0.6 / 3)) Assert.Fail(); - if (Diff(pr.GetProportion("Other", DateTime.MinValue.AddMinutes(3)), 0)) Assert.Fail(); + + var checkpoint = DateTime.MinValue.AddMinutes(3); + AssertProportion(pr, "Idle", checkpoint, 1.6 / 3); + AssertProportion(pr, "Busy1", checkpoint, 0.8 / 3); + AssertProportion(pr, "Busy2", checkpoint, 0.6 / 3); + AssertProportion(pr, "Other", checkpoint, 0); } [Test] @@ -27,9 +29,11 @@ public void PhaseTracer_at_Non_MinDateTime() pr.UpdPhase("Busy2", DateTime.MinValue.AddMinutes(2)); pr.UpdPhase("Idle", DateTime.MinValue.AddMinutes(2.5)); pr.UpdPhase("Busy2", DateTime.MinValue.AddMinutes(2.9)); - if (Diff(pr.GetProportion("Idle", DateTime.MinValue.AddMinutes(3)), 0.6 / 2)) Assert.Fail(); - if (Diff(pr.GetProportion("Busy1", DateTime.MinValue.AddMinutes(3)), 0.8 / 2)) Assert.Fail(); - if (Diff(pr.GetProportion("Busy2", DateTime.MinValue.AddMinutes(3)), 0.6 / 2)) Assert.Fail(); + + var checkpoint = DateTime.MinValue.AddMinutes(3); + AssertProportion(pr, "Idle", checkpoint, 0.6 / 2); + AssertProportion(pr, "Busy1", checkpoint, 0.8 / 2); + AssertProportion(pr, "Busy2", checkpoint, 0.6 / 2); } [Test] @@ -41,14 +45,18 @@ public void PhaseTracer_with_WarmUp() pr.UpdPhase("Busy2", DateTime.MinValue.AddMinutes(2)); pr.UpdPhase("Idle", DateTime.MinValue.AddMinutes(2.5)); pr.UpdPhase("Busy2", DateTime.MinValue.AddMinutes(2.9)); - if (Diff(pr.GetProportion("Idle", DateTime.MinValue.AddMinutes(3)), 0.4 / 1.5)) Assert.Fail(); - if (Diff(pr.GetProportion("Busy1", DateTime.MinValue.AddMinutes(3)), 0.5 / 1.5)) Assert.Fail(); - if (Diff(pr.GetProportion("Busy2", DateTime.MinValue.AddMinutes(3)), 0.6 / 1.5)) Assert.Fail(); + + var checkpoint = DateTime.MinValue.AddMinutes(3); + AssertProportion(pr, "Idle", checkpoint, 0.4 / 1.5); + AssertProportion(pr, "Busy1", checkpoint, 0.5 / 1.5); + AssertProportion(pr, "Busy2", checkpoint, 0.6 / 1.5); } - private static bool Diff(double x1, double x2, int decimals = 12) + private static void AssertProportion(PhaseTracer tracer, string phase, DateTime checkpoint, double expected) { - return Math.Round(x1, decimals) != Math.Round(x2, decimals); + var actual = tracer.GetProportion(phase, checkpoint); + const double tolerance = 1e-9; + Assert.That(actual, Is.EqualTo(expected).Within(tolerance), $"{phase} proportion mismatch"); } } } diff --git a/O2DESNet/O2DESNet.csproj b/O2DESNet/O2DESNet.csproj index 3b0651c..159f566 100644 --- a/O2DESNet/O2DESNet.csproj +++ b/O2DESNet/O2DESNet.csproj @@ -3,8 +3,8 @@ 1.0.0.0 $(BUILD_BUILDNUMBER) - netstandard2.1 - 9.0 + net8.0 + latest true Li Haobin A framework for Object-Oriented Discrete Event Simulation @@ -19,8 +19,8 @@ - - + +