1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.numbers.core;
18
19 import org.junit.jupiter.api.Assertions;
20 import org.junit.jupiter.api.Test;
21
22
23
24
25 class UserGuideTest {
26
27 @Test
28 void testNorm1() {
29 double x = Norm.EUCLIDEAN.of(3, -4);
30 double y = Norm.MANHATTAN.of(3, -4, 5);
31 double z = Norm.MAXIMUM.of(new double[] {3, -4, 5, -6, -7, -8});
32 Assertions.assertEquals(5, x);
33 Assertions.assertEquals(12, y);
34 Assertions.assertEquals(8, z);
35
36 double big = Double.MAX_VALUE * 0.5;
37 double length = Norm.EUCLIDEAN.of(big, big, big);
38 double expected = Math.sqrt(0.5 * 0.5 * 3) * Double.MAX_VALUE;
39 Assertions.assertEquals(expected, length, Math.ulp(expected));
40 }
41
42 @Test
43 void testSum1() {
44 double sum1 = Sum.create().add(1)
45 .addProduct(3, 4)
46 .getAsDouble();
47 double sum2 = Sum.of(1).addProduct(3, 4)
48 .getAsDouble();
49 double sum3 = Sum.ofProducts(new double[] {3, 4}, new double[] {5, 6})
50 .getAsDouble();
51 Assertions.assertEquals(13, sum1);
52 Assertions.assertEquals(13, sum2);
53 Assertions.assertEquals(3 * 5 + 4 * 6, sum3);
54
55 Assertions.assertEquals(Double.NaN, Sum.of(1, 2, Double.NaN).getAsDouble());
56 Assertions.assertEquals(Double.NEGATIVE_INFINITY, Sum.of(1, 2, Double.NEGATIVE_INFINITY).getAsDouble());
57 }
58
59 @Test
60 void testSum2() {
61 double x1 = 1e100 + 1 - 2 - 1e100;
62 double x2 = Sum.of(1e100, 1, -2, -1e100).getAsDouble();
63 Assertions.assertEquals(0.0, x1);
64 Assertions.assertEquals(-1.0, x2);
65 }
66
67 @Test
68 void testPrecision1() {
69
70 Assertions.assertTrue(Precision.equals(1000.0, 1000.0));
71 Assertions.assertTrue(Precision.equals(1000.0, 1000.0 + Math.ulp(1000.0)));
72 Assertions.assertFalse(Precision.equals(1000.0, 1000.0 + 2 * Math.ulp(1000.0)));
73
74
75 Assertions.assertFalse(Precision.equals(1000.0, 1001.0));
76 Assertions.assertTrue(Precision.equals(1000.0, 1001.0, 1.0));
77 Assertions.assertTrue(Precision.equals(1000.0, 1000.0 + Math.ulp(1000.0), 0.0));
78
79
80 Assertions.assertFalse(Precision.equals(1000.0, 1001.0));
81 Assertions.assertFalse(Precision.equals(1000.0, 1001.0, 1));
82 Assertions.assertFalse(Precision.equals(1000.0, 1000.0 + 2 * Math.ulp(1000.0), 1));
83 Assertions.assertTrue(Precision.equals(1000.0, 1000.0 + 2 * Math.ulp(1000.0), 2));
84 Assertions.assertFalse(Precision.equals(1000.0, 1000.0 + 3 * Math.ulp(1000.0), 2));
85
86
87 Assertions.assertFalse(Precision.equalsWithRelativeTolerance(1000.0, 1001.0, 1e-6));
88 Assertions.assertTrue(Precision.equalsWithRelativeTolerance(1000.0, 1001.0, 1e-3));
89 }
90
91 @Test
92 void testPrecision2() {
93 Assertions.assertFalse(Precision.equals(Double.NaN, 1000.0));
94 Assertions.assertFalse(Precision.equals(Double.NaN, Double.NaN));
95 Assertions.assertTrue(Precision.equalsIncludingNaN(Double.NaN, Double.NaN));
96
97 Assertions.assertTrue(Precision.equals(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY));
98 Assertions.assertTrue(Precision.equals(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY));
99 Assertions.assertFalse(Precision.equals(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY));
100 }
101
102 @Test
103 void testPrecision3() {
104 Assertions.assertEquals(0, Precision.compareTo(100, 100, 0.0));
105 Assertions.assertEquals(0, Precision.compareTo(100, 101, 1.0));
106 Assertions.assertEquals(-1, Precision.compareTo(100, 102, 1.0));
107 Assertions.assertEquals(1, Precision.compareTo(102, 100, 1.0));
108 }
109
110 @Test
111 void testPrecision4() {
112 Precision.DoubleEquivalence eq = Precision.doubleEquivalenceOfEpsilon(1.0);
113 Assertions.assertFalse(eq.lt(100, 100));
114 Assertions.assertTrue(eq.lte(100, 100));
115 Assertions.assertTrue(eq.eq(100, 100));
116 Assertions.assertTrue(eq.gte(100, 100));
117 Assertions.assertFalse(eq.gt(100, 100));
118 }
119
120 @Test
121 void testPrecision5() {
122 Assertions.assertEquals(678.125, Precision.round(678.125, 4));
123 Assertions.assertEquals(678.125, Precision.round(678.125, 3));
124 Assertions.assertEquals(678.13, Precision.round(678.125, 2));
125 Assertions.assertEquals(678.1, Precision.round(678.125, 1));
126 Assertions.assertEquals(678.0, Precision.round(678.125, 0));
127 Assertions.assertEquals(680.0, Precision.round(678.125, -1));
128 Assertions.assertEquals(700.0, Precision.round(678.125, -2));
129
130 Assertions.assertEquals(0.10000000000000009, Precision.representableDelta(1.0, 0.1));
131 }
132 }