1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.geometry.core.precision;
18
19 import org.junit.Assert;
20 import org.junit.Test;
21
22 public class DoublePrecisionContextTest {
23
24 private final StubContext ctx = new StubContext();
25
26 @Test
27 public void testEq() {
28
29 Assert.assertTrue(ctx.eq(0.0, 0.0));
30 Assert.assertTrue(ctx.eq(1.0, 1.0));
31 Assert.assertTrue(ctx.eq(-1.0, -1.0));
32
33 Assert.assertFalse(ctx.eq(1.0, -1.0));
34 Assert.assertFalse(ctx.eq(1.0, Math.nextUp(1.0)));
35 Assert.assertFalse(ctx.eq(-1.0, Math.nextDown(1.0)));
36 }
37
38 @Test
39 public void testEqZero() {
40
41 Assert.assertTrue(ctx.eqZero(0.0));
42
43 Assert.assertFalse(ctx.eqZero(Math.nextUp(0.0)));
44 Assert.assertFalse(ctx.eqZero(Math.nextDown(-0.0)));
45 }
46
47 @Test
48 public void testLt() {
49
50 Assert.assertTrue(ctx.lt(1, 2));
51 Assert.assertTrue(ctx.lt(-2, -1));
52
53 Assert.assertFalse(ctx.lt(1, 1));
54 Assert.assertFalse(ctx.lt(-1, -1));
55 Assert.assertFalse(ctx.lt(2, 1));
56 Assert.assertFalse(ctx.lt(-1, -2));
57 }
58
59 @Test
60 public void testLte() {
61
62 Assert.assertTrue(ctx.lte(1, 2));
63 Assert.assertTrue(ctx.lte(-2, -1));
64 Assert.assertTrue(ctx.lte(1, 1));
65 Assert.assertTrue(ctx.lte(-1, -1));
66
67 Assert.assertFalse(ctx.lte(2, 1));
68 Assert.assertFalse(ctx.lte(-1, -2));
69 }
70
71 @Test
72 public void testGt() {
73
74 Assert.assertTrue(ctx.gt(2, 1));
75 Assert.assertTrue(ctx.gt(-1, -2));
76
77 Assert.assertFalse(ctx.gt(1, 1));
78 Assert.assertFalse(ctx.gt(-1, -1));
79 Assert.assertFalse(ctx.gt(1, 2));
80 Assert.assertFalse(ctx.gt(-2, -1));
81 }
82
83 @Test
84 public void testGte() {
85
86 Assert.assertTrue(ctx.gte(2, 1));
87 Assert.assertTrue(ctx.gte(-1, -2));
88 Assert.assertTrue(ctx.gte(1, 1));
89 Assert.assertTrue(ctx.gte(-1, -1));
90
91 Assert.assertFalse(ctx.gte(1, 2));
92 Assert.assertFalse(ctx.gte(-2, -1));
93 }
94
95 @Test
96 public void testSign() {
97
98 Assert.assertEquals(0, ctx.sign(0.0));
99
100 Assert.assertEquals(1, ctx.sign(1e-3));
101 Assert.assertEquals(-1, ctx.sign(-1e-3));
102
103 Assert.assertEquals(1, ctx.sign(Double.NaN));
104 Assert.assertEquals(1, ctx.sign(Double.POSITIVE_INFINITY));
105 Assert.assertEquals(-1, ctx.sign(Double.NEGATIVE_INFINITY));
106 }
107
108 @Test
109 public void testCompare() {
110
111 Assert.assertEquals(0, ctx.compare(1, 1));
112 Assert.assertEquals(-1, ctx.compare(1, 2));
113 Assert.assertEquals(1, ctx.compare(2, 1));
114
115 Assert.assertEquals(0, ctx.compare(-1, -1));
116 Assert.assertEquals(1, ctx.compare(-1, -2));
117 Assert.assertEquals(-1, ctx.compare(-2, -1));
118 }
119
120 @Test
121 public void testCompare_wrapper() {
122
123 Assert.assertEquals(0, ctx.compare(new Double(1), new Double(1)));
124 Assert.assertEquals(-1, ctx.compare(new Double(1), new Double(2)));
125 Assert.assertEquals(1, ctx.compare(new Double(2), new Double(1)));
126
127 Assert.assertEquals(0, ctx.compare(new Double(-1), new Double(-1)));
128 Assert.assertEquals(1, ctx.compare(new Double(-1), new Double(-2)));
129 Assert.assertEquals(-1, ctx.compare(new Double(-2), new Double(-1)));
130 }
131
132 private static class StubContext extends DoublePrecisionContext {
133
134 @Override
135 public double getMaxZero() {
136 return 0.0;
137 }
138
139 @Override
140 public int compare(final double a, final double b) {
141 return Double.compare(a, b);
142 }
143 }
144 }