1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.lang3.mutable;
18
19 import static org.apache.commons.lang3.LangAssertions.assertNullPointerException;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertNotEquals;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import org.apache.commons.lang3.AbstractLangTest;
25 import org.junit.jupiter.api.Test;
26
27
28
29
30
31
32 class MutableDoubleTest extends AbstractLangTest {
33
34 @Test
35 void testAddAndGetValueObject() {
36 final MutableDouble mutableDouble = new MutableDouble(7.5d);
37 final double result = mutableDouble.addAndGet(Double.valueOf(-2.5d));
38
39 assertEquals(5d, result, 0.01d);
40 assertEquals(5d, mutableDouble.doubleValue(), 0.01d);
41 }
42
43 @Test
44 void testAddAndGetValuePrimitive() {
45 final MutableDouble mutableDouble = new MutableDouble(10.5d);
46 final double result = mutableDouble.addAndGet(-0.5d);
47
48 assertEquals(10d, result, 0.01d);
49 assertEquals(10d, mutableDouble.doubleValue(), 0.01d);
50 }
51
52 @Test
53 void testAddValueObject() {
54 final MutableDouble mutNum = new MutableDouble(1);
55 mutNum.add(Double.valueOf(1.1d));
56
57 assertEquals(2.1d, mutNum.doubleValue(), 0.01d);
58 }
59
60 @Test
61 void testAddValuePrimitive() {
62 final MutableDouble mutNum = new MutableDouble(1);
63 mutNum.add(1.1d);
64
65 assertEquals(2.1d, mutNum.doubleValue(), 0.01d);
66 }
67
68 @Test
69 void testCompareTo() {
70 final MutableDouble mutNum = new MutableDouble(0d);
71
72 assertEquals(0, mutNum.compareTo(new MutableDouble(0d)));
73 assertEquals(+1, mutNum.compareTo(new MutableDouble(-1d)));
74 assertEquals(-1, mutNum.compareTo(new MutableDouble(1d)));
75 }
76
77 @Test
78 void testCompareToNull() {
79 final MutableDouble mutNum = new MutableDouble(0d);
80 assertNullPointerException(() -> mutNum.compareTo(null));
81 }
82
83 @Test
84 void testConstructorNull() {
85 assertNullPointerException(() -> new MutableDouble((Number) null));
86 }
87
88 @Test
89 void testConstructors() {
90 assertEquals(0d, new MutableDouble().doubleValue(), 0.0001d);
91
92 assertEquals(1d, new MutableDouble(1d).doubleValue(), 0.0001d);
93
94 assertEquals(2d, new MutableDouble(Double.valueOf(2d)).doubleValue(), 0.0001d);
95 assertEquals(3d, new MutableDouble(new MutableDouble(3d)).doubleValue(), 0.0001d);
96
97 assertEquals(2d, new MutableDouble("2.0").doubleValue(), 0.0001d);
98
99 }
100
101 @Test
102 void testDecrement() {
103 final MutableDouble mutNum = new MutableDouble(1);
104 mutNum.decrement();
105
106 assertEquals(0, mutNum.intValue());
107 assertEquals(0L, mutNum.longValue());
108 }
109
110 @Test
111 void testDecrementAndGet() {
112 final MutableDouble mutNum = new MutableDouble(1d);
113 final double result = mutNum.decrementAndGet();
114
115 assertEquals(0d, result, 0.01d);
116 assertEquals(0, mutNum.intValue());
117 assertEquals(0L, mutNum.longValue());
118 }
119
120 @Test
121 void testEquals() {
122 final MutableDouble mutNumA = new MutableDouble(0d);
123 final MutableDouble mutNumB = new MutableDouble(0d);
124 final MutableDouble mutNumC = new MutableDouble(1d);
125
126 assertEquals(mutNumA, mutNumA);
127 assertEquals(mutNumA, mutNumB);
128 assertEquals(mutNumB, mutNumA);
129 assertEquals(mutNumB, mutNumB);
130 assertNotEquals(mutNumA, mutNumC);
131 assertNotEquals(mutNumB, mutNumC);
132 assertEquals(mutNumC, mutNumC);
133 assertNotEquals(null, mutNumA);
134 assertNotEquals(mutNumA, Double.valueOf(0d));
135 assertNotEquals("0", mutNumA);
136 }
137
138 @Test
139 void testGetAndAddValueObject() {
140 final MutableDouble mutableDouble = new MutableDouble(0.5d);
141 final double result = mutableDouble.getAndAdd(Double.valueOf(2d));
142
143 assertEquals(0.5d, result, 0.01d);
144 assertEquals(2.5d, mutableDouble.doubleValue(), 0.01d);
145 }
146
147 @Test
148 void testGetAndAddValuePrimitive() {
149 final MutableDouble mutableDouble = new MutableDouble(0.5d);
150 final double result = mutableDouble.getAndAdd(1d);
151
152 assertEquals(0.5d, result, 0.01d);
153 assertEquals(1.5d, mutableDouble.doubleValue(), 0.01d);
154 }
155
156 @Test
157 void testGetAndDecrement() {
158 final MutableDouble mutNum = new MutableDouble(1d);
159 final double result = mutNum.getAndDecrement();
160
161 assertEquals(1d, result, 0.01d);
162 assertEquals(0, mutNum.intValue());
163 assertEquals(0L, mutNum.longValue());
164 }
165
166 @Test
167 void testGetAndIncrement() {
168 final MutableDouble mutNum = new MutableDouble(1d);
169 final double result = mutNum.getAndIncrement();
170
171 assertEquals(1d, result, 0.01d);
172 assertEquals(2, mutNum.intValue());
173 assertEquals(2L, mutNum.longValue());
174 }
175
176 @Test
177 void testGetSet() {
178 final MutableDouble mutNum = new MutableDouble(0d);
179 assertEquals(0d, new MutableDouble().doubleValue(), 0.0001d);
180 assertEquals(Double.valueOf(0), new MutableDouble().get());
181 assertEquals(Double.valueOf(0), new MutableDouble().getValue());
182
183 mutNum.setValue(1);
184 assertEquals(1d, mutNum.doubleValue(), 0.0001d);
185 assertEquals(Double.valueOf(1d), mutNum.get());
186 assertEquals(Double.valueOf(1d), mutNum.getValue());
187
188 mutNum.setValue(Double.valueOf(2d));
189 assertEquals(2d, mutNum.doubleValue(), 0.0001d);
190 assertEquals(Double.valueOf(2d), mutNum.get());
191 assertEquals(Double.valueOf(2d), mutNum.getValue());
192
193 mutNum.setValue(new MutableDouble(3d));
194 assertEquals(3d, mutNum.doubleValue(), 0.0001d);
195 assertEquals(Double.valueOf(3d), mutNum.get());
196 assertEquals(Double.valueOf(3d), mutNum.getValue());
197 }
198
199 @Test
200 void testHashCode() {
201 final MutableDouble mutNumA = new MutableDouble(0d);
202 final MutableDouble mutNumB = new MutableDouble(0d);
203 final MutableDouble mutNumC = new MutableDouble(1d);
204
205 assertEquals(mutNumA.hashCode(), mutNumA.hashCode());
206 assertEquals(mutNumA.hashCode(), mutNumB.hashCode());
207 assertNotEquals(mutNumA.hashCode(), mutNumC.hashCode());
208 assertEquals(mutNumA.hashCode(), Double.valueOf(0d).hashCode());
209 }
210
211 @Test
212 void testIncrement() {
213 final MutableDouble mutNum = new MutableDouble(1);
214 mutNum.increment();
215
216 assertEquals(2, mutNum.intValue());
217 assertEquals(2L, mutNum.longValue());
218 }
219
220 @Test
221 void testIncrementAndGet() {
222 final MutableDouble mutNum = new MutableDouble(1d);
223 final double result = mutNum.incrementAndGet();
224
225 assertEquals(2d, result, 0.01d);
226 assertEquals(2, mutNum.intValue());
227 assertEquals(2L, mutNum.longValue());
228 }
229
230 @Test
231 void testNanInfinite() {
232 MutableDouble mutNum = new MutableDouble(Double.NaN);
233 assertTrue(mutNum.isNaN());
234
235 mutNum = new MutableDouble(Double.POSITIVE_INFINITY);
236 assertTrue(mutNum.isInfinite());
237
238 mutNum = new MutableDouble(Double.NEGATIVE_INFINITY);
239 assertTrue(mutNum.isInfinite());
240 }
241
242 @Test
243 void testPrimitiveValues() {
244 final MutableDouble mutNum = new MutableDouble(1.7);
245 assertEquals(1.7F, mutNum.floatValue());
246 assertEquals(1.7, mutNum.doubleValue());
247 assertEquals((byte) 1, mutNum.byteValue());
248 assertEquals((short) 1, mutNum.shortValue());
249 assertEquals(1, mutNum.intValue());
250 assertEquals(1L, mutNum.longValue());
251 }
252
253 @Test
254 void testSetNull() {
255 final MutableDouble mutNum = new MutableDouble(0d);
256 assertNullPointerException(() -> mutNum.setValue(null));
257 }
258
259 @Test
260 void testSubtractValueObject() {
261 final MutableDouble mutNum = new MutableDouble(1);
262 mutNum.subtract(Double.valueOf(0.9d));
263
264 assertEquals(0.1d, mutNum.doubleValue(), 0.01d);
265 }
266
267 @Test
268 void testSubtractValuePrimitive() {
269 final MutableDouble mutNum = new MutableDouble(1);
270 mutNum.subtract(0.9d);
271
272 assertEquals(0.1d, mutNum.doubleValue(), 0.01d);
273 }
274
275 @Test
276 void testToDouble() {
277 assertEquals(Double.valueOf(0d), new MutableDouble(0d).toDouble());
278 assertEquals(Double.valueOf(12.3d), new MutableDouble(12.3d).toDouble());
279 }
280
281 @Test
282 void testToString() {
283 assertEquals("0.0", new MutableDouble(0d).toString());
284 assertEquals("10.0", new MutableDouble(10d).toString());
285 assertEquals("-123.0", new MutableDouble(-123d).toString());
286 }
287
288 }