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