View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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   * JUnit tests.
29   *
30   * @see MutableFloat
31   */
32  class MutableFloatTest extends AbstractLangTest {
33  
34      @Test
35      void testAddAndGetValueObject() {
36          final MutableFloat mutableFloat = new MutableFloat(5f);
37          final float result = mutableFloat.addAndGet(Float.valueOf(2.5f));
38  
39          assertEquals(7.5f, result, 0.01f);
40          assertEquals(7.5f, mutableFloat.floatValue(), 0.01f);
41      }
42  
43      @Test
44      void testAddAndGetValuePrimitive() {
45          final MutableFloat mutableFloat = new MutableFloat(0.5f);
46          final float result = mutableFloat.addAndGet(1f);
47  
48          assertEquals(1.5f, result, 0.01f);
49          assertEquals(1.5f, mutableFloat.floatValue(), 0.01f);
50      }
51  
52      @Test
53      void testAddValueObject() {
54          final MutableFloat mutNum = new MutableFloat(1);
55          mutNum.add(Float.valueOf(1.1f));
56  
57          assertEquals(2.1f, mutNum.floatValue(), 0.01f);
58      }
59  
60      @Test
61      void testAddValuePrimitive() {
62          final MutableFloat mutNum = new MutableFloat(1);
63          mutNum.add(1.1f);
64  
65          assertEquals(2.1f, mutNum.floatValue(), 0.01f);
66      }
67  
68      @Test
69      void testCompareTo() {
70          final MutableFloat mutNum = new MutableFloat(0f);
71  
72          assertEquals(0, mutNum.compareTo(new MutableFloat(0f)));
73          assertEquals(+1, mutNum.compareTo(new MutableFloat(-1f)));
74          assertEquals(-1, mutNum.compareTo(new MutableFloat(1f)));
75      }
76  
77      @Test
78      void testCompareToNull() {
79          final MutableFloat mutNum = new MutableFloat(0f);
80          assertNullPointerException(() -> mutNum.compareTo(null));
81      }
82  
83      @Test
84      void testConstructorNull() {
85          assertNullPointerException(() -> new MutableFloat((Number) null));
86      }
87  
88      @Test
89      void testConstructors() {
90          assertEquals(0f, new MutableFloat().floatValue(), 0.0001f);
91  
92          assertEquals(1f, new MutableFloat(1f).floatValue(), 0.0001f);
93  
94          assertEquals(2f, new MutableFloat(Float.valueOf(2f)).floatValue(), 0.0001f);
95          assertEquals(3f, new MutableFloat(new MutableFloat(3f)).floatValue(), 0.0001f);
96  
97          assertEquals(2f, new MutableFloat("2.0").floatValue(), 0.0001f);
98  
99      }
100 
101     @Test
102     void testDecrement() {
103         final MutableFloat mutNum = new MutableFloat(1);
104         mutNum.decrement();
105 
106         assertEquals(0, mutNum.intValue());
107         assertEquals(0L, mutNum.longValue());
108     }
109 
110     @Test
111     void testDecrementAndGet() {
112         final MutableFloat mutNum = new MutableFloat(1f);
113         final float result = mutNum.decrementAndGet();
114 
115         assertEquals(0f, result, 0.01f);
116         assertEquals(0, mutNum.intValue());
117         assertEquals(0L, mutNum.longValue());
118     }
119 
120     @Test
121     void testEquals() {
122         final MutableFloat mutNumA = new MutableFloat(0f);
123         final MutableFloat mutNumB = new MutableFloat(0f);
124         final MutableFloat mutNumC = new MutableFloat(1f);
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, Float.valueOf(0f));
135         assertNotEquals("0", mutNumA);
136     }
137 
138     @Test
139     void testGetAndAddValueObject() {
140         final MutableFloat mutableFloat = new MutableFloat(7.75f);
141         final float result = mutableFloat.getAndAdd(Float.valueOf(2.25f));
142 
143         assertEquals(7.75f, result, 0.01f);
144         assertEquals(10f, mutableFloat.floatValue(), 0.01f);
145     }
146 
147     @Test
148     void testGetAndAddValuePrimitive() {
149         final MutableFloat mutableFloat = new MutableFloat(1.25f);
150         final float result = mutableFloat.getAndAdd(0.75f);
151 
152         assertEquals(1.25f, result, 0.01f);
153         assertEquals(2f, mutableFloat.floatValue(), 0.01f);
154     }
155 
156     @Test
157     void testGetAndDecrement() {
158         final MutableFloat mutNum = new MutableFloat(1f);
159         final float result = mutNum.getAndDecrement();
160 
161         assertEquals(1f, result, 0.01f);
162         assertEquals(0, mutNum.intValue());
163         assertEquals(0L, mutNum.longValue());
164     }
165 
166     @Test
167     void testGetAndIncrement() {
168         final MutableFloat mutNum = new MutableFloat(1f);
169         final float result = mutNum.getAndIncrement();
170 
171         assertEquals(1f, result, 0.01f);
172         assertEquals(2, mutNum.intValue());
173         assertEquals(2L, mutNum.longValue());
174     }
175 
176     @Test
177     void testGetSet() {
178         final MutableFloat mutNum = new MutableFloat(0f);
179         assertEquals(0f, new MutableFloat().floatValue(), 0.0001f);
180         assertEquals(Float.valueOf(0), new MutableFloat().get());
181         assertEquals(Float.valueOf(0), new MutableFloat().getValue());
182 
183         mutNum.setValue(1);
184         assertEquals(1f, mutNum.floatValue(), 0.0001f);
185         assertEquals(Float.valueOf(1f), mutNum.get());
186         assertEquals(Float.valueOf(1f), mutNum.getValue());
187 
188         mutNum.setValue(Float.valueOf(2f));
189         assertEquals(2f, mutNum.floatValue(), 0.0001f);
190         assertEquals(Float.valueOf(2f), mutNum.get());
191         assertEquals(Float.valueOf(2f), mutNum.getValue());
192 
193         mutNum.setValue(new MutableFloat(3f));
194         assertEquals(3f, mutNum.floatValue(), 0.0001f);
195         assertEquals(Float.valueOf(3f), mutNum.get());
196         assertEquals(Float.valueOf(3f), mutNum.getValue());
197     }
198 
199     @Test
200     void testHashCode() {
201         final MutableFloat mutNumA = new MutableFloat(0f);
202         final MutableFloat mutNumB = new MutableFloat(0f);
203         final MutableFloat mutNumC = new MutableFloat(1f);
204 
205         assertEquals(mutNumA.hashCode(), mutNumA.hashCode());
206         assertEquals(mutNumA.hashCode(), mutNumB.hashCode());
207         assertNotEquals(mutNumA.hashCode(), mutNumC.hashCode());
208         assertEquals(mutNumA.hashCode(), Float.valueOf(0f).hashCode());
209     }
210 
211     @Test
212     void testIncrement() {
213         final MutableFloat mutNum = new MutableFloat(1);
214         mutNum.increment();
215 
216         assertEquals(2, mutNum.intValue());
217         assertEquals(2L, mutNum.longValue());
218     }
219 
220     @Test
221     void testIncrementAndGet() {
222         final MutableFloat mutNum = new MutableFloat(1f);
223         final float result = mutNum.incrementAndGet();
224 
225         assertEquals(2f, result, 0.01f);
226         assertEquals(2, mutNum.intValue());
227         assertEquals(2L, mutNum.longValue());
228     }
229 
230     @Test
231     void testNanInfinite() {
232         MutableFloat mutNum = new MutableFloat(Float.NaN);
233         assertTrue(mutNum.isNaN());
234 
235         mutNum = new MutableFloat(Float.POSITIVE_INFINITY);
236         assertTrue(mutNum.isInfinite());
237 
238         mutNum = new MutableFloat(Float.NEGATIVE_INFINITY);
239         assertTrue(mutNum.isInfinite());
240     }
241 
242     @Test
243     void testPrimitiveValues() {
244         final MutableFloat mutNum = new MutableFloat(1.7F);
245 
246         assertEquals(1, mutNum.intValue());
247         assertEquals(1.7, mutNum.doubleValue(), 0.00001);
248         assertEquals((byte) 1, mutNum.byteValue());
249         assertEquals((short) 1, mutNum.shortValue());
250         assertEquals(1, mutNum.intValue());
251         assertEquals(1L, mutNum.longValue());
252     }
253 
254     @Test
255     void testSetNull() {
256         final MutableFloat mutNum = new MutableFloat(0f);
257         assertNullPointerException(() -> mutNum.setValue(null));
258     }
259 
260     @Test
261     void testSubtractValueObject() {
262         final MutableFloat mutNum = new MutableFloat(1);
263         mutNum.subtract(Float.valueOf(0.9f));
264 
265         assertEquals(0.1f, mutNum.floatValue(), 0.01f);
266     }
267 
268     @Test
269     void testSubtractValuePrimitive() {
270         final MutableFloat mutNum = new MutableFloat(1);
271         mutNum.subtract(0.9f);
272 
273         assertEquals(0.1f, mutNum.floatValue(), 0.01f);
274     }
275 
276     @Test
277     void testToFloat() {
278         assertEquals(Float.valueOf(0f), new MutableFloat(0f).toFloat());
279         assertEquals(Float.valueOf(12.3f), new MutableFloat(12.3f).toFloat());
280     }
281 
282     @Test
283     void testToString() {
284         assertEquals("0.0", new MutableFloat(0f).toString());
285         assertEquals("10.0", new MutableFloat(10f).toString());
286         assertEquals("-123.0", new MutableFloat(-123f).toString());
287     }
288 
289 }