1
2
3
4 package de.powerstat.validation.values.test;
5
6
7 import static org.junit.jupiter.api.Assertions.assertAll;
8 import static org.junit.jupiter.api.Assertions.assertEquals;
9 import static org.junit.jupiter.api.Assertions.assertFalse;
10 import static org.junit.jupiter.api.Assertions.assertNotEquals;
11 import static org.junit.jupiter.api.Assertions.assertThrows;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
13
14 import org.junit.jupiter.api.Test;
15 import org.junit.jupiter.params.ParameterizedTest;
16 import org.junit.jupiter.params.provider.ValueSource;
17
18 import de.powerstat.validation.values.Milliseconds;
19 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
20
21
22
23
24
25 @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR", "PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS"})
26 final class MillisecondsTests
27 {
28
29
30
31 private static final String NOT_MILLISECONDS = "Not milliseconds!";
32
33
34
35
36 private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected";
37
38
39
40
41 private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected";
42
43
44
45
46
47 MillisecondsTests()
48 {
49 super();
50 }
51
52
53
54
55
56 @Test
57 void testFactory1()
58 {
59 assertEquals(0, Milliseconds.of("0").longValue(), MillisecondsTests.NOT_MILLISECONDS);
60 }
61
62
63
64
65
66
67
68 @ParameterizedTest
69 @ValueSource(longs = {0, 2147483647})
70 void testIsMilliseconds(final long milliseconds)
71 {
72 assertEquals(milliseconds, Milliseconds.of(milliseconds).longValue(), MillisecondsTests.NOT_MILLISECONDS);
73 }
74
75
76
77
78
79
80
81 @ParameterizedTest
82 @ValueSource(longs = {-1})
83 void testIsNotAMilliseconds(final long milliseconds)
84 {
85 assertThrows(IndexOutOfBoundsException.class, () ->
86 {
87 Milliseconds.of(milliseconds);
88 }, "Index out of bounds exception expected"
89 );
90 }
91
92
93
94
95
96 @Test
97 void testLongValue()
98 {
99 assertEquals(10, Milliseconds.of(10).longValue(), MillisecondsTests.NOT_MILLISECONDS);
100 }
101
102
103
104
105
106 @Test
107 void testStringValue()
108 {
109 assertEquals("10", Milliseconds.of(10).stringValue(), MillisecondsTests.NOT_MILLISECONDS);
110 }
111
112
113
114
115
116 @Test
117 void testHashCode()
118 {
119 final Milliseconds milliseconds1 = Milliseconds.of(0);
120 final Milliseconds milliseconds2 = Milliseconds.of(0);
121 final Milliseconds milliseconds3 = Milliseconds.of(1);
122 assertAll("testHashCode",
123 () -> assertEquals(milliseconds1.hashCode(), milliseconds2.hashCode(), "hashCodes are not equal"),
124 () -> assertNotEquals(milliseconds1.hashCode(), milliseconds3.hashCode(), "hashCodes are equal")
125 );
126 }
127
128
129
130
131
132 @Test
133 @SuppressWarnings("java:S5785")
134 void testEquals()
135 {
136 final Milliseconds milliseconds1 = Milliseconds.of(0);
137 final Milliseconds milliseconds2 = Milliseconds.of(0);
138 final Milliseconds milliseconds3 = Milliseconds.of(1);
139 final Milliseconds milliseconds4 = Milliseconds.of(0);
140 assertAll("testEquals",
141 () -> assertTrue(milliseconds1.equals(milliseconds1), "milliseconds11 is not equal"),
142 () -> assertTrue(milliseconds1.equals(milliseconds2), "milliseconds12 are not equal"),
143 () -> assertTrue(milliseconds2.equals(milliseconds1), "milliseconds21 are not equal"),
144 () -> assertTrue(milliseconds2.equals(milliseconds4), "milliseconds24 are not equal"),
145 () -> assertTrue(milliseconds1.equals(milliseconds4), "milliseconds14 are not equal"),
146 () -> assertFalse(milliseconds1.equals(milliseconds3), "milliseconds13 are equal"),
147 () -> assertFalse(milliseconds3.equals(milliseconds1), "milliseconds31 are equal"),
148 () -> assertFalse(milliseconds1.equals(null), "milliseconds10 is equal")
149 );
150 }
151
152
153
154
155
156 @Test
157 void testToString()
158 {
159 final Milliseconds milliseconds = Milliseconds.of(0);
160 assertEquals("Milliseconds[milliseconds=0]", milliseconds.toString(), "toString not equal");
161 }
162
163
164
165
166
167 @Test
168 @SuppressWarnings("java:S5785")
169 void testCompareTo()
170 {
171 final Milliseconds milliseconds1 = Milliseconds.of(1);
172 final Milliseconds milliseconds2 = Milliseconds.of(1);
173 final Milliseconds milliseconds3 = Milliseconds.of(2);
174 final Milliseconds milliseconds4 = Milliseconds.of(3);
175 final Milliseconds milliseconds5 = Milliseconds.of(1);
176 assertAll("testCompareTo",
177 () -> assertTrue(milliseconds1.compareTo(milliseconds2) == -milliseconds2.compareTo(milliseconds1), "reflexive1"),
178 () -> assertTrue(milliseconds1.compareTo(milliseconds3) == -milliseconds3.compareTo(milliseconds1), "reflexive2"),
179 () -> assertTrue((milliseconds4.compareTo(milliseconds3) > 0) && (milliseconds3.compareTo(milliseconds1) > 0) && (milliseconds4.compareTo(milliseconds1) > 0), "transitive1"),
180 () -> assertTrue((milliseconds1.compareTo(milliseconds2) == 0) && (Math.abs(milliseconds1.compareTo(milliseconds5)) == Math.abs(milliseconds2.compareTo(milliseconds5))), "sgn1"),
181 () -> assertTrue((milliseconds1.compareTo(milliseconds2) == 0) && milliseconds1.equals(milliseconds2), "equals")
182 );
183 }
184
185
186
187
188
189 @Test
190 void testAdd1()
191 {
192 final Milliseconds milliseconds1 = Milliseconds.of(1);
193 final Milliseconds milliseconds2 = Milliseconds.of(1);
194 final Milliseconds millisecondsResult = milliseconds1.add(milliseconds2);
195 assertEquals(2, millisecondsResult.longValue(), MillisecondsTests.RESULT_NOT_AS_EXPECTED);
196 }
197
198
199
200
201
202 @Test
203 void testAdd2()
204 {
205 final Milliseconds milliseconds1 = Milliseconds.of(Long.MAX_VALUE);
206 final Milliseconds milliseconds2 = Milliseconds.of(1);
207 assertThrows(ArithmeticException.class, () ->
208 {
209 milliseconds1.add(milliseconds2);
210 }, MillisecondsTests.ARITHMETIC_EXCEPTION_EXPECTED
211 );
212 }
213
214
215
216
217
218 @Test
219 void testSubstract1()
220 {
221 final Milliseconds milliseconds1 = Milliseconds.of(6);
222 final Milliseconds milliseconds2 = Milliseconds.of(3);
223 final Milliseconds millisecondsResult = milliseconds1.subtract(milliseconds2);
224 assertEquals(3, millisecondsResult.longValue(), MillisecondsTests.RESULT_NOT_AS_EXPECTED);
225 }
226
227
228
229
230
231 @Test
232 void testSubstract2()
233 {
234 final Milliseconds milliseconds1 = Milliseconds.of(3);
235 final Milliseconds milliseconds2 = Milliseconds.of(6);
236 final Milliseconds millisecondsResult = milliseconds1.subtract(milliseconds2);
237 assertEquals(3, millisecondsResult.longValue(), MillisecondsTests.RESULT_NOT_AS_EXPECTED);
238 }
239
240
241
242
243
244 @Test
245 void testMultiply1()
246 {
247 final Milliseconds milliseconds1 = Milliseconds.of(7);
248 final Milliseconds millisecondsResult = milliseconds1.multiply(3);
249 assertEquals(21, millisecondsResult.longValue(), MillisecondsTests.RESULT_NOT_AS_EXPECTED);
250 }
251
252
253
254
255
256 @Test
257 void testMultiply2()
258 {
259 final Milliseconds milliseconds1 = Milliseconds.of(Long.MAX_VALUE / 2);
260 assertThrows(ArithmeticException.class, () ->
261 {
262 milliseconds1.multiply(3);
263 }, MillisecondsTests.ARITHMETIC_EXCEPTION_EXPECTED
264 );
265 }
266
267
268
269
270
271 @Test
272 void testDivide1()
273 {
274 final Milliseconds milliseconds1 = Milliseconds.of(10);
275 final Milliseconds millisecondsResult = milliseconds1.divide(2);
276 assertEquals(5, millisecondsResult.longValue(), MillisecondsTests.RESULT_NOT_AS_EXPECTED);
277 }
278
279
280
281
282
283 @Test
284 void testDivide2()
285 {
286 final Milliseconds milliseconds1 = Milliseconds.of(10);
287 final Milliseconds millisecondsResult = milliseconds1.divide(3);
288 assertEquals(3, millisecondsResult.longValue(), MillisecondsTests.RESULT_NOT_AS_EXPECTED);
289 }
290
291
292
293
294
295 @Test
296 void testDivide3()
297 {
298 final Milliseconds milliseconds1 = Milliseconds.of(10);
299 assertThrows(ArithmeticException.class, () ->
300 {
301 milliseconds1.divide(0);
302 }, MillisecondsTests.ARITHMETIC_EXCEPTION_EXPECTED
303 );
304 }
305
306
307
308
309
310 @Test
311 void testModulo1()
312 {
313 final Milliseconds milliseconds1 = Milliseconds.of(10);
314 final Milliseconds millisecondsResult = milliseconds1.modulo(2);
315 assertEquals(0, millisecondsResult.longValue(), MillisecondsTests.RESULT_NOT_AS_EXPECTED);
316 }
317
318
319
320
321
322 @Test
323 void testModulo2()
324 {
325 final Milliseconds milliseconds1 = Milliseconds.of(10);
326 final Milliseconds millisecondsResult = milliseconds1.modulo(3);
327 assertEquals(1, millisecondsResult.longValue(), MillisecondsTests.RESULT_NOT_AS_EXPECTED);
328 }
329
330
331
332
333
334 @Test
335 void testModulo3()
336 {
337 final Milliseconds milliseconds1 = Milliseconds.of(10);
338 assertThrows(ArithmeticException.class, () ->
339 {
340 milliseconds1.modulo(0);
341 }, MillisecondsTests.ARITHMETIC_EXCEPTION_EXPECTED
342 );
343 }
344
345 }