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    *      http://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.juneau.commons.lang;
18  
19  import static org.apache.juneau.commons.utils.CollectionUtils.*;
20  import static org.apache.juneau.junit.bct.BctAssertions.*;
21  import static org.junit.jupiter.api.Assertions.*;
22  
23  import org.apache.juneau.*;
24  import org.junit.jupiter.api.*;
25  
26  class ShortValue_Test extends TestBase {
27  
28  	//-----------------------------------------------------------------------------------------------------------------
29  	// Basic tests
30  	//-----------------------------------------------------------------------------------------------------------------
31  
32  	@Test
33  	void a01_create() {
34  		var v = ShortValue.create();
35  		assertEquals((short)0, v.get());
36  	}
37  
38  	@Test
39  	void a02_of() {
40  		var v = ShortValue.of((short)42);
41  		assertEquals((short)42, v.get());
42  	}
43  
44  	@Test
45  	void a03_constructor() {
46  		var v = new ShortValue((short)100);
47  		assertEquals((short)100, v.get());
48  	}
49  
50  	@Test
51  	void a04_constructor_withNull() {
52  		var v = new ShortValue(null);
53  		assertNull(v.get());
54  	}
55  
56  	//-----------------------------------------------------------------------------------------------------------------
57  	// getAndIncrement()
58  	//-----------------------------------------------------------------------------------------------------------------
59  
60  	@Test
61  	void b01_getAndIncrement_basic() {
62  		var v = ShortValue.of((short)5);
63  		assertEquals((short)5, v.getAndIncrement());
64  		assertEquals((short)6, v.get());
65  	}
66  
67  	@Test
68  	void b02_getAndIncrement_fromZero() {
69  		var v = ShortValue.create();
70  		assertEquals((short)0, v.getAndIncrement());
71  		assertEquals((short)1, v.get());
72  	}
73  
74  	@Test
75  	void b03_getAndIncrement_multiple() {
76  		var v = ShortValue.of((short)1);
77  		assertEquals((short)1, v.getAndIncrement());
78  		assertEquals((short)2, v.getAndIncrement());
79  		assertEquals((short)3, v.getAndIncrement());
80  		assertEquals((short)4, v.get());
81  	}
82  
83  	@Test
84  	void b04_getAndIncrement_withNull() {
85  		var v = new ShortValue(null);
86  		assertEquals((short)0, v.getAndIncrement());
87  		assertEquals((short)1, v.get());
88  	}
89  
90  	//-----------------------------------------------------------------------------------------------------------------
91  	// Inherited Value<Short> methods
92  	//-----------------------------------------------------------------------------------------------------------------
93  
94  	@Test
95  	void c01_set() {
96  		var v = ShortValue.create();
97  		v.set((short)50);
98  		assertEquals((short)50, v.get());
99  	}
100 
101 	@Test
102 	void c02_setIfEmpty() {
103 		var v = new ShortValue(null);
104 		v.setIfEmpty((short)10);
105 		assertEquals((short)10, v.get());
106 
107 		v.setIfEmpty((short)20);
108 		assertEquals((short)10, v.get()); // Should not change
109 	}
110 
111 	@Test
112 	void c03_orElse() {
113 		var v = new ShortValue(null);
114 		assertEquals((short)99, v.orElse((short)99));
115 
116 		v.set((short)42);
117 		assertEquals((short)42, v.orElse((short)99));
118 	}
119 
120 	@Test
121 	void c04_map() {
122 		var v = ShortValue.of((short)5);
123 		Value<Short> v2 = v.map(x -> (short)(x * 2));
124 		assertEquals((short)10, v2.get());
125 	}
126 
127 	@Test
128 	void c05_ifPresent() {
129 		var v = ShortValue.of((short)7);
130 		var sb = new StringBuilder();
131 		v.ifPresent(x -> sb.append(x));
132 		assertEquals("7", sb.toString());
133 	}
134 
135 	@Test
136 	void c06_isPresent() {
137 		var v = new ShortValue(null);
138 		assertFalse(v.isPresent());
139 
140 		v.set((short)1);
141 		assertTrue(v.isPresent());
142 	}
143 
144 	@Test
145 	void c07_isEmpty() {
146 		var v = new ShortValue(null);
147 		assertEmpty(v);
148 
149 		v.set((short)1);
150 		assertNotEmpty(v);
151 	}
152 
153 	@Test
154 	void c08_getAndSet() {
155 		var v = ShortValue.of((short)10);
156 		assertEquals((short)10, v.getAndSet((short)20));
157 		assertEquals((short)20, v.get());
158 	}
159 
160 	@Test
161 	void c09_getAndUnset() {
162 		var v = ShortValue.of((short)15);
163 		assertEquals((short)15, v.getAndUnset());
164 		assertNull(v.get());
165 	}
166 
167 	//-----------------------------------------------------------------------------------------------------------------
168 	// Use case scenarios
169 	//-----------------------------------------------------------------------------------------------------------------
170 
171 	@Test
172 	void d01_countingInLambda() {
173 		var counter = ShortValue.create();
174 
175 		l(1, 2, 3, 4, 5).forEach(x -> {
176 			if (x % 2 == 0) {
177 				counter.getAndIncrement();
178 			}
179 		});
180 
181 		assertEquals((short)2, counter.get());
182 	}
183 
184 	@Test
185 	void d02_trackingMaxValue() {
186 		var max = ShortValue.of((short)0);
187 
188 		l((short)5, (short)12, (short)3, (short)8, (short)20, (short)1).forEach(x -> {
189 			if (x > max.get()) {
190 				max.set(x);
191 			}
192 		});
193 
194 		assertEquals((short)20, max.get());
195 	}
196 
197 	@Test
198 	void d03_accumulatingValues() {
199 		var sum = ShortValue.create();
200 
201 		l((short)1, (short)2, (short)3, (short)4, (short)5).forEach(x -> {
202 			sum.set((short)(sum.get() + x));
203 		});
204 
205 		assertEquals((short)15, sum.get());
206 	}
207 
208 	//-----------------------------------------------------------------------------------------------------------------
209 	// Increment/Decrement operations
210 	//-----------------------------------------------------------------------------------------------------------------
211 
212 	@Test
213 	void e01_increment() {
214 		var v = ShortValue.of((short)5);
215 		v.increment();
216 		assertEquals((short)6, v.get());
217 	}
218 
219 	@Test
220 	void e02_increment_fromNull() {
221 		var v = new ShortValue(null);
222 		v.increment();
223 		assertEquals((short)1, v.get());  // null treated as 0, so 0+1 = 1
224 	}
225 
226 	@Test
227 	void e03_decrement() {
228 		var v = ShortValue.of((short)5);
229 		v.decrement();
230 		assertEquals((short)4, v.get());
231 	}
232 
233 	@Test
234 	void e04_decrement_fromNull() {
235 		var v = new ShortValue(null);
236 		v.decrement();
237 		assertEquals((short)-1, v.get());  // null treated as 0, so 0-1 = -1
238 	}
239 
240 	@Test
241 	void e05_incrementAndGet() {
242 		var v = ShortValue.of((short)5);
243 		var result = v.incrementAndGet();
244 		assertEquals((short)6, result);
245 		assertEquals((short)6, v.get());
246 	}
247 
248 	@Test
249 	void e06_incrementAndGet_fromNull() {
250 		var v = new ShortValue(null);
251 		var result = v.incrementAndGet();
252 		assertEquals((short)1, result);
253 		assertEquals((short)1, v.get());
254 	}
255 
256 	@Test
257 	void e07_decrementAndGet() {
258 		var v = ShortValue.of((short)5);
259 		var result = v.decrementAndGet();
260 		assertEquals((short)4, result);
261 		assertEquals((short)4, v.get());
262 	}
263 
264 	@Test
265 	void e08_decrementAndGet_fromNull() {
266 		var v = new ShortValue(null);
267 		var result = v.decrementAndGet();
268 		assertEquals((short)-1, result);
269 		assertEquals((short)-1, v.get());
270 	}
271 
272 	//-----------------------------------------------------------------------------------------------------------------
273 	// Add operations
274 	//-----------------------------------------------------------------------------------------------------------------
275 
276 	@Test
277 	void f01_add() {
278 		var v = ShortValue.of((short)10);
279 		v.add((short)5);
280 		assertEquals((short)15, v.get());
281 	}
282 
283 	@Test
284 	void f02_add_withNullValue() {
285 		var v = ShortValue.of((short)10);
286 		v.add(null);
287 		assertEquals((short)10, v.get());  // null treated as 0, so 10+0 = 10
288 	}
289 
290 	@Test
291 	void f03_add_toNullValue() {
292 		var v = new ShortValue(null);
293 		v.add((short)5);
294 		assertEquals((short)5, v.get());  // null treated as 0, so 0+5 = 5
295 	}
296 
297 	@Test
298 	void f04_add_bothNull() {
299 		var v = new ShortValue(null);
300 		v.add(null);
301 		assertEquals((short)0, v.get());  // null+null = 0+0 = 0
302 	}
303 
304 	@Test
305 	void f05_addAndGet() {
306 		var v = ShortValue.of((short)10);
307 		var result = v.addAndGet((short)5);
308 		assertEquals((short)15, result);
309 		assertEquals((short)15, v.get());
310 	}
311 
312 	@Test
313 	void f06_addAndGet_withNullValue() {
314 		var v = ShortValue.of((short)10);
315 		var result = v.addAndGet(null);
316 		assertEquals((short)10, result);
317 		assertEquals((short)10, v.get());
318 	}
319 
320 	@Test
321 	void f07_addAndGet_toNullValue() {
322 		var v = new ShortValue(null);
323 		var result = v.addAndGet((short)5);
324 		assertEquals((short)5, result);
325 		assertEquals((short)5, v.get());
326 	}
327 
328 	//-----------------------------------------------------------------------------------------------------------------
329 	// Comparison operations
330 	//-----------------------------------------------------------------------------------------------------------------
331 
332 	@Test
333 	void g01_is() {
334 		var v = ShortValue.of((short)42);
335 		assertTrue(v.is((short)42));
336 		assertFalse(v.is((short)43));
337 		assertFalse(v.is(null));
338 	}
339 
340 	@Test
341 	void g02_is_withNullValue() {
342 		var v = new ShortValue(null);
343 		assertFalse(v.is((short)42));
344 		assertTrue(v.is(null));
345 	}
346 
347 	@Test
348 	void g03_isAny() {
349 		var v = ShortValue.of((short)5);
350 		assertTrue(v.isAny((short)3, (short)5, (short)7));
351 		assertTrue(v.isAny((short)5));
352 		assertFalse(v.isAny((short)1, (short)2));
353 		assertFalse(v.isAny());
354 	}
355 
356 	@Test
357 	void g04_isAny_nullValue() {
358 		var v = new ShortValue(null);
359 		assertFalse(v.isAny((short)1, (short)2, (short)3));
360 		assertTrue(v.isAny((Short)null));
361 		assertTrue(v.isAny((short)1, null, (short)2));
362 	}
363 }
364