added sanity checks
.NET Test / .NET tests (push) Successful in 3m55s

This commit is contained in:
2026-09-18 14:10:24 +04:00
parent b5a8bd2580
commit 5797bf4884
44 changed files with 419 additions and 146 deletions
@@ -0,0 +1,108 @@
namespace Just.PreciseMath.Tests.SanityChecks;
public class DoubleDoubleArithmeticEqualityChecks
{
public static IEnumerable<TheoryDataRow<double>> ReferenceCases => [1.0, 2.0, 3.0, 100.0, 0.1, 0.5, 0.333333333333333333, -1.0, 1553.0, 1.0e+10];
[Theory]
[MemberData(nameof(ReferenceCases))]
public void AdditionShouldProduceIdenticalResults(double reference)
{
DoubleDouble testValue = DoubleDouble.E; // any value with full precision range used
DoubleDouble ddxdd_Result = testValue + (new DoubleDouble(reference));
DoubleDouble ddxd_Result = testValue + reference;
DoubleDouble dxdd_Result = reference + testValue;
ddxdd_Result.High.ShouldBe(ddxd_Result.High);
ddxdd_Result.Low.ShouldBe(ddxd_Result.Low);
ddxdd_Result.ShouldBe(ddxd_Result);
ddxdd_Result.High.ShouldBe(dxdd_Result.High);
ddxdd_Result.Low.ShouldBe(dxdd_Result.Low);
ddxdd_Result.ShouldBe(dxdd_Result);
ddxd_Result.High.ShouldBe(dxdd_Result.High);
ddxd_Result.Low.ShouldBe(dxdd_Result.Low);
ddxd_Result.ShouldBe(dxdd_Result);
}
[Theory]
[MemberData(nameof(ReferenceCases))]
public void SubtractionFromShouldProduceIdenticalResults(double reference)
{
DoubleDouble testValue = DoubleDouble.E; // any value with full precision range used
DoubleDouble ddxdd_Result = testValue - (new DoubleDouble(reference));
DoubleDouble ddxd_Result = testValue - reference;
ddxdd_Result.High.ShouldBe(ddxd_Result.High);
ddxdd_Result.Low.ShouldBe(ddxd_Result.Low);
ddxdd_Result.ShouldBe(ddxd_Result);
}
[Theory]
[MemberData(nameof(ReferenceCases))]
public void SubtractionShouldProduceIdenticalResults(double reference)
{
DoubleDouble testValue = DoubleDouble.E; // any value with full precision range used
DoubleDouble ddxdd_Result = (new DoubleDouble(reference)) - testValue;
DoubleDouble dxdd_Result = reference - testValue;
ddxdd_Result.High.ShouldBe(dxdd_Result.High);
ddxdd_Result.Low.ShouldBe(dxdd_Result.Low);
ddxdd_Result.ShouldBe(dxdd_Result);
}
[Theory]
[MemberData(nameof(ReferenceCases))]
public void MultiplicationShouldProduceIdenticalResults(double reference)
{
DoubleDouble testValue = DoubleDouble.E; // any value with full precision range used
DoubleDouble ddxdd_Result = testValue * (new DoubleDouble(reference));
DoubleDouble ddxd_Result = testValue * reference;
DoubleDouble dxdd_Result = reference * testValue;
ddxdd_Result.High.ShouldBe(ddxd_Result.High);
ddxdd_Result.Low.ShouldBe(ddxd_Result.Low);
ddxdd_Result.ShouldBe(ddxd_Result);
ddxdd_Result.High.ShouldBe(dxdd_Result.High);
ddxdd_Result.Low.ShouldBe(dxdd_Result.Low);
ddxdd_Result.ShouldBe(dxdd_Result);
ddxd_Result.High.ShouldBe(dxdd_Result.High);
ddxd_Result.Low.ShouldBe(dxdd_Result.Low);
ddxd_Result.ShouldBe(dxdd_Result);
}
[Theory]
[MemberData(nameof(ReferenceCases))]
public void DivisionShouldProduceIdenticalResults(double reference)
{
DoubleDouble testValue = DoubleDouble.E; // any value with full precision range used
DoubleDouble ddxdd_Result = testValue / (new DoubleDouble(reference));
DoubleDouble ddxd_Result = testValue / reference;
ddxdd_Result.High.ShouldBe(ddxd_Result.High);
ddxdd_Result.Low.ShouldBe(ddxd_Result.Low);
ddxdd_Result.ShouldBe(ddxd_Result);
}
[Theory]
[MemberData(nameof(ReferenceCases))]
public void DivisionByShouldProduceIdenticalResults(double reference)
{
DoubleDouble testValue = DoubleDouble.E; // any value with full precision range used
DoubleDouble ddxdd_Result = (new DoubleDouble(reference)) / testValue;
DoubleDouble dxdd_Result = reference / testValue;
ddxdd_Result.High.ShouldBe(dxdd_Result.High);
ddxdd_Result.Low.ShouldBe(dxdd_Result.Low);
ddxdd_Result.ShouldBe(dxdd_Result);
}
}