View Javadoc
1   /*
2    * Copyright (C) 2021-2023 Dipl.-Inform. Kai Hofmann. All rights reserved!
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.Millisecond;
19  import de.powerstat.validation.values.Milliseconds;
20  import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
21  
22  
23  /**
24   * Millisecond tests.
25   */
26  @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"})
27  final class MillisecondTests
28   {
29    /**
30     * Not millisecond constant.
31     */
32    private static final String NOT_MILLISECOND = "Not millisecond!"; //$NON-NLS-1$
33  
34    /**
35     * Result not as expected constant.
36     */
37    private static final String RESULT_NOT_AS_EXPECTED = "Result not as expected"; //$NON-NLS-1$
38  
39    /**
40     * Arithmetic exception expected constant.
41     */
42    private static final String ARITHMETIC_EXCEPTION_EXPECTED = "Arithmetic exception expected"; //$NON-NLS-1$
43  
44  
45    /**
46     * Default constructor.
47     */
48    /* default */ MillisecondTests()
49     {
50      super();
51     }
52  
53  
54    /**
55     * Factory string test.
56     */
57    @Test
58    /* default */ void testFatory1()
59     {
60      assertEquals(0, Millisecond.of("0").intValue(), MillisecondTests.NOT_MILLISECOND);
61     }
62  
63  
64    /**
65     * Is millisecond.
66     *
67     * @param millisecond Millisecond
68     */
69    @ParameterizedTest
70    @ValueSource(ints = {0, 999})
71    /* default */ void testIsMilliseconds(final int millisecond)
72     {
73      assertEquals(millisecond, Millisecond.of(millisecond).intValue(), MillisecondTests.NOT_MILLISECOND);
74     }
75  
76  
77    /**
78     * Is not a millisecond.
79     *
80     * @param millisecond Millisecond
81     */
82    @ParameterizedTest
83    @ValueSource(ints = {-1, 1000})
84    /* default */ void testIsNotAMillisecond(final int millisecond)
85     {
86      assertThrows(IndexOutOfBoundsException.class, () ->
87       {
88        /* final Millisecond millisecond = */ Millisecond.of(millisecond);
89       }, "Index out of bounds exception expected" //$NON-NLS-1$
90      );
91     }
92  
93  
94    /**
95     * intValue.
96     */
97    @Test
98    /* default */ void testIntValue()
99     {
100     assertEquals(10, Millisecond.of(10).intValue(), MillisecondTests.NOT_MILLISECOND);
101    }
102 
103 
104   /**
105    * stringValue.
106    */
107   @Test
108   /* default */ void testStringValue()
109    {
110     assertEquals("10", Millisecond.of(10).stringValue(), MillisecondTests.NOT_MILLISECOND);
111    }
112 
113 
114   /**
115    * Test hash code.
116    */
117   @Test
118   /* default */ void testHashCode()
119    {
120     final Millisecond millisecond1 = Millisecond.of(0);
121     final Millisecond millisecond2 = Millisecond.of(0);
122     final Millisecond millisecond3 = Millisecond.of(1);
123     assertAll("testHashCode", //$NON-NLS-1$
124       () -> assertEquals(millisecond1.hashCode(), millisecond2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
125       () -> assertNotEquals(millisecond1.hashCode(), millisecond3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
126     );
127    }
128 
129 
130   /**
131    * Test equals.
132    */
133   @Test
134   @SuppressWarnings("java:S5785")
135   /* default */ void testEquals()
136    {
137     final Millisecond millisecond1 = Millisecond.of(0);
138     final Millisecond millisecond2 = Millisecond.of(0);
139     final Millisecond millisecond3 = Millisecond.of(1);
140     final Millisecond millisecond4 = Millisecond.of(0);
141     assertAll("testEquals", //$NON-NLS-1$
142       () -> assertTrue(millisecond1.equals(millisecond1), "millisecond11 is not equal"), //$NON-NLS-1$
143       () -> assertTrue(millisecond1.equals(millisecond2), "millisecond12 are not equal"), //$NON-NLS-1$
144       () -> assertTrue(millisecond2.equals(millisecond1), "millisecond21 are not equal"), //$NON-NLS-1$
145       () -> assertTrue(millisecond2.equals(millisecond4), "millisecond24 are not equal"), //$NON-NLS-1$
146       () -> assertTrue(millisecond1.equals(millisecond4), "millisecons14 are not equal"), //$NON-NLS-1$
147       () -> assertFalse(millisecond1.equals(millisecond3), "millisecond13 are equal"), //$NON-NLS-1$
148       () -> assertFalse(millisecond3.equals(millisecond1), "millisecond31 are equal"), //$NON-NLS-1$
149       () -> assertFalse(millisecond1.equals(null), "millisecond10 is equal") //$NON-NLS-1$
150     );
151    }
152 
153 
154   /**
155    * Test toString.
156    */
157   @Test
158   /* default */ void testToString()
159    {
160     final Millisecond millisecond = Millisecond.of(0);
161     assertEquals("Millisecond[millisecond=0]", millisecond.toString(), "toString not equal"); //$NON-NLS-1$ //$NON-NLS-2$
162    }
163 
164 
165   /**
166    * Test compareTo.
167    */
168   @Test
169   @SuppressWarnings("java:S5785")
170   /* default */ void testCompareTo()
171    {
172     final Millisecond millisecond1 = Millisecond.of(1);
173     final Millisecond millisecond2 = Millisecond.of(1);
174     final Millisecond millisecond3 = Millisecond.of(2);
175     final Millisecond millisecond4 = Millisecond.of(3);
176     final Millisecond millisecond5 = Millisecond.of(1);
177     assertAll("testCompareTo", //$NON-NLS-1$
178       () -> assertTrue(millisecond1.compareTo(millisecond2) == -millisecond2.compareTo(millisecond1), "reflexive1"), //$NON-NLS-1$
179       () -> assertTrue(millisecond1.compareTo(millisecond3) == -millisecond3.compareTo(millisecond1), "reflexive2"), //$NON-NLS-1$
180       () -> assertTrue((millisecond4.compareTo(millisecond3) > 0) && (millisecond3.compareTo(millisecond1) > 0) && (millisecond4.compareTo(millisecond1) > 0), "transitive1"), //$NON-NLS-1$
181       () -> assertTrue((millisecond1.compareTo(millisecond2) == 0) && (Math.abs(millisecond1.compareTo(millisecond5)) == Math.abs(millisecond2.compareTo(millisecond5))), "sgn1"), //$NON-NLS-1$
182       () -> assertTrue((millisecond1.compareTo(millisecond2) == 0) && millisecond1.equals(millisecond2), "equals") //$NON-NLS-1$
183     );
184    }
185 
186 
187   /**
188    * Test add.
189    */
190   @Test
191   /* default */ void testAdd1()
192    {
193     final Millisecond millisecond = Millisecond.of(0);
194     final Milliseconds milliseconds = Milliseconds.of(1);
195     final Millisecond millisecondResult = millisecond.add(milliseconds);
196     assertEquals(1, millisecondResult.intValue(), MillisecondTests.RESULT_NOT_AS_EXPECTED);
197    }
198 
199 
200   /**
201    * Test add.
202    */
203   @Test
204   /* default */ void testAdd2()
205    {
206     final Millisecond millisecond = Millisecond.of(999);
207     final Milliseconds milliseconds = Milliseconds.of(1);
208     assertThrows(ArithmeticException.class, () ->
209      {
210       /* final Millisecond millisecondResult = */ millisecond.add(milliseconds);
211      }, MillisecondTests.ARITHMETIC_EXCEPTION_EXPECTED
212     );
213    }
214 
215 
216   /**
217    * Test subtract.
218    */
219   @Test
220   /* default */ void testSubtract1()
221    {
222     final Millisecond millisecond = Millisecond.of(2);
223     final Milliseconds milliseconds = Milliseconds.of(1);
224     final Millisecond millisecondResult = millisecond.subtract(milliseconds);
225     assertEquals(1, millisecondResult.intValue(), MillisecondTests.RESULT_NOT_AS_EXPECTED);
226    }
227 
228 
229   /**
230    * Test subtract.
231    */
232   @Test
233   /* default */ void testSubtract2()
234    {
235     final Millisecond millisecond = Millisecond.of(0);
236     final Milliseconds milliseconds = Milliseconds.of(1);
237     assertThrows(ArithmeticException.class, () ->
238      {
239       /* final Millisecond millisecondResult = */ millisecond.subtract(milliseconds);
240      }, MillisecondTests.ARITHMETIC_EXCEPTION_EXPECTED
241     );
242    }
243 
244 
245   /**
246    * Test add.
247    */
248   @Test
249   /* default */ void testIncrement1()
250    {
251     final Millisecond millisecond = Millisecond.of(0);
252     final Millisecond millisecondResult = millisecond.increment();
253     assertEquals(1, millisecondResult.intValue(), MillisecondTests.RESULT_NOT_AS_EXPECTED);
254    }
255 
256 
257   /**
258    * Test add.
259    */
260   @Test
261   /* default */ void testIncrement2()
262    {
263     final Millisecond millisecond = Millisecond.of(999);
264     assertThrows(ArithmeticException.class, () ->
265      {
266       /* final Millisecond millisecondResult = */ millisecond.increment();
267      }, MillisecondTests.ARITHMETIC_EXCEPTION_EXPECTED
268     );
269    }
270 
271 
272   /**
273    * Test add.
274    */
275   @Test
276   /* default */ void testDecrement1()
277    {
278     final Millisecond millisecond = Millisecond.of(2);
279     final Millisecond millisecondResult = millisecond.decrement();
280     assertEquals(1, millisecondResult.intValue(), MillisecondTests.RESULT_NOT_AS_EXPECTED);
281    }
282 
283 
284   /**
285    * Test add.
286    */
287   @Test
288   /* default */ void testDecrement2()
289    {
290     final Millisecond millisecond = Millisecond.of(0);
291     assertThrows(ArithmeticException.class, () ->
292      {
293       /* final Millisecond millisecondResult = */ millisecond.decrement();
294      }, MillisecondTests.ARITHMETIC_EXCEPTION_EXPECTED
295     );
296    }
297 
298  }