1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.lang3;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertNotEquals;
23 import static org.junit.jupiter.api.Assertions.assertNotNull;
24 import static org.junit.jupiter.api.Assertions.assertSame;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27
28 import java.util.Comparator;
29
30 import org.junit.jupiter.api.BeforeEach;
31 import org.junit.jupiter.api.Test;
32
33
34
35
36 @SuppressWarnings("boxing")
37 public class IntegerRangeTest extends AbstractLangTest {
38
39 private static IntegerRange of(final int min, final int max) {
40 return IntegerRange.of(min, max);
41 }
42
43 private static IntegerRange of(final Integer min, final Integer max) {
44 return IntegerRange.of(min, max);
45 }
46
47 private IntegerRange range1;
48
49 private IntegerRange range2;
50
51 private IntegerRange range3;
52
53 private IntegerRange rangeFull;
54
55 @BeforeEach
56 public void setUp() {
57 range1 = of(10, 20);
58 range2 = of(10, 20);
59 range3 = of(-2, -1);
60 rangeFull = of(Integer.MIN_VALUE, Integer.MAX_VALUE);
61 }
62
63 @Test
64 public void testContainsInt() {
65 assertFalse(range1.contains(null));
66
67 assertTrue(rangeFull.contains(Integer.MIN_VALUE));
68 assertTrue(rangeFull.contains(Integer.MAX_VALUE));
69
70 assertFalse(range1.contains(5));
71 assertTrue(range1.contains(10));
72 assertTrue(range1.contains(15));
73 assertTrue(range1.contains(20));
74 assertFalse(range1.contains(25));
75 }
76
77 @Test
78 public void testContainsRange() {
79
80
81 assertFalse(range1.containsRange(null));
82
83
84 assertTrue(range1.containsRange(Range.of(12, 18)));
85 assertTrue(range1.containsRange(of(12, 18)));
86
87
88 assertFalse(range1.containsRange(Range.of(32, 45)));
89 assertFalse(range1.containsRange(of(32, 45)));
90 assertFalse(range1.containsRange(Range.of(2, 8)));
91 assertFalse(range1.containsRange(of(2, 8)));
92
93
94 assertTrue(range1.containsRange(Range.of(10, 20)));
95 assertTrue(range1.containsRange(of(10, 20)));
96
97
98 assertFalse(range1.containsRange(Range.of(9, 14)));
99 assertFalse(range1.containsRange(of(9, 14)));
100 assertFalse(range1.containsRange(Range.of(16, 21)));
101 assertFalse(range1.containsRange(of(16, 21)));
102
103
104 assertTrue(range1.containsRange(Range.of(10, 19)));
105 assertTrue(range1.containsRange(of(10, 19)));
106 assertFalse(range1.containsRange(Range.of(10, 21)));
107 assertFalse(range1.containsRange(of(10, 21)));
108
109
110 assertTrue(range1.containsRange(Range.of(11, 20)));
111 assertTrue(range1.containsRange(of(11, 20)));
112 assertFalse(range1.containsRange(Range.of(9, 20)));
113 assertFalse(range1.containsRange(of(9, 20)));
114
115
116 assertFalse(range1.containsRange(Range.of(-11, -18)));
117 assertFalse(range1.containsRange(of(-11, -18)));
118 }
119
120 @Test
121 public void testElementCompareTo() {
122 assertThrows(NullPointerException.class, () -> range1.elementCompareTo(null));
123
124 assertEquals(-1, range1.elementCompareTo(5));
125 assertEquals(0, range1.elementCompareTo(10));
126 assertEquals(0, range1.elementCompareTo(15));
127 assertEquals(0, range1.elementCompareTo(20));
128 assertEquals(1, range1.elementCompareTo(25));
129 }
130
131 @Test
132 public void testEqualsObject() {
133 assertEquals(range1, range1);
134 assertEquals(range1, range2);
135 assertEquals(range2, range2);
136 assertEquals(range1, range1);
137 assertEquals(range2, range2);
138 assertEquals(range3, range3);
139 assertNotEquals(range2, range3);
140 assertNotEquals(null, range2);
141 assertNotEquals("Ni!", range2);
142 }
143
144 @Test
145 public void testFit() {
146 assertEquals(range1.getMinimum(), range1.fit(Integer.MIN_VALUE));
147 assertEquals(range1.getMinimum(), range1.fit(range1.getMinimum()));
148 assertEquals(range1.getMaximum(), range1.fit(Integer.MAX_VALUE));
149 assertEquals(range1.getMaximum(), range1.fit(range1.getMaximum()));
150 assertEquals(15, range1.fit(15));
151 }
152
153 @Test
154 public void testFitNull() {
155 assertThrows(NullPointerException.class, () -> {
156 range1.fit(null);
157 });
158 }
159
160 @Test
161 public void testGetMaximum() {
162 assertEquals(20, (int) range1.getMaximum());
163 }
164
165 @Test
166 public void testGetMinimum() {
167 assertEquals(10, (int) range1.getMinimum());
168 }
169
170 @Test
171 public void testHashCode() {
172 assertEquals(range1.hashCode(), range2.hashCode());
173 assertNotEquals(range1.hashCode(), range3.hashCode());
174
175 assertEquals(range1.hashCode(), range1.hashCode());
176 assertTrue(range1.hashCode() != 0);
177 }
178
179 @Test
180 public void testIntersectionWith() {
181 assertSame(range1, range1.intersectionWith(range1));
182
183 assertEquals(Range.of(10, 15), range1.intersectionWith(Range.of(5, 15)));
184 }
185
186 @Test
187 public void testIntersectionWithNonOverlapping() {
188 assertThrows(IllegalArgumentException.class, () -> range1.intersectionWith(Range.of(0, 9)));
189 }
190
191 @Test
192 public void testIntersectionWithNull() {
193 assertThrows(IllegalArgumentException.class, () -> range1.intersectionWith(null));
194 }
195
196 @Test
197 public void testIsAfter() {
198 assertFalse(range1.isAfter(null));
199
200 assertTrue(range1.isAfter(5));
201 assertFalse(range1.isAfter(10));
202 assertFalse(range1.isAfter(15));
203 assertFalse(range1.isAfter(20));
204 assertFalse(range1.isAfter(25));
205 }
206
207 @Test
208 public void testIsAfterRange() {
209 assertFalse(range1.isAfterRange(null));
210
211 assertTrue(range1.isAfterRange(Range.of(5, 9)));
212
213 assertFalse(range1.isAfterRange(Range.of(5, 10)));
214 assertFalse(range1.isAfterRange(Range.of(5, 20)));
215 assertFalse(range1.isAfterRange(Range.of(5, 25)));
216 assertFalse(range1.isAfterRange(Range.of(15, 25)));
217
218 assertFalse(range1.isAfterRange(Range.of(21, 25)));
219
220 assertFalse(range1.isAfterRange(Range.of(10, 20)));
221 }
222
223 @Test
224 public void testIsBefore() {
225 assertFalse(range1.isBefore(null));
226
227 assertFalse(range1.isBefore(5));
228 assertFalse(range1.isBefore(10));
229 assertFalse(range1.isBefore(15));
230 assertFalse(range1.isBefore(20));
231 assertTrue(range1.isBefore(25));
232 }
233
234 @Test
235 public void testIsBeforeIntegerRange() {
236 assertFalse(range1.isBeforeRange(null));
237
238 assertFalse(range1.isBeforeRange(of(5, 9)));
239
240 assertFalse(range1.isBeforeRange(of(5, 10)));
241 assertFalse(range1.isBeforeRange(of(5, 20)));
242 assertFalse(range1.isBeforeRange(of(5, 25)));
243 assertFalse(range1.isBeforeRange(of(15, 25)));
244
245 assertTrue(range1.isBeforeRange(of(21, 25)));
246
247 assertFalse(range1.isBeforeRange(of(10, 20)));
248 }
249
250 @Test
251 public void testIsBeforeRange() {
252 assertFalse(range1.isBeforeRange(null));
253
254 assertFalse(range1.isBeforeRange(Range.of(5, 9)));
255
256 assertFalse(range1.isBeforeRange(Range.of(5, 10)));
257 assertFalse(range1.isBeforeRange(Range.of(5, 20)));
258 assertFalse(range1.isBeforeRange(Range.of(5, 25)));
259 assertFalse(range1.isBeforeRange(Range.of(15, 25)));
260
261 assertTrue(range1.isBeforeRange(Range.of(21, 25)));
262
263 assertFalse(range1.isBeforeRange(Range.of(10, 20)));
264 }
265
266 @Test
267 public void testIsEndedBy() {
268 assertFalse(range1.isEndedBy(null));
269
270 assertFalse(range1.isEndedBy(5));
271 assertFalse(range1.isEndedBy(10));
272 assertFalse(range1.isEndedBy(15));
273 assertTrue(range1.isEndedBy(20));
274 assertFalse(range1.isEndedBy(25));
275 }
276
277 @Test
278 public void testIsOverlappedByIntegerRange() {
279
280
281 assertFalse(range1.isOverlappedBy(null));
282
283
284 assertTrue(range1.isOverlappedBy(of(12, 18)));
285
286
287 assertFalse(range1.isOverlappedBy(of(32, 45)));
288 assertFalse(range1.isOverlappedBy(of(2, 8)));
289
290
291 assertTrue(range1.isOverlappedBy(of(10, 20)));
292
293
294 assertTrue(range1.isOverlappedBy(of(9, 14)));
295 assertTrue(range1.isOverlappedBy(of(16, 21)));
296
297
298 assertTrue(range1.isOverlappedBy(of(10, 19)));
299 assertTrue(range1.isOverlappedBy(of(10, 21)));
300
301
302 assertTrue(range1.isOverlappedBy(of(11, 20)));
303 assertTrue(range1.isOverlappedBy(of(9, 20)));
304
305
306 assertFalse(range1.isOverlappedBy(of(-11, -18)));
307
308
309 assertTrue(range1.isOverlappedBy(of(9, 21)));
310 }
311
312 @Test
313 public void testIsOverlappedByRange() {
314
315
316 assertFalse(range1.isOverlappedBy(null));
317
318
319 assertTrue(range1.isOverlappedBy(Range.of(12, 18)));
320
321
322 assertFalse(range1.isOverlappedBy(Range.of(32, 45)));
323 assertFalse(range1.isOverlappedBy(Range.of(2, 8)));
324
325
326 assertTrue(range1.isOverlappedBy(Range.of(10, 20)));
327
328
329 assertTrue(range1.isOverlappedBy(Range.of(9, 14)));
330 assertTrue(range1.isOverlappedBy(Range.of(16, 21)));
331
332
333 assertTrue(range1.isOverlappedBy(Range.of(10, 19)));
334 assertTrue(range1.isOverlappedBy(Range.of(10, 21)));
335
336
337 assertTrue(range1.isOverlappedBy(Range.of(11, 20)));
338 assertTrue(range1.isOverlappedBy(Range.of(9, 20)));
339
340
341 assertFalse(range1.isOverlappedBy(Range.of(-11, -18)));
342
343
344 assertTrue(range1.isOverlappedBy(Range.of(9, 21)));
345 }
346
347 @Test
348 public void testIsStartedBy() {
349 assertFalse(range1.isStartedBy(null));
350
351 assertFalse(range1.isStartedBy(5));
352 assertTrue(range1.isStartedBy(10));
353 assertFalse(range1.isStartedBy(15));
354 assertFalse(range1.isStartedBy(20));
355 assertFalse(range1.isStartedBy(25));
356 }
357
358 @Test
359 public void testIsWithCompareRange() {
360
361 final Comparator<Integer> c = (o1, o2) -> 0;
362 Range<Integer> ri = Range.is(10);
363 assertFalse(ri.contains(null), "should not contain null");
364 assertTrue(ri.contains(10), "should contain 10");
365 assertFalse(ri.contains(11), "should not contain 11");
366 ri = Range.is(10, c);
367 assertFalse(ri.contains(null), "should not contain null");
368 assertTrue(ri.contains(10), "should contain 10");
369 assertTrue(ri.contains(11), "should contain 11");
370 }
371
372 @Test
373 public void testOfWithContains() {
374
375 final IntegerRange rb = of(-10, 20);
376 assertFalse(rb.contains(null), "should not contain null");
377 assertTrue(rb.contains(10), "should contain 10");
378 assertTrue(rb.contains(-10), "should contain -10");
379 assertFalse(rb.contains(21), "should not contain 21");
380 assertFalse(rb.contains(-11), "should not contain -11");
381
382 assertThrows(NullPointerException.class, () -> of(null, null));
383 }
384
385 @Test
386 public void testRangeOfChars() {
387 final IntegerRange chars = of('a', 'z');
388 assertTrue(chars.contains((int) 'b'));
389 assertFalse(chars.contains((int) 'B'));
390 }
391
392 @Test
393 public void testSerializing() {
394 SerializationUtils.clone(range1);
395 }
396
397 @Test
398 public void testToString() {
399 assertNotNull(range1.toString());
400
401 final String str = range1.toString();
402 assertEquals("[10..20]", str);
403 assertEquals("[-20..-10]", Range.of(-20, -10).toString());
404 }
405
406 @Test
407 public void testToStringFormat() {
408 final String str = range1.toString("From %1$s to %2$s");
409 assertEquals("From 10 to 20", str);
410 }
411 }