1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.lang3.builder;
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.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.math.BigInteger;
25 import java.util.Objects;
26
27 import org.apache.commons.lang3.AbstractLangTest;
28 import org.junit.jupiter.api.Test;
29
30
31
32
33 class CompareToBuilderTest extends AbstractLangTest {
34
35 static class TestObject implements Comparable<TestObject> {
36 private int a;
37 TestObject(final int a) {
38 this.a = a;
39 }
40 @Override
41 public int compareTo(final TestObject rhs) {
42 return Integer.compare(a, rhs.a);
43 }
44
45 @Override
46 public boolean equals(final Object o) {
47 if (o == this) {
48 return true;
49 }
50 if (!(o instanceof TestObject)) {
51 return false;
52 }
53 final TestObject rhs = (TestObject) o;
54 return a == rhs.a;
55 }
56
57 public int getA() {
58 return a;
59 }
60
61 @Override
62 public int hashCode() {
63 return a;
64 }
65 public void setA(final int a) {
66 this.a = a;
67 }
68 }
69
70 static class TestSubObject extends TestObject {
71 private int b;
72
73 TestSubObject() {
74 super(0);
75 }
76
77 TestSubObject(final int a, final int b) {
78 super(a);
79 this.b = b;
80 }
81
82 @Override
83 public boolean equals(final Object o) {
84 if (o == this) {
85 return true;
86 }
87 if (!(o instanceof TestSubObject)) {
88 return false;
89 }
90 final TestSubObject rhs = (TestSubObject) o;
91 return super.equals(o) && b == rhs.b;
92 }
93
94 @Override
95 public int hashCode() {
96 return Objects.hash(getA(), b);
97 }
98 }
99
100 static class TestTransientSubObject extends TestObject {
101 @SuppressWarnings("unused")
102 private final transient int t;
103 TestTransientSubObject(final int a, final int t) {
104 super(a);
105 this.t = t;
106 }
107 }
108
109
110
111
112
113
114
115
116
117
118 private void assertReflectionCompareContract(final Object x, final Object y, final Object z, final boolean testTransients, final String[] excludeFields) {
119
120
121 assertEquals(reflectionCompareSignum(x, y, testTransients, excludeFields), -reflectionCompareSignum(y, x, testTransients, excludeFields));
122
123
124 if (CompareToBuilder.reflectionCompare(x, y, testTransients, null, excludeFields) > 0
125 && CompareToBuilder.reflectionCompare(y, z, testTransients, null, excludeFields) > 0) {
126 assertTrue(CompareToBuilder.reflectionCompare(x, z, testTransients, null, excludeFields) > 0);
127 }
128
129
130 if (CompareToBuilder.reflectionCompare(x, y, testTransients, null, excludeFields) == 0) {
131 assertEquals(reflectionCompareSignum(x, z, testTransients, excludeFields), -reflectionCompareSignum(y, z, testTransients, excludeFields));
132 }
133
134
135 assertTrue(CompareToBuilder.reflectionCompare(x, y, testTransients) == 0 == EqualsBuilder.reflectionEquals(x, y, testTransients));
136 }
137
138 private void assertXYZCompareOrder(final Object x, final Object y, final Object z, final boolean testTransients, final String[] excludeFields) {
139 assertEquals(0, CompareToBuilder.reflectionCompare(x, x, testTransients, null, excludeFields));
140 assertEquals(0, CompareToBuilder.reflectionCompare(y, y, testTransients, null, excludeFields));
141 assertEquals(0, CompareToBuilder.reflectionCompare(z, z, testTransients, null, excludeFields));
142
143 assertTrue(0 > CompareToBuilder.reflectionCompare(x, y, testTransients, null, excludeFields));
144 assertTrue(0 > CompareToBuilder.reflectionCompare(x, z, testTransients, null, excludeFields));
145 assertTrue(0 > CompareToBuilder.reflectionCompare(y, z, testTransients, null, excludeFields));
146
147 assertTrue(0 < CompareToBuilder.reflectionCompare(y, x, testTransients, null, excludeFields));
148 assertTrue(0 < CompareToBuilder.reflectionCompare(z, x, testTransients, null, excludeFields));
149 assertTrue(0 < CompareToBuilder.reflectionCompare(z, y, testTransients, null, excludeFields));
150 }
151
152
153
154
155
156
157
158
159
160
161
162 private int reflectionCompareSignum(final Object lhs, final Object rhs, final boolean testTransients, final String[] excludeFields) {
163 return BigInteger.valueOf(CompareToBuilder.reflectionCompare(lhs, rhs, testTransients)).signum();
164 }
165
166 @Test
167 void testAppendSuper() {
168 final TestObject o1 = new TestObject(4);
169 final TestObject o2 = new TestObject(5);
170 assertEquals(0, new CompareToBuilder().appendSuper(0).append(o1, o1).toComparison());
171 assertTrue(new CompareToBuilder().appendSuper(0).append(o1, o2).toComparison() < 0);
172 assertTrue(new CompareToBuilder().appendSuper(0).append(o2, o1).toComparison() > 0);
173
174 assertTrue(new CompareToBuilder().appendSuper(-1).append(o1, o1).toComparison() < 0);
175 assertTrue(new CompareToBuilder().appendSuper(-1).append(o1, o2).toComparison() < 0);
176
177 assertTrue(new CompareToBuilder().appendSuper(1).append(o1, o1).toComparison() > 0);
178 assertTrue(new CompareToBuilder().appendSuper(1).append(o1, o2).toComparison() > 0);
179 }
180
181 @Test
182 void testBoolean() {
183 final boolean o1 = true;
184 final boolean o2 = false;
185 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
186 assertEquals(0, new CompareToBuilder().append(o2, o2).toComparison());
187 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() > 0);
188 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() < 0);
189 }
190
191 @Test
192 void testBooleanArray() {
193 final boolean[] obj1 = new boolean[2];
194 obj1[0] = true;
195 obj1[1] = false;
196 final boolean[] obj2 = new boolean[2];
197 obj2[0] = true;
198 obj2[1] = false;
199 final boolean[] obj3 = new boolean[3];
200 obj3[0] = true;
201 obj3[1] = false;
202 obj3[2] = true;
203
204 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
205 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
206 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
207 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
208
209 obj1[1] = true;
210 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
211 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
212
213 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
214 assertEquals(0, new CompareToBuilder().append((boolean[]) null, null).toComparison());
215 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
216 }
217
218 @Test
219 void testBooleanArrayHiddenByObject() {
220 final boolean[] array1 = new boolean[2];
221 array1[0] = true;
222 array1[1] = false;
223 final boolean[] array2 = new boolean[2];
224 array2[0] = true;
225 array2[1] = false;
226 final boolean[] array3 = new boolean[3];
227 array3[0] = true;
228 array3[1] = false;
229 array3[2] = true;
230 final Object obj1 = array1;
231 final Object obj2 = array2;
232 final Object obj3 = array3;
233 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
234 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
235 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
236 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
237
238 array1[1] = true;
239 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
240 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
241 }
242
243 @Test
244 void testByte() {
245 final byte o1 = 1;
246 final byte o2 = 2;
247 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
248 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
249 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
250 assertTrue(new CompareToBuilder().append(o1, Byte.MAX_VALUE).toComparison() < 0);
251 assertTrue(new CompareToBuilder().append(Byte.MAX_VALUE, o1).toComparison() > 0);
252 assertTrue(new CompareToBuilder().append(o1, Byte.MIN_VALUE).toComparison() > 0);
253 assertTrue(new CompareToBuilder().append(Byte.MIN_VALUE, o1).toComparison() < 0);
254 }
255
256 @Test
257 void testByteArray() {
258 final byte[] obj1 = new byte[2];
259 obj1[0] = 5;
260 obj1[1] = 6;
261 final byte[] obj2 = new byte[2];
262 obj2[0] = 5;
263 obj2[1] = 6;
264 final byte[] obj3 = new byte[3];
265 obj3[0] = 5;
266 obj3[1] = 6;
267 obj3[2] = 7;
268
269 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
270 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
271 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
272 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
273
274 obj1[1] = 7;
275 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
276 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
277
278 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
279 assertEquals(0, new CompareToBuilder().append((byte[]) null, null).toComparison());
280 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
281 }
282
283 @Test
284 void testByteArrayHiddenByObject() {
285 final byte[] array1 = new byte[2];
286 array1[0] = 5;
287 array1[1] = 6;
288 final byte[] array2 = new byte[2];
289 array2[0] = 5;
290 array2[1] = 6;
291 final byte[] array3 = new byte[3];
292 array3[0] = 5;
293 array3[1] = 6;
294 array3[2] = 7;
295 final Object obj1 = array1;
296 final Object obj2 = array2;
297 final Object obj3 = array3;
298 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
299 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
300 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
301 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
302
303 array1[1] = 7;
304 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
305 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
306 }
307
308 @Test
309 void testChar() {
310 final char o1 = 1;
311 final char o2 = 2;
312 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
313 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
314 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
315 assertTrue(new CompareToBuilder().append(o1, Character.MAX_VALUE).toComparison() < 0);
316 assertTrue(new CompareToBuilder().append(Character.MAX_VALUE, o1).toComparison() > 0);
317 assertTrue(new CompareToBuilder().append(o1, Character.MIN_VALUE).toComparison() > 0);
318 assertTrue(new CompareToBuilder().append(Character.MIN_VALUE, o1).toComparison() < 0);
319 }
320
321 @Test
322 void testCharArray() {
323 final char[] obj1 = new char[2];
324 obj1[0] = 5;
325 obj1[1] = 6;
326 final char[] obj2 = new char[2];
327 obj2[0] = 5;
328 obj2[1] = 6;
329 final char[] obj3 = new char[3];
330 obj3[0] = 5;
331 obj3[1] = 6;
332 obj3[2] = 7;
333
334 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
335 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
336 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
337 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
338
339 obj1[1] = 7;
340 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
341 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
342
343 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
344 assertEquals(0, new CompareToBuilder().append((char[]) null, null).toComparison());
345 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
346 }
347
348 @Test
349 void testCharArrayHiddenByObject() {
350 final char[] array1 = new char[2];
351 array1[0] = 5;
352 array1[1] = 6;
353 final char[] array2 = new char[2];
354 array2[0] = 5;
355 array2[1] = 6;
356 final char[] array3 = new char[3];
357 array3[0] = 5;
358 array3[1] = 6;
359 array3[2] = 7;
360 final Object obj1 = array1;
361 final Object obj2 = array2;
362 final Object obj3 = array3;
363 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
364 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
365 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
366 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
367
368 array1[1] = 7;
369 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
370 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
371 }
372
373 @Test
374 void testDouble() {
375 final double o1 = 1;
376 final double o2 = 2;
377 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
378 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
379 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
380 assertTrue(new CompareToBuilder().append(o1, Double.MAX_VALUE).toComparison() < 0);
381 assertTrue(new CompareToBuilder().append(Double.MAX_VALUE, o1).toComparison() > 0);
382 assertTrue(new CompareToBuilder().append(o1, Double.MIN_VALUE).toComparison() > 0);
383 assertTrue(new CompareToBuilder().append(Double.MIN_VALUE, o1).toComparison() < 0);
384 assertEquals(0, new CompareToBuilder().append(Double.NaN, Double.NaN).toComparison());
385 assertTrue(new CompareToBuilder().append(Double.NaN, Double.MAX_VALUE).toComparison() > 0);
386 assertTrue(new CompareToBuilder().append(Double.POSITIVE_INFINITY, Double.MAX_VALUE).toComparison() > 0);
387 assertTrue(new CompareToBuilder().append(Double.NEGATIVE_INFINITY, Double.MIN_VALUE).toComparison() < 0);
388 assertTrue(new CompareToBuilder().append(o1, Double.NaN).toComparison() < 0);
389 assertTrue(new CompareToBuilder().append(Double.NaN, o1).toComparison() > 0);
390 assertTrue(new CompareToBuilder().append(-0.0, 0.0).toComparison() < 0);
391 assertTrue(new CompareToBuilder().append(0.0, -0.0).toComparison() > 0);
392 }
393
394 @Test
395 void testDoubleArray() {
396 final double[] obj1 = new double[2];
397 obj1[0] = 5;
398 obj1[1] = 6;
399 final double[] obj2 = new double[2];
400 obj2[0] = 5;
401 obj2[1] = 6;
402 final double[] obj3 = new double[3];
403 obj3[0] = 5;
404 obj3[1] = 6;
405 obj3[2] = 7;
406
407 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
408 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
409 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
410 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
411
412 obj1[1] = 7;
413 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
414 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
415
416 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
417 assertEquals(0, new CompareToBuilder().append((double[]) null, null).toComparison());
418 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
419 }
420
421 @Test
422 void testDoubleArrayHiddenByObject() {
423 final double[] array1 = new double[2];
424 array1[0] = 5;
425 array1[1] = 6;
426 final double[] array2 = new double[2];
427 array2[0] = 5;
428 array2[1] = 6;
429 final double[] array3 = new double[3];
430 array3[0] = 5;
431 array3[1] = 6;
432 array3[2] = 7;
433 final Object obj1 = array1;
434 final Object obj2 = array2;
435 final Object obj3 = array3;
436 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
437 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
438 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
439 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
440
441 array1[1] = 7;
442 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
443 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
444 }
445
446 @Test
447 void testFloat() {
448 final float o1 = 1;
449 final float o2 = 2;
450 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
451 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
452 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
453 assertTrue(new CompareToBuilder().append(o1, Float.MAX_VALUE).toComparison() < 0);
454 assertTrue(new CompareToBuilder().append(Float.MAX_VALUE, o1).toComparison() > 0);
455 assertTrue(new CompareToBuilder().append(o1, Float.MIN_VALUE).toComparison() > 0);
456 assertTrue(new CompareToBuilder().append(Float.MIN_VALUE, o1).toComparison() < 0);
457 assertEquals(0, new CompareToBuilder().append(Float.NaN, Float.NaN).toComparison());
458 assertTrue(new CompareToBuilder().append(Float.NaN, Float.MAX_VALUE).toComparison() > 0);
459 assertTrue(new CompareToBuilder().append(Float.POSITIVE_INFINITY, Float.MAX_VALUE).toComparison() > 0);
460 assertTrue(new CompareToBuilder().append(Float.NEGATIVE_INFINITY, Float.MIN_VALUE).toComparison() < 0);
461 assertTrue(new CompareToBuilder().append(o1, Float.NaN).toComparison() < 0);
462 assertTrue(new CompareToBuilder().append(Float.NaN, o1).toComparison() > 0);
463 assertTrue(new CompareToBuilder().append(-0.0, 0.0).toComparison() < 0);
464 assertTrue(new CompareToBuilder().append(0.0, -0.0).toComparison() > 0);
465 }
466
467 @Test
468 void testFloatArray() {
469 final float[] obj1 = new float[2];
470 obj1[0] = 5;
471 obj1[1] = 6;
472 final float[] obj2 = new float[2];
473 obj2[0] = 5;
474 obj2[1] = 6;
475 final float[] obj3 = new float[3];
476 obj3[0] = 5;
477 obj3[1] = 6;
478 obj3[2] = 7;
479
480 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
481 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
482 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
483 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
484
485 obj1[1] = 7;
486 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
487 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
488
489 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
490 assertEquals(0, new CompareToBuilder().append((float[]) null, null).toComparison());
491 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
492 }
493
494 @Test
495 void testFloatArrayHiddenByObject() {
496 final float[] array1 = new float[2];
497 array1[0] = 5;
498 array1[1] = 6;
499 final float[] array2 = new float[2];
500 array2[0] = 5;
501 array2[1] = 6;
502 final float[] array3 = new float[3];
503 array3[0] = 5;
504 array3[1] = 6;
505 array3[2] = 7;
506 final Object obj1 = array1;
507 final Object obj2 = array2;
508 final Object obj3 = array3;
509 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
510 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
511 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
512 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
513
514 array1[1] = 7;
515 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
516 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
517 }
518
519 @Test
520 void testInt() {
521 final int o1 = 1;
522 final int o2 = 2;
523 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
524 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
525 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
526 assertTrue(new CompareToBuilder().append(o1, Integer.MAX_VALUE).toComparison() < 0);
527 assertTrue(new CompareToBuilder().append(Integer.MAX_VALUE, o1).toComparison() > 0);
528 assertTrue(new CompareToBuilder().append(o1, Integer.MIN_VALUE).toComparison() > 0);
529 assertTrue(new CompareToBuilder().append(Integer.MIN_VALUE, o1).toComparison() < 0);
530 }
531
532 @Test
533 void testIntArray() {
534 final int[] obj1 = new int[2];
535 obj1[0] = 5;
536 obj1[1] = 6;
537 final int[] obj2 = new int[2];
538 obj2[0] = 5;
539 obj2[1] = 6;
540 final int[] obj3 = new int[3];
541 obj3[0] = 5;
542 obj3[1] = 6;
543 obj3[2] = 7;
544
545 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
546 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
547 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
548 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
549
550 obj1[1] = 7;
551 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
552 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
553
554 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
555 assertEquals(0, new CompareToBuilder().append((int[]) null, null).toComparison());
556 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
557 }
558
559 @Test
560 void testIntArrayHiddenByObject() {
561 final int[] array1 = new int[2];
562 array1[0] = 5;
563 array1[1] = 6;
564 final int[] array2 = new int[2];
565 array2[0] = 5;
566 array2[1] = 6;
567 final int[] array3 = new int[3];
568 array3[0] = 5;
569 array3[1] = 6;
570 array3[2] = 7;
571 final Object obj1 = array1;
572 final Object obj2 = array2;
573 final Object obj3 = array3;
574 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
575 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
576 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
577 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
578
579 array1[1] = 7;
580 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
581 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
582 }
583
584 @Test
585 void testLong() {
586 final long o1 = 1L;
587 final long o2 = 2L;
588 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
589 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
590 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
591 assertTrue(new CompareToBuilder().append(o1, Long.MAX_VALUE).toComparison() < 0);
592 assertTrue(new CompareToBuilder().append(Long.MAX_VALUE, o1).toComparison() > 0);
593 assertTrue(new CompareToBuilder().append(o1, Long.MIN_VALUE).toComparison() > 0);
594 assertTrue(new CompareToBuilder().append(Long.MIN_VALUE, o1).toComparison() < 0);
595 }
596
597 @Test
598 void testLongArray() {
599 final long[] obj1 = new long[2];
600 obj1[0] = 5L;
601 obj1[1] = 6L;
602 final long[] obj2 = new long[2];
603 obj2[0] = 5L;
604 obj2[1] = 6L;
605 final long[] obj3 = new long[3];
606 obj3[0] = 5L;
607 obj3[1] = 6L;
608 obj3[2] = 7L;
609
610 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
611 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
612 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
613 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
614
615 obj1[1] = 7;
616 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
617 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
618
619 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
620 assertEquals(0, new CompareToBuilder().append((long[]) null, null).toComparison());
621 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
622 }
623
624 @Test
625 void testLongArrayHiddenByObject() {
626 final long[] array1 = new long[2];
627 array1[0] = 5L;
628 array1[1] = 6L;
629 final long[] array2 = new long[2];
630 array2[0] = 5L;
631 array2[1] = 6L;
632 final long[] array3 = new long[3];
633 array3[0] = 5L;
634 array3[1] = 6L;
635 array3[2] = 7L;
636 final Object obj1 = array1;
637 final Object obj2 = array2;
638 final Object obj3 = array3;
639 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
640 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
641 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
642 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
643
644 array1[1] = 7;
645 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
646 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
647 }
648
649 @Test
650 void testMixedArray() {
651 final Object[] array1 = new Object[2];
652 final Object[] array2 = new Object[2];
653 final Object[] array3 = new Object[2];
654 for (int i = 0; i < array1.length; ++i) {
655 array1[i] = new long[2];
656 array2[i] = new long[2];
657 array3[i] = new long[3];
658 for (int j = 0; j < 2; ++j) {
659 ((long[]) array1[i])[j] = (i + 1) * (j + 1);
660 ((long[]) array2[i])[j] = (i + 1) * (j + 1);
661 ((long[]) array3[i])[j] = (i + 1) * (j + 1);
662 }
663 }
664 ((long[]) array3[0])[2] = 1;
665 ((long[]) array3[1])[2] = 1;
666 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
667 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
668 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
669 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
670 ((long[]) array1[1])[1] = 200;
671 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
672 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
673 }
674
675 @Test
676 void testMultiBooleanArray() {
677 final boolean[][] array1 = new boolean[2][2];
678 final boolean[][] array2 = new boolean[2][2];
679 final boolean[][] array3 = new boolean[2][3];
680 for (int i = 0; i < array1.length; ++i) {
681 for (int j = 0; j < array1[0].length; j++) {
682 array1[i][j] = i == 1 ^ j == 1;
683 array2[i][j] = i == 1 ^ j == 1;
684 array3[i][j] = i == 1 ^ j == 1;
685 }
686 }
687 array3[1][2] = false;
688 array3[1][2] = false;
689
690 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
691 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
692 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
693 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
694 array1[1][1] = true;
695 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
696 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
697 }
698
699 @Test
700 void testMultiByteArray() {
701 final byte[][] array1 = new byte[2][2];
702 final byte[][] array2 = new byte[2][2];
703 final byte[][] array3 = new byte[2][3];
704 for (byte i = 0; i < array1.length; ++i) {
705 for (byte j = 0; j < array1[0].length; j++) {
706 array1[i][j] = (byte) ((i + 1) * (j + 1));
707 array2[i][j] = (byte) ((i + 1) * (j + 1));
708 array3[i][j] = (byte) ((i + 1) * (j + 1));
709 }
710 }
711 array3[1][2] = 100;
712 array3[1][2] = 100;
713
714 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
715 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
716 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
717 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
718 array1[1][1] = 127;
719 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
720 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
721 }
722
723 @Test
724 void testMultiCharArray() {
725 final char[][] array1 = new char[2][2];
726 final char[][] array2 = new char[2][2];
727 final char[][] array3 = new char[2][3];
728 for (short i = 0; i < array1.length; ++i) {
729 for (short j = 0; j < array1[0].length; j++) {
730 array1[i][j] = (char) ((i + 1) * (j + 1));
731 array2[i][j] = (char) ((i + 1) * (j + 1));
732 array3[i][j] = (char) ((i + 1) * (j + 1));
733 }
734 }
735 array3[1][2] = 100;
736 array3[1][2] = 100;
737
738 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
739 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
740 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
741 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
742 array1[1][1] = 200;
743 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
744 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
745 }
746
747 @Test
748 void testMultiDoubleArray() {
749 final double[][] array1 = new double[2][2];
750 final double[][] array2 = new double[2][2];
751 final double[][] array3 = new double[2][3];
752 for (int i = 0; i < array1.length; ++i) {
753 for (int j = 0; j < array1[0].length; j++) {
754 array1[i][j] = (i + 1) * (j + 1);
755 array2[i][j] = (i + 1) * (j + 1);
756 array3[i][j] = (i + 1) * (j + 1);
757 }
758 }
759 array3[1][2] = 100;
760 array3[1][2] = 100;
761
762 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
763 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
764 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
765 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
766 array1[1][1] = 127;
767 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
768 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
769 }
770
771 @Test
772 void testMultiFloatArray() {
773 final float[][] array1 = new float[2][2];
774 final float[][] array2 = new float[2][2];
775 final float[][] array3 = new float[2][3];
776 for (int i = 0; i < array1.length; ++i) {
777 for (int j = 0; j < array1[0].length; j++) {
778 array1[i][j] = (i + 1) * (j + 1);
779 array2[i][j] = (i + 1) * (j + 1);
780 array3[i][j] = (i + 1) * (j + 1);
781 }
782 }
783 array3[1][2] = 100;
784 array3[1][2] = 100;
785
786 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
787 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
788 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
789 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
790 array1[1][1] = 127;
791 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
792 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
793 }
794
795 @Test
796 void testMultiIntArray() {
797 final int[][] array1 = new int[2][2];
798 final int[][] array2 = new int[2][2];
799 final int[][] array3 = new int[2][3];
800 for (int i = 0; i < array1.length; ++i) {
801 for (int j = 0; j < array1[0].length; j++) {
802 array1[i][j] = (i + 1) * (j + 1);
803 array2[i][j] = (i + 1) * (j + 1);
804 array3[i][j] = (i + 1) * (j + 1);
805 }
806 }
807 array3[1][2] = 100;
808 array3[1][2] = 100;
809
810 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
811 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
812 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
813 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
814 array1[1][1] = 200;
815 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
816 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
817 }
818
819 @Test
820 void testMultiLongArray() {
821 final long[][] array1 = new long[2][2];
822 final long[][] array2 = new long[2][2];
823 final long[][] array3 = new long[2][3];
824 for (int i = 0; i < array1.length; ++i) {
825 for (int j = 0; j < array1[0].length; j++) {
826 array1[i][j] = (i + 1) * (j + 1);
827 array2[i][j] = (i + 1) * (j + 1);
828 array3[i][j] = (i + 1) * (j + 1);
829 }
830 }
831 array3[1][2] = 100;
832 array3[1][2] = 100;
833
834 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
835 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
836 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
837 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
838 array1[1][1] = 200;
839 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
840 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
841 }
842
843 @Test
844 void testMultiShortArray() {
845 final short[][] array1 = new short[2][2];
846 final short[][] array2 = new short[2][2];
847 final short[][] array3 = new short[2][3];
848 for (short i = 0; i < array1.length; ++i) {
849 for (short j = 0; j < array1[0].length; j++) {
850 array1[i][j] = (short) ((i + 1) * (j + 1));
851 array2[i][j] = (short) ((i + 1) * (j + 1));
852 array3[i][j] = (short) ((i + 1) * (j + 1));
853 }
854 }
855 array3[1][2] = 100;
856 array3[1][2] = 100;
857
858 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
859 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
860 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
861 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
862 array1[1][1] = 200;
863 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
864 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
865 }
866
867 @Test
868 void testObject() {
869 final TestObject o1 = new TestObject(4);
870 final TestObject o2 = new TestObject(4);
871 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
872 assertEquals(0, new CompareToBuilder().append(o1, o2).toComparison());
873 o2.setA(5);
874 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
875 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
876
877 assertTrue(new CompareToBuilder().append(o1, null).toComparison() > 0);
878 assertEquals(0, new CompareToBuilder().append((Object) null, null).toComparison());
879 assertTrue(new CompareToBuilder().append(null, o1).toComparison() < 0);
880 }
881
882 @Test
883 void testObjectArray() {
884 final TestObject[] obj1 = new TestObject[2];
885 obj1[0] = new TestObject(4);
886 obj1[1] = new TestObject(5);
887 final TestObject[] obj2 = new TestObject[2];
888 obj2[0] = new TestObject(4);
889 obj2[1] = new TestObject(5);
890 final TestObject[] obj3 = new TestObject[3];
891 obj3[0] = new TestObject(4);
892 obj3[1] = new TestObject(5);
893 obj3[2] = new TestObject(6);
894
895 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
896 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
897 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
898 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
899
900 obj1[1] = new TestObject(7);
901 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
902 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
903
904 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
905 assertEquals(0, new CompareToBuilder().append((Object[]) null, null).toComparison());
906 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
907 }
908
909 @Test
910 void testObjectArrayHiddenByObject() {
911 final TestObject[] array1 = new TestObject[2];
912 array1[0] = new TestObject(4);
913 array1[1] = new TestObject(5);
914 final TestObject[] array2 = new TestObject[2];
915 array2[0] = new TestObject(4);
916 array2[1] = new TestObject(5);
917 final TestObject[] array3 = new TestObject[3];
918 array3[0] = new TestObject(4);
919 array3[1] = new TestObject(5);
920 array3[2] = new TestObject(6);
921
922 final Object obj1 = array1;
923 final Object obj2 = array2;
924 final Object obj3 = array3;
925
926 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
927 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
928 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
929 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
930
931 array1[1] = new TestObject(7);
932 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
933 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
934 }
935
936 @Test
937 void testObjectBuild() {
938 final TestObject o1 = new TestObject(4);
939 final TestObject o2 = new TestObject(4);
940 assertEquals(Integer.valueOf(0), new CompareToBuilder().append(o1, o1).build());
941 assertEquals(Integer.valueOf(0), new CompareToBuilder().append(o1, o2).build());
942 o2.setA(5);
943 assertTrue(new CompareToBuilder().append(o1, o2).build().intValue() < 0);
944 assertTrue(new CompareToBuilder().append(o2, o1).build().intValue() > 0);
945
946 assertTrue(new CompareToBuilder().append(o1, null).build().intValue() > 0);
947 assertEquals(Integer.valueOf(0), new CompareToBuilder().append((Object) null, null).build());
948 assertTrue(new CompareToBuilder().append(null, o1).build().intValue() < 0);
949 }
950
951 @Test
952 void testObjectComparator() {
953 final String o1 = "Fred";
954 String o2 = "Fred";
955 assertEquals(0, new CompareToBuilder().append(o1, o1, String.CASE_INSENSITIVE_ORDER).toComparison());
956 assertEquals(0, new CompareToBuilder().append(o1, o2, String.CASE_INSENSITIVE_ORDER).toComparison());
957 o2 = "FRED";
958 assertEquals(0, new CompareToBuilder().append(o1, o2, String.CASE_INSENSITIVE_ORDER).toComparison());
959 assertEquals(0, new CompareToBuilder().append(o2, o1, String.CASE_INSENSITIVE_ORDER).toComparison());
960 o2 = "FREDA";
961 assertTrue(new CompareToBuilder().append(o1, o2, String.CASE_INSENSITIVE_ORDER).toComparison() < 0);
962 assertTrue(new CompareToBuilder().append(o2, o1, String.CASE_INSENSITIVE_ORDER).toComparison() > 0);
963
964 assertTrue(new CompareToBuilder().append(o1, null, String.CASE_INSENSITIVE_ORDER).toComparison() > 0);
965 assertEquals(0, new CompareToBuilder().append(null, null, String.CASE_INSENSITIVE_ORDER).toComparison());
966 assertTrue(new CompareToBuilder().append(null, o1, String.CASE_INSENSITIVE_ORDER).toComparison() < 0);
967 }
968
969 @Test
970 void testObjectComparatorNull() {
971 final String o1 = "Fred";
972 String o2 = "Fred";
973 assertEquals(0, new CompareToBuilder().append(o1, o1, null).toComparison());
974 assertEquals(0, new CompareToBuilder().append(o1, o2, null).toComparison());
975 o2 = "Zebra";
976 assertTrue(new CompareToBuilder().append(o1, o2, null).toComparison() < 0);
977 assertTrue(new CompareToBuilder().append(o2, o1, null).toComparison() > 0);
978
979 assertTrue(new CompareToBuilder().append(o1, null, null).toComparison() > 0);
980 assertEquals(0, new CompareToBuilder().append(null, null, null).toComparison());
981 assertTrue(new CompareToBuilder().append(null, o1, null).toComparison() < 0);
982 }
983
984 @Test
985 void testObjectEx2() {
986 final TestObject o1 = new TestObject(4);
987 final Object o2 = new Object();
988 assertThrows(ClassCastException.class, () -> new CompareToBuilder().append(o1, o2));
989 }
990
991 @Test
992 void testRaggedArray() {
993 final long[][] array1 = new long[2][];
994 final long[][] array2 = new long[2][];
995 final long[][] array3 = new long[3][];
996 for (int i = 0; i < array1.length; ++i) {
997 array1[i] = new long[2];
998 array2[i] = new long[2];
999 array3[i] = new long[3];
1000 for (int j = 0; j < array1[i].length; ++j) {
1001 array1[i][j] = (i + 1) * (j + 1);
1002 array2[i][j] = (i + 1) * (j + 1);
1003 array3[i][j] = (i + 1) * (j + 1);
1004 }
1005 }
1006 array3[1][2] = 100;
1007 array3[1][2] = 100;
1008
1009 assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
1010 assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
1011 assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
1012 assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
1013 array1[1][1] = 200;
1014 assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
1015 assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
1016 }
1017
1018 @Test
1019 void testReflectionCompare() {
1020 final TestObject o1 = new TestObject(4);
1021 final TestObject o2 = new TestObject(4);
1022 assertEquals(0, CompareToBuilder.reflectionCompare(o1, o1));
1023 assertEquals(0, CompareToBuilder.reflectionCompare(o1, o2));
1024 o2.setA(5);
1025 assertTrue(CompareToBuilder.reflectionCompare(o1, o2) < 0);
1026 assertTrue(CompareToBuilder.reflectionCompare(o2, o1) > 0);
1027 }
1028
1029 @Test
1030 void testReflectionCompareEx1() {
1031 final TestObject o1 = new TestObject(4);
1032 assertNullPointerException(() -> CompareToBuilder.reflectionCompare(o1, null));
1033 }
1034
1035 @Test
1036 void testReflectionCompareEx2() {
1037 final TestObject o1 = new TestObject(4);
1038 final Object o2 = new Object();
1039 assertThrows(ClassCastException.class, () -> CompareToBuilder.reflectionCompare(o1, o2));
1040 }
1041
1042 @Test
1043 void testReflectionHierarchyCompare() {
1044 testReflectionHierarchyCompare(false, null);
1045 }
1046
1047 private void testReflectionHierarchyCompare(final boolean testTransients, final String[] excludeFields) {
1048 final TestObject to1 = new TestObject(1);
1049 final TestObject to2 = new TestObject(2);
1050 final TestObject to3 = new TestObject(3);
1051 final TestSubObject tso1 = new TestSubObject(1, 1);
1052 final TestSubObject tso2 = new TestSubObject(2, 2);
1053 final TestSubObject tso3 = new TestSubObject(3, 3);
1054
1055 assertReflectionCompareContract(to1, to1, to1, false, excludeFields);
1056 assertReflectionCompareContract(to1, to2, to3, false, excludeFields);
1057 assertReflectionCompareContract(tso1, tso1, tso1, false, excludeFields);
1058 assertReflectionCompareContract(tso1, tso2, tso3, false, excludeFields);
1059 assertReflectionCompareContract("1", "2", "3", false, excludeFields);
1060
1061 assertTrue(0 != CompareToBuilder.reflectionCompare(tso1, new TestSubObject(1, 0), testTransients));
1062 assertTrue(0 != CompareToBuilder.reflectionCompare(tso1, new TestSubObject(0, 1), testTransients));
1063
1064
1065 assertXYZCompareOrder(to1, to2, to3, true, null);
1066
1067 assertXYZCompareOrder(tso1, tso2, tso3, true, null);
1068 }
1069
1070 @Test
1071 void testReflectionHierarchyCompareExcludeFields() {
1072 final String[] excludeFields = { "b" };
1073 testReflectionHierarchyCompare(true, excludeFields);
1074
1075 TestSubObject x;
1076 TestSubObject y;
1077 TestSubObject z;
1078
1079 x = new TestSubObject(1, 1);
1080 y = new TestSubObject(2, 1);
1081 z = new TestSubObject(3, 1);
1082 assertXYZCompareOrder(x, y, z, true, excludeFields);
1083
1084 x = new TestSubObject(1, 3);
1085 y = new TestSubObject(2, 2);
1086 z = new TestSubObject(3, 1);
1087 assertXYZCompareOrder(x, y, z, true, excludeFields);
1088 }
1089
1090 @Test
1091 void testReflectionHierarchyCompareTransients() {
1092 testReflectionHierarchyCompare(true, null);
1093
1094 TestTransientSubObject x;
1095 TestTransientSubObject y;
1096 TestTransientSubObject z;
1097
1098 x = new TestTransientSubObject(1, 1);
1099 y = new TestTransientSubObject(2, 2);
1100 z = new TestTransientSubObject(3, 3);
1101 assertXYZCompareOrder(x, y, z, true, null);
1102
1103 x = new TestTransientSubObject(1, 1);
1104 y = new TestTransientSubObject(1, 2);
1105 z = new TestTransientSubObject(1, 3);
1106 assertXYZCompareOrder(x, y, z, true, null);
1107 }
1108
1109 @Test
1110 void testShort() {
1111 final short o1 = 1;
1112 final short o2 = 2;
1113 assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
1114 assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
1115 assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
1116 assertTrue(new CompareToBuilder().append(o1, Short.MAX_VALUE).toComparison() < 0);
1117 assertTrue(new CompareToBuilder().append(Short.MAX_VALUE, o1).toComparison() > 0);
1118 assertTrue(new CompareToBuilder().append(o1, Short.MIN_VALUE).toComparison() > 0);
1119 assertTrue(new CompareToBuilder().append(Short.MIN_VALUE, o1).toComparison() < 0);
1120 }
1121
1122 @Test
1123 void testShortArray() {
1124 final short[] obj1 = new short[2];
1125 obj1[0] = 5;
1126 obj1[1] = 6;
1127 final short[] obj2 = new short[2];
1128 obj2[0] = 5;
1129 obj2[1] = 6;
1130 final short[] obj3 = new short[3];
1131 obj3[0] = 5;
1132 obj3[1] = 6;
1133 obj3[2] = 7;
1134
1135 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
1136 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
1137 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
1138 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
1139
1140 obj1[1] = 7;
1141 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
1142 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
1143
1144 assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
1145 assertEquals(0, new CompareToBuilder().append((short[]) null, null).toComparison());
1146 assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
1147 }
1148
1149 @Test
1150 void testShortArrayHiddenByObject() {
1151 final short[] array1 = new short[2];
1152 array1[0] = 5;
1153 array1[1] = 6;
1154 final short[] array2 = new short[2];
1155 array2[0] = 5;
1156 array2[1] = 6;
1157 final short[] array3 = new short[3];
1158 array3[0] = 5;
1159 array3[1] = 6;
1160 array3[2] = 7;
1161 final Object obj1 = array1;
1162 final Object obj2 = array2;
1163 final Object obj3 = array3;
1164 assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
1165 assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
1166 assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
1167 assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
1168
1169 array1[1] = 7;
1170 assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
1171 assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
1172 }
1173
1174 }