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.junit.jupiter.api.Assertions.*;
21  
22  import org.apache.juneau.*;
23  import org.junit.jupiter.api.*;
24  
25  class ByteValue_Test extends TestBase {
26  
27  	//-----------------------------------------------------------------------------------------------------------------
28  	// Basic tests
29  	//-----------------------------------------------------------------------------------------------------------------
30  
31  	@Test
32  	void a01_create() {
33  		var a = ByteValue.create();
34  		assertEquals((byte)0, a.get());
35  		assertTrue(a.isPresent());
36  	}
37  
38  	@Test
39  	void a02_of() {
40  		var a = ByteValue.of((byte)42);
41  		assertEquals((byte)42, a.get());
42  		assertTrue(a.isPresent());
43  	}
44  
45  	@Test
46  	void a03_of_null() {
47  		var a = ByteValue.of(null);
48  		assertEquals((byte)0, a.get());
49  		assertTrue(a.isPresent());
50  	}
51  
52  	@Test
53  	void a04_constructor_default() {
54  		var a = new ByteValue();
55  		assertEquals((byte)0, a.get());
56  	}
57  
58  	@Test
59  	void a05_constructor_withValue() {
60  		var a = new ByteValue((byte)100);
61  		assertEquals((byte)100, a.get());
62  	}
63  
64  	//-----------------------------------------------------------------------------------------------------------------
65  	// increment/decrement tests
66  	//-----------------------------------------------------------------------------------------------------------------
67  
68  	@Test
69  	void b01_increment() {
70  		var a = ByteValue.of((byte)5);
71  		a.increment();
72  		assertEquals((byte)6, a.get());
73  	}
74  
75  	@Test
76  	void b02_decrement() {
77  		var a = ByteValue.of((byte)5);
78  		a.decrement();
79  		assertEquals((byte)4, a.get());
80  	}
81  
82  	@Test
83  	void b03_incrementAndGet() {
84  		var a = ByteValue.of((byte)5);
85  		assertEquals((byte)6, a.incrementAndGet());
86  		assertEquals((byte)6, a.get());
87  	}
88  
89  	@Test
90  	void b04_decrementAndGet() {
91  		var a = ByteValue.of((byte)5);
92  		assertEquals((byte)4, a.decrementAndGet());
93  		assertEquals((byte)4, a.get());
94  	}
95  
96  	@Test
97  	void b05_increment_chain() {
98  		var a = ByteValue.of((byte)0);
99  		a.increment().increment().increment();
100 		assertEquals((byte)3, a.get());
101 	}
102 
103 	@Test
104 	void b06_decrement_chain() {
105 		var a = ByteValue.of((byte)10);
106 		a.decrement().decrement().decrement();
107 		assertEquals((byte)7, a.get());
108 	}
109 
110 	//-----------------------------------------------------------------------------------------------------------------
111 	// add/addAndGet tests
112 	//-----------------------------------------------------------------------------------------------------------------
113 
114 	@Test
115 	void c01_add() {
116 		var a = ByteValue.of((byte)10);
117 		a.add((byte)5);
118 		assertEquals((byte)15, a.get());
119 	}
120 
121 	@Test
122 	void c02_addAndGet() {
123 		var a = ByteValue.of((byte)10);
124 		assertEquals((byte)15, a.addAndGet((byte)5));
125 		assertEquals((byte)15, a.get());
126 	}
127 
128 	@Test
129 	void c02b_addAndGet_null() {
130 		var a = ByteValue.of((byte)10);
131 		assertEquals((byte)10, a.addAndGet(null)); // null should be treated as 0
132 		assertEquals((byte)10, a.get());
133 	}
134 
135 	@Test
136 	void c02c_addAndGet_negative() {
137 		var a = ByteValue.of((byte)10);
138 		assertEquals((byte)7, a.addAndGet((byte)-3));
139 		assertEquals((byte)7, a.get());
140 	}
141 
142 	@Test
143 	void c02d_addAndGet_zero() {
144 		var a = ByteValue.of((byte)10);
145 		assertEquals((byte)10, a.addAndGet((byte)0));
146 		assertEquals((byte)10, a.get());
147 	}
148 
149 	@Test
150 	void c03_add_null() {
151 		var a = ByteValue.of((byte)10);
152 		a.add(null);
153 		assertEquals((byte)10, a.get());
154 	}
155 
156 	@Test
157 	void c04_add_chain() {
158 		var a = ByteValue.of((byte)0);
159 		a.add((byte)5).add((byte)10).add((byte)15);
160 		assertEquals((byte)30, a.get());
161 	}
162 
163 	@Test
164 	void c05_add_negative() {
165 		var a = ByteValue.of((byte)10);
166 		a.add((byte)-3);
167 		assertEquals((byte)7, a.get());
168 	}
169 
170 	//-----------------------------------------------------------------------------------------------------------------
171 	// is/isAny tests
172 	//-----------------------------------------------------------------------------------------------------------------
173 
174 	@Test
175 	void d01_is_match() {
176 		var a = ByteValue.of((byte)42);
177 		assertTrue(a.is((byte)42));
178 	}
179 
180 	@Test
181 	void d02_is_noMatch() {
182 		var a = ByteValue.of((byte)42);
183 		assertFalse(a.is((byte)43));
184 	}
185 
186 	@Test
187 	void d03_isAny_match() {
188 		var a = ByteValue.of((byte)5);
189 		assertTrue(a.isAny((byte)3, (byte)5, (byte)7));
190 	}
191 
192 	@Test
193 	void d04_isAny_noMatch() {
194 		var a = ByteValue.of((byte)5);
195 		assertFalse(a.isAny((byte)1, (byte)2));
196 	}
197 
198 	@Test
199 	void d05_isAny_empty() {
200 		var a = ByteValue.of((byte)5);
201 		assertFalse(a.isAny());
202 	}
203 
204 	//-----------------------------------------------------------------------------------------------------------------
205 	// setIf/update tests
206 	//-----------------------------------------------------------------------------------------------------------------
207 
208 	@Test
209 	void e01_setIf_true() {
210 		var a = ByteValue.of((byte)10);
211 		a.setIf(true, (byte)20);
212 		assertEquals((byte)20, a.get());
213 	}
214 
215 	@Test
216 	void e02_setIf_false() {
217 		var a = ByteValue.of((byte)10);
218 		a.setIf(false, (byte)20);
219 		assertEquals((byte)10, a.get());
220 	}
221 
222 	@Test
223 	void e03_update() {
224 		var a = ByteValue.of((byte)10);
225 		a.update(x -> (byte)(x * 2));
226 		assertEquals((byte)20, a.get());
227 	}
228 
229 	@Test
230 	void e04_update_chain() {
231 		var a = ByteValue.of((byte)2);
232 		a.update(x -> (byte)(x * 2)).update(x -> (byte)(x + 1));
233 		assertEquals((byte)5, a.get());
234 	}
235 
236 	//-----------------------------------------------------------------------------------------------------------------
237 	// Inherited Value<Byte> functionality tests
238 	//-----------------------------------------------------------------------------------------------------------------
239 
240 	@Test
241 	void f01_orElse() {
242 		var a = ByteValue.of((byte)10);
243 		assertEquals((byte)10, a.orElse((byte)99));
244 
245 		a.set(null);
246 		assertEquals((byte)99, a.orElse((byte)99));
247 	}
248 
249 	@Test
250 	void f02_getAndSet() {
251 		var a = ByteValue.of((byte)5);
252 		var b = a.getAndSet((byte)10);
253 		assertEquals((byte)5, b);
254 		assertEquals((byte)10, a.get());
255 	}
256 
257 	//-----------------------------------------------------------------------------------------------------------------
258 	// Use case scenarios
259 	//-----------------------------------------------------------------------------------------------------------------
260 
261 	@Test
262 	void g01_counter() {
263 		var a = ByteValue.create();
264 		for (var i = 0; i < 10; i++) {
265 			a.increment();
266 		}
267 		assertEquals((byte)10, a.get());
268 	}
269 
270 	@Test
271 	void g02_accumulator() {
272 		var a = ByteValue.create();
273 		var list = l((byte)1, (byte)2, (byte)3, (byte)4, (byte)5);
274 		list.forEach(a::add);
275 		assertEquals((byte)15, a.get());
276 	}
277 
278 	@Test
279 	void g03_conditionalCounter() {
280 		var a = ByteValue.create();
281 		for (var i = 0; i < 20; i++) {
282 			a.setIf(i % 2 == 0, (byte)(a.get() + 1));
283 		}
284 		assertEquals((byte)10, a.get());  // 10 even numbers
285 	}
286 }
287