Skip to content

Commit a492387

Browse files
authored
Merge pull request #79 from IsaMorphic/feature/fix-unit-tests
Fix: use more stringent requirements for library function precision
2 parents 5eb9f70 + f6c2a24 commit a492387

7 files changed

Lines changed: 30 additions & 29 deletions

File tree

QuadrupleLib.Tests/Assertions/Types/Precision.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ internal enum Precision
2424
NearestTenth = 1,
2525
NearestHundreth = 2,
2626
NearestThousandth = 3,
27+
NearestTenThousandth = 4,
2728
}

QuadrupleLib.Tests/Math/ExponentialTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public abstract class ExponentialTests<TAccelerator>
3535
public void IsExpCorrect(double x)
3636
{
3737
double y = double.Exp(x);
38-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Exp(x), Precision.NearestThousandth);
38+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Exp(x), Precision.NearestTenThousandth);
3939
}
4040

4141
[Theory]
@@ -48,7 +48,7 @@ public void IsExpCorrect(double x)
4848
public void IsExp2Correct(double x)
4949
{
5050
double y = double.Exp2(x);
51-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Exp2(x), Precision.NearestThousandth);
51+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Exp2(x), Precision.NearestTenThousandth);
5252
}
5353

5454
[Theory]
@@ -61,7 +61,7 @@ public void IsExp2Correct(double x)
6161
public void IsExp10Correct(double x)
6262
{
6363
double y = double.Exp10(x);
64-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Exp10(x), Precision.NearestThousandth);
64+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Exp10(x), Precision.NearestTenThousandth);
6565
}
6666
}
6767

QuadrupleLib.Tests/Math/HyperbolicTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public abstract class HyperbolicTests<TAccelerator>
3434
public void IsSinhCorrect(double x)
3535
{
3636
double y = double.Sinh(x);
37-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Sinh(x), Precision.NearestThousandth);
37+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Sinh(x), Precision.NearestTenThousandth);
3838
}
3939

4040
[Theory]
@@ -46,7 +46,7 @@ public void IsSinhCorrect(double x)
4646
public void IsCoshCorrect(double x)
4747
{
4848
double y = double.Cosh(x);
49-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Cosh(x), Precision.NearestThousandth);
49+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Cosh(x), Precision.NearestTenThousandth);
5050
}
5151

5252
[Theory]
@@ -58,7 +58,7 @@ public void IsCoshCorrect(double x)
5858
public void IsTanhCorrect(double x)
5959
{
6060
double y = double.Tanh(x);
61-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Tanh(x), Precision.NearestThousandth);
61+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Tanh(x), Precision.NearestTenThousandth);
6262
}
6363

6464
[Theory]
@@ -70,7 +70,7 @@ public void IsTanhCorrect(double x)
7070
public void IsInverseSinhCorrect(double x)
7171
{
7272
double y = double.Asinh(x);
73-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Asinh(x), Precision.NearestThousandth);
73+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Asinh(x), Precision.NearestTenThousandth);
7474
}
7575

7676
[Theory]
@@ -80,7 +80,7 @@ public void IsInverseSinhCorrect(double x)
8080
public void IsInverseCoshCorrect(double x)
8181
{
8282
double y = double.Acosh(x);
83-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Acosh(x), Precision.NearestThousandth);
83+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Acosh(x), Precision.NearestTenThousandth);
8484
}
8585

8686
[Theory]
@@ -98,7 +98,7 @@ public void IsInverseCoshNaN(double x)
9898
public void IsInverseTanhCorrect(double x)
9999
{
100100
double y = double.Atanh(x);
101-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Atanh(x), Precision.NearestThousandth);
101+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Atanh(x), Precision.NearestTenThousandth);
102102
}
103103

104104
[Theory]

QuadrupleLib.Tests/Math/LogarithmTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public abstract class LogarithmTests<TAccelerator>
3434
public void IsLogCorrect(double x)
3535
{
3636
double y = double.Exp(x);
37-
AssertX.NearlyEqual(x, Float128<TAccelerator>.Log(y), Precision.NearestThousandth);
37+
AssertX.NearlyEqual(x, Float128<TAccelerator>.Log(y), Precision.NearestTenThousandth);
3838
}
3939

4040
[Theory]
@@ -55,7 +55,7 @@ public void IsLogNaN(double x)
5555
public void IsLog2Correct(double x)
5656
{
5757
double y = double.Exp2(x);
58-
AssertX.NearlyEqual(x, Float128<TAccelerator>.Log2(y), Precision.NearestThousandth);
58+
AssertX.NearlyEqual(x, Float128<TAccelerator>.Log2(y), Precision.NearestTenThousandth);
5959
}
6060

6161
[Theory]
@@ -76,7 +76,7 @@ public void IsLog2NaN(double x)
7676
public void IsLog10Correct(double x)
7777
{
7878
double y = double.Exp10(x);
79-
AssertX.NearlyEqual(x, Float128<TAccelerator>.Log10(y), Precision.NearestThousandth);
79+
AssertX.NearlyEqual(x, Float128<TAccelerator>.Log10(y), Precision.NearestTenThousandth);
8080
}
8181

8282
[Theory]
@@ -102,7 +102,7 @@ public void IsLog10NaN(double x)
102102
public void IsLogBCorrect(double x, double b)
103103
{
104104
double y = double.Pow(b, x);
105-
AssertX.NearlyEqual(x, Float128<TAccelerator>.Log(y, b), Precision.NearestThousandth);
105+
AssertX.NearlyEqual(x, Float128<TAccelerator>.Log(y, b), Precision.NearestTenThousandth);
106106
}
107107

108108
[Theory]

QuadrupleLib.Tests/Math/PowerAndRootTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public abstract class PowerAndRootTests<TAccelerator>
3232
public void IsSqrtCorrect(double x)
3333
{
3434
double y = double.Sqrt(x);
35-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Sqrt(x), Precision.NearestThousandth);
35+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Sqrt(x), Precision.NearestTenThousandth);
3636
}
3737

3838
[Theory]
@@ -42,7 +42,7 @@ public void IsSqrtCorrect(double x)
4242
public void IsCbrtCorrect(double x)
4343
{
4444
double y = double.Cbrt(x);
45-
AssertX.NearlyEqual(y, Float128<TAccelerator>.Cbrt(x), Precision.NearestThousandth);
45+
AssertX.NearlyEqual(y, Float128<TAccelerator>.Cbrt(x), Precision.NearestTenThousandth);
4646
}
4747

4848
[Theory]
@@ -58,7 +58,7 @@ public void IsCbrtCorrect(double x)
5858
public void IsRootNCorrect(double x, int n)
5959
{
6060
double y = double.RootN(x, n);
61-
AssertX.NearlyEqual(y, Float128<TAccelerator>.RootN(x, n), Precision.NearestThousandth);
61+
AssertX.NearlyEqual(y, Float128<TAccelerator>.RootN(x, n), Precision.NearestTenThousandth);
6262
}
6363

6464
[Theory]
@@ -75,7 +75,7 @@ public void IsRootNEqualToPow(double x, int n)
7575
{
7676
Float128<TAccelerator> y0 = Float128<TAccelerator>.RootN(x, n);
7777
Float128<TAccelerator> y1 = Float128<TAccelerator>.Pow(x, Float128<TAccelerator>.One / n);
78-
AssertX.NearlyEqual(y0, y1, Precision.NearestThousandth);
78+
AssertX.NearlyEqual(y0, y1, Precision.NearestTenThousandth);
7979
}
8080

8181
[Theory]
@@ -94,7 +94,7 @@ public void IsRootNEqualToPow(double x, int n)
9494
public void IsPowCorrect(double x, double y)
9595
{
9696
double z = double.Pow(x, y);
97-
AssertX.NearlyEqual(z, Float128<TAccelerator>.Pow(x, y), Precision.NearestThousandth);
97+
AssertX.NearlyEqual(z, Float128<TAccelerator>.Pow(x, y), Precision.NearestTenThousandth);
9898
}
9999

100100
[Theory]
@@ -103,7 +103,7 @@ public void IsPowCorrect(double x, double y)
103103
[InlineData(3.676)]
104104
public void IsPowZeroEqualToOne(double x)
105105
{
106-
AssertX.NearlyEqual(Float128<TAccelerator>.One, Float128<TAccelerator>.Pow(x, 0), Precision.NearestThousandth);
106+
AssertX.NearlyEqual(Float128<TAccelerator>.One, Float128<TAccelerator>.Pow(x, 0), Precision.NearestTenThousandth);
107107
}
108108

109109
[Theory]
@@ -122,7 +122,7 @@ public void IsPowZeroEqualToNaN(double x)
122122
[InlineData(3.676)]
123123
public void IsPowOneIdentity(double x)
124124
{
125-
AssertX.NearlyEqual(x, Float128<TAccelerator>.Pow(x, Float128<TAccelerator>.One), Precision.NearestThousandth);
125+
AssertX.NearlyEqual(x, Float128<TAccelerator>.Pow(x, Float128<TAccelerator>.One), Precision.NearestTenThousandth);
126126
}
127127

128128
[Theory]
@@ -131,7 +131,7 @@ public void IsPowOneIdentity(double x)
131131
[InlineData(3.676)]
132132
public void IsPowNegativeOneReciprocal(double x)
133133
{
134-
AssertX.NearlyEqual(Float128<TAccelerator>.One / x, Float128<TAccelerator>.Pow(x, Float128<TAccelerator>.NegativeOne), Precision.NearestThousandth);
134+
AssertX.NearlyEqual(Float128<TAccelerator>.One / x, Float128<TAccelerator>.Pow(x, Float128<TAccelerator>.NegativeOne), Precision.NearestTenThousandth);
135135
}
136136
}
137137

QuadrupleLib.Tests/Math/TrigonometryTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ public void IsInverseCosEqualCoRDiC(double thetaDeg)
299299
Float128<TAccelerator> thetaA = thetaDeg * Float128<TAccelerator>.Pi / 180;
300300
Float128<TAccelerator> cos = Float128<TAccelerator>.Cos(thetaA);
301301
Float128<TAccelerator> thetaB = Float128<TAccelerator>.Acos(cos);
302-
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestThousandth);
302+
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestTenThousandth);
303303
}
304304

305305
[Theory]
@@ -318,7 +318,7 @@ public void IsInverseSinEqualCoRDiC(double thetaDeg)
318318
Float128<TAccelerator> thetaA = thetaDeg * Float128<TAccelerator>.Pi / 180;
319319
Float128<TAccelerator> sin = Float128<TAccelerator>.Sin(thetaA);
320320
Float128<TAccelerator> thetaB = Float128<TAccelerator>.Asin(sin);
321-
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestThousandth);
321+
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestTenThousandth);
322322
}
323323

324324
[Theory]
@@ -334,7 +334,7 @@ public void IsInverseTanEqualCoRDiC(double thetaDeg)
334334
Float128<TAccelerator> thetaA = thetaDeg * Float128<TAccelerator>.Pi / 180;
335335
Float128<TAccelerator> tan = Float128<TAccelerator>.Tan(thetaA);
336336
Float128<TAccelerator> thetaB = Float128<TAccelerator>.Atan(tan);
337-
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestThousandth);
337+
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestTenThousandth);
338338
}
339339

340340
[Theory]
@@ -582,7 +582,7 @@ public void IsInverseCosPiEqualCoRDiC(double thetaDeg)
582582
Float128<TAccelerator> thetaA = thetaDeg * Float128<TAccelerator>.Pi / 180;
583583
Float128<TAccelerator> cos = Float128<TAccelerator>.Cos(thetaA);
584584
Float128<TAccelerator> thetaB = Float128<TAccelerator>.AcosPi(cos);
585-
AssertX.NearlyEqual(thetaA, thetaB * Float128<TAccelerator>.Pi, Precision.NearestThousandth);
585+
AssertX.NearlyEqual(thetaA, thetaB * Float128<TAccelerator>.Pi, Precision.NearestTenThousandth);
586586
}
587587

588588
[Theory]
@@ -601,7 +601,7 @@ public void IsInverseSinPiEqualCoRDiC(double thetaDeg)
601601
Float128<TAccelerator> thetaA = thetaDeg * Float128<TAccelerator>.Pi / 180;
602602
Float128<TAccelerator> sin = Float128<TAccelerator>.Sin(thetaA);
603603
Float128<TAccelerator> thetaB = Float128<TAccelerator>.AsinPi(sin);
604-
AssertX.NearlyEqual(thetaA, thetaB * Float128<TAccelerator>.Pi, Precision.NearestThousandth);
604+
AssertX.NearlyEqual(thetaA, thetaB * Float128<TAccelerator>.Pi, Precision.NearestTenThousandth);
605605
}
606606

607607
[Theory]
@@ -617,7 +617,7 @@ public void IsInverseTanPiEqualCoRDiC(double thetaDeg)
617617
Float128<TAccelerator> thetaA = thetaDeg / 180;
618618
Float128<TAccelerator> tan = Float128<TAccelerator>.TanPi(thetaA);
619619
Float128<TAccelerator> thetaB = Float128<TAccelerator>.AtanPi(tan);
620-
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestThousandth);
620+
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestTenThousandth);
621621
}
622622

623623
[Theory]
@@ -691,7 +691,7 @@ public void IsAtan2EqualCoRDiC(double thetaDeg)
691691
Float128<TAccelerator> thetaA = thetaDeg * Float128<TAccelerator>.Pi / 180;
692692
(Float128<TAccelerator> sin, Float128<TAccelerator> cos) = Float128<TAccelerator>.SinCos(thetaA);
693693
Float128<TAccelerator> thetaB = Float128<TAccelerator>.Atan2(sin, cos);
694-
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestThousandth);
694+
AssertX.NearlyEqual(thetaA, thetaB, Precision.NearestTenThousandth);
695695
}
696696
}
697697

QuadrupleLib/Modules/MathOperations.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public partial struct Float128<TAccelerator>
2222
{
2323
#region Public API (trig functions)
2424

25-
private const int SINCOS_ITER_COUNT = 32;
25+
private const int SINCOS_ITER_COUNT = 48;
2626

2727
private static readonly Float128<TAccelerator>[] _thetaTable;
2828

0 commit comments

Comments
 (0)