aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java')
-rw-r--r--src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java1166
1 files changed, 1166 insertions, 0 deletions
diff --git a/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java b/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java
new file mode 100644
index 000000000..e2cc1b45c
--- /dev/null
+++ b/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java
@@ -0,0 +1,1166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.lang3.builder;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.math.BigInteger;
+
+import org.apache.commons.lang3.AbstractLangTest;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Unit tests {@link org.apache.commons.lang3.builder.CompareToBuilder}.
+ */
+public class CompareToBuilderTest extends AbstractLangTest {
+
+
+ static class TestObject implements Comparable<TestObject> {
+ private int a;
+ TestObject(final int a) {
+ this.a = a;
+ }
+ @Override
+ public boolean equals(final Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (!(o instanceof TestObject)) {
+ return false;
+ }
+ final TestObject rhs = (TestObject) o;
+ return a == rhs.a;
+ }
+
+ @Override
+ public int hashCode() {
+ return a;
+ }
+
+ public void setA(final int a) {
+ this.a = a;
+ }
+
+ public int getA() {
+ return a;
+ }
+ @Override
+ public int compareTo(final TestObject rhs) {
+ return Integer.compare(a, rhs.a);
+ }
+ }
+
+ static class TestSubObject extends TestObject {
+ private int b;
+ TestSubObject() {
+ super(0);
+ }
+ TestSubObject(final int a, final int b) {
+ super(a);
+ this.b = b;
+ }
+ @Override
+ public boolean equals(final Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (!(o instanceof TestSubObject)) {
+ return false;
+ }
+ final TestSubObject rhs = (TestSubObject) o;
+ return super.equals(o) && b == rhs.b;
+ }
+ }
+
+ static class TestTransientSubObject extends TestObject {
+ @SuppressWarnings("unused")
+ private final transient int t;
+ TestTransientSubObject(final int a, final int t) {
+ super(a);
+ this.t = t;
+ }
+ }
+
+ @Test
+ public void testReflectionCompare() {
+ final TestObject o1 = new TestObject(4);
+ final TestObject o2 = new TestObject(4);
+ assertEquals(0, CompareToBuilder.reflectionCompare(o1, o1));
+ assertEquals(0, CompareToBuilder.reflectionCompare(o1, o2));
+ o2.setA(5);
+ assertTrue(CompareToBuilder.reflectionCompare(o1, o2) < 0);
+ assertTrue(CompareToBuilder.reflectionCompare(o2, o1) > 0);
+ }
+
+ @Test
+ public void testReflectionCompareEx1() {
+ final TestObject o1 = new TestObject(4);
+ assertThrows(NullPointerException.class, () -> CompareToBuilder.reflectionCompare(o1, null));
+ }
+
+ @Test
+ public void testReflectionCompareEx2() {
+ final TestObject o1 = new TestObject(4);
+ final Object o2 = new Object();
+ assertThrows(ClassCastException.class, () -> CompareToBuilder.reflectionCompare(o1, o2));
+ }
+
+ @Test
+ public void testReflectionHierarchyCompare() {
+ testReflectionHierarchyCompare(false, null);
+ }
+
+ @Test
+ public void testReflectionHierarchyCompareExcludeFields() {
+ final String[] excludeFields = { "b" };
+ testReflectionHierarchyCompare(true, excludeFields);
+
+ TestSubObject x;
+ TestSubObject y;
+ TestSubObject z;
+
+ x = new TestSubObject(1, 1);
+ y = new TestSubObject(2, 1);
+ z = new TestSubObject(3, 1);
+ assertXYZCompareOrder(x, y, z, true, excludeFields);
+
+ x = new TestSubObject(1, 3);
+ y = new TestSubObject(2, 2);
+ z = new TestSubObject(3, 1);
+ assertXYZCompareOrder(x, y, z, true, excludeFields);
+ }
+
+ @Test
+ public void testReflectionHierarchyCompareTransients() {
+ testReflectionHierarchyCompare(true, null);
+
+ TestTransientSubObject x;
+ TestTransientSubObject y;
+ TestTransientSubObject z;
+
+ x = new TestTransientSubObject(1, 1);
+ y = new TestTransientSubObject(2, 2);
+ z = new TestTransientSubObject(3, 3);
+ assertXYZCompareOrder(x, y, z, true, null);
+
+ x = new TestTransientSubObject(1, 1);
+ y = new TestTransientSubObject(1, 2);
+ z = new TestTransientSubObject(1, 3);
+ assertXYZCompareOrder(x, y, z, true, null);
+ }
+
+ private void assertXYZCompareOrder(final Object x, final Object y, final Object z, final boolean testTransients, final String[] excludeFields) {
+ assertEquals(0, CompareToBuilder.reflectionCompare(x, x, testTransients, null, excludeFields));
+ assertEquals(0, CompareToBuilder.reflectionCompare(y, y, testTransients, null, excludeFields));
+ assertEquals(0, CompareToBuilder.reflectionCompare(z, z, testTransients, null, excludeFields));
+
+ assertTrue(0 > CompareToBuilder.reflectionCompare(x, y, testTransients, null, excludeFields));
+ assertTrue(0 > CompareToBuilder.reflectionCompare(x, z, testTransients, null, excludeFields));
+ assertTrue(0 > CompareToBuilder.reflectionCompare(y, z, testTransients, null, excludeFields));
+
+ assertTrue(0 < CompareToBuilder.reflectionCompare(y, x, testTransients, null, excludeFields));
+ assertTrue(0 < CompareToBuilder.reflectionCompare(z, x, testTransients, null, excludeFields));
+ assertTrue(0 < CompareToBuilder.reflectionCompare(z, y, testTransients, null, excludeFields));
+ }
+
+ private void testReflectionHierarchyCompare(final boolean testTransients, final String[] excludeFields) {
+ final TestObject to1 = new TestObject(1);
+ final TestObject to2 = new TestObject(2);
+ final TestObject to3 = new TestObject(3);
+ final TestSubObject tso1 = new TestSubObject(1, 1);
+ final TestSubObject tso2 = new TestSubObject(2, 2);
+ final TestSubObject tso3 = new TestSubObject(3, 3);
+
+ assertReflectionCompareContract(to1, to1, to1, false, excludeFields);
+ assertReflectionCompareContract(to1, to2, to3, false, excludeFields);
+ assertReflectionCompareContract(tso1, tso1, tso1, false, excludeFields);
+ assertReflectionCompareContract(tso1, tso2, tso3, false, excludeFields);
+ assertReflectionCompareContract("1", "2", "3", false, excludeFields);
+
+ assertTrue(0 != CompareToBuilder.reflectionCompare(tso1, new TestSubObject(1, 0), testTransients));
+ assertTrue(0 != CompareToBuilder.reflectionCompare(tso1, new TestSubObject(0, 1), testTransients));
+
+ // root class
+ assertXYZCompareOrder(to1, to2, to3, true, null);
+ // subclass
+ assertXYZCompareOrder(tso1, tso2, tso3, true, null);
+ }
+
+ /**
+ * See "Effective Java" under "Consider Implementing Comparable".
+ *
+ * @param x an object to compare
+ * @param y an object to compare
+ * @param z an object to compare
+ * @param testTransients Whether to include transients in the comparison
+ * @param excludeFields fields to exclude
+ */
+ private void assertReflectionCompareContract(final Object x, final Object y, final Object z, final boolean testTransients, final String[] excludeFields) {
+
+ // signum
+ assertEquals(reflectionCompareSignum(x, y, testTransients, excludeFields), -reflectionCompareSignum(y, x, testTransients, excludeFields));
+
+ // transitive
+ if (CompareToBuilder.reflectionCompare(x, y, testTransients, null, excludeFields) > 0
+ && CompareToBuilder.reflectionCompare(y, z, testTransients, null, excludeFields) > 0) {
+ assertTrue(CompareToBuilder.reflectionCompare(x, z, testTransients, null, excludeFields) > 0);
+ }
+
+ // un-named
+ if (CompareToBuilder.reflectionCompare(x, y, testTransients, null, excludeFields) == 0) {
+ assertEquals(reflectionCompareSignum(x, z, testTransients, excludeFields), -reflectionCompareSignum(y, z, testTransients, excludeFields));
+ }
+
+ // strongly recommended but not strictly required
+ assertTrue(CompareToBuilder.reflectionCompare(x, y, testTransients) ==0 == EqualsBuilder.reflectionEquals(x, y, testTransients));
+ }
+
+ /**
+ * Returns the signum of the result of comparing x and y with
+ * {@code CompareToBuilder.reflectionCompare}
+ *
+ * @param lhs The "left-hand-side" of the comparison.
+ * @param rhs The "right-hand-side" of the comparison.
+ * @param testTransients Whether to include transients in the comparison
+ * @param excludeFields fields to exclude
+ * @return int The signum
+ */
+ private int reflectionCompareSignum(final Object lhs, final Object rhs, final boolean testTransients, final String[] excludeFields) {
+ return BigInteger.valueOf(CompareToBuilder.reflectionCompare(lhs, rhs, testTransients)).signum();
+ }
+
+ @Test
+ public void testAppendSuper() {
+ final TestObject o1 = new TestObject(4);
+ final TestObject o2 = new TestObject(5);
+ assertEquals(0, new CompareToBuilder().appendSuper(0).append(o1, o1).toComparison());
+ assertTrue(new CompareToBuilder().appendSuper(0).append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().appendSuper(0).append(o2, o1).toComparison() > 0);
+
+ assertTrue(new CompareToBuilder().appendSuper(-1).append(o1, o1).toComparison() < 0);
+ assertTrue(new CompareToBuilder().appendSuper(-1).append(o1, o2).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().appendSuper(1).append(o1, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().appendSuper(1).append(o1, o2).toComparison() > 0);
+ }
+
+ @Test
+ public void testObject() {
+ final TestObject o1 = new TestObject(4);
+ final TestObject o2 = new TestObject(4);
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(o1, o2).toComparison());
+ o2.setA(5);
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
+
+ assertTrue(new CompareToBuilder().append(o1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((Object) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, o1).toComparison() < 0);
+ }
+
+ @Test
+ public void testObjectBuild() {
+ final TestObject o1 = new TestObject(4);
+ final TestObject o2 = new TestObject(4);
+ assertEquals(Integer.valueOf(0), new CompareToBuilder().append(o1, o1).build());
+ assertEquals(Integer.valueOf(0), new CompareToBuilder().append(o1, o2).build());
+ o2.setA(5);
+ assertTrue(new CompareToBuilder().append(o1, o2).build().intValue() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).build().intValue() > 0);
+
+ assertTrue(new CompareToBuilder().append(o1, null).build().intValue() > 0);
+ assertEquals(Integer.valueOf(0), new CompareToBuilder().append((Object) null, null).build());
+ assertTrue(new CompareToBuilder().append(null, o1).build().intValue() < 0);
+ }
+
+ @Test
+ public void testObjectEx2() {
+ final TestObject o1 = new TestObject(4);
+ final Object o2 = new Object();
+ assertThrows(ClassCastException.class, () -> new CompareToBuilder().append(o1, o2));
+ }
+
+ @Test
+ public void testObjectComparator() {
+ final String o1 = "Fred";
+ String o2 = "Fred";
+ assertEquals(0, new CompareToBuilder().append(o1, o1, String.CASE_INSENSITIVE_ORDER).toComparison());
+ assertEquals(0, new CompareToBuilder().append(o1, o2, String.CASE_INSENSITIVE_ORDER).toComparison());
+ o2 = "FRED";
+ assertEquals(0, new CompareToBuilder().append(o1, o2, String.CASE_INSENSITIVE_ORDER).toComparison());
+ assertEquals(0, new CompareToBuilder().append(o2, o1, String.CASE_INSENSITIVE_ORDER).toComparison());
+ o2 = "FREDA";
+ assertTrue(new CompareToBuilder().append(o1, o2, String.CASE_INSENSITIVE_ORDER).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1, String.CASE_INSENSITIVE_ORDER).toComparison() > 0);
+
+ assertTrue(new CompareToBuilder().append(o1, null, String.CASE_INSENSITIVE_ORDER).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append(null, null, String.CASE_INSENSITIVE_ORDER).toComparison());
+ assertTrue(new CompareToBuilder().append(null, o1, String.CASE_INSENSITIVE_ORDER).toComparison() < 0);
+ }
+
+ @Test
+ public void testObjectComparatorNull() {
+ final String o1 = "Fred";
+ String o2 = "Fred";
+ assertEquals(0, new CompareToBuilder().append(o1, o1, null).toComparison());
+ assertEquals(0, new CompareToBuilder().append(o1, o2, null).toComparison());
+ o2 = "Zebra";
+ assertTrue(new CompareToBuilder().append(o1, o2, null).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1, null).toComparison() > 0);
+
+ assertTrue(new CompareToBuilder().append(o1, null, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append(null, null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, o1, null).toComparison() < 0);
+ }
+
+ @Test
+ public void testLong() {
+ final long o1 = 1L;
+ final long o2 = 2L;
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Long.MAX_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Long.MAX_VALUE, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Long.MIN_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Long.MIN_VALUE, o1).toComparison() < 0);
+ }
+
+ @Test
+ public void testInt() {
+ final int o1 = 1;
+ final int o2 = 2;
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Integer.MAX_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Integer.MAX_VALUE, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Integer.MIN_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Integer.MIN_VALUE, o1).toComparison() < 0);
+ }
+
+ @Test
+ public void testShort() {
+ final short o1 = 1;
+ final short o2 = 2;
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Short.MAX_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Short.MAX_VALUE, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Short.MIN_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Short.MIN_VALUE, o1).toComparison() < 0);
+ }
+
+ @Test
+ public void testChar() {
+ final char o1 = 1;
+ final char o2 = 2;
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Character.MAX_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Character.MAX_VALUE, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Character.MIN_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Character.MIN_VALUE, o1).toComparison() < 0);
+ }
+
+ @Test
+ public void testByte() {
+ final byte o1 = 1;
+ final byte o2 = 2;
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Byte.MAX_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Byte.MAX_VALUE, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Byte.MIN_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Byte.MIN_VALUE, o1).toComparison() < 0);
+ }
+
+ @Test
+ public void testDouble() {
+ final double o1 = 1;
+ final double o2 = 2;
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Double.MAX_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Double.MAX_VALUE, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Double.MIN_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Double.MIN_VALUE, o1).toComparison() < 0);
+ assertEquals(0, new CompareToBuilder().append(Double.NaN, Double.NaN).toComparison());
+ assertTrue(new CompareToBuilder().append(Double.NaN, Double.MAX_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Double.POSITIVE_INFINITY, Double.MAX_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Double.NEGATIVE_INFINITY, Double.MIN_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o1, Double.NaN).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Double.NaN, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(-0.0, 0.0).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(0.0, -0.0).toComparison() > 0);
+ }
+
+ @Test
+ public void testFloat() {
+ final float o1 = 1;
+ final float o2 = 2;
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Float.MAX_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Float.MAX_VALUE, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o1, Float.MIN_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Float.MIN_VALUE, o1).toComparison() < 0);
+ assertEquals(0, new CompareToBuilder().append(Float.NaN, Float.NaN).toComparison());
+ assertTrue(new CompareToBuilder().append(Float.NaN, Float.MAX_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Float.POSITIVE_INFINITY, Float.MAX_VALUE).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(Float.NEGATIVE_INFINITY, Float.MIN_VALUE).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(o1, Float.NaN).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(Float.NaN, o1).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(-0.0, 0.0).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(0.0, -0.0).toComparison() > 0);
+ }
+
+ @Test
+ public void testBoolean() {
+ final boolean o1 = true;
+ final boolean o2 = false;
+ assertEquals(0, new CompareToBuilder().append(o1, o1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(o2, o2).toComparison());
+ assertTrue(new CompareToBuilder().append(o1, o2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(o2, o1).toComparison() < 0);
+ }
+
+ @Test
+ public void testObjectArray() {
+ final TestObject[] obj1 = new TestObject[2];
+ obj1[0] = new TestObject(4);
+ obj1[1] = new TestObject(5);
+ final TestObject[] obj2 = new TestObject[2];
+ obj2[0] = new TestObject(4);
+ obj2[1] = new TestObject(5);
+ final TestObject[] obj3 = new TestObject[3];
+ obj3[0] = new TestObject(4);
+ obj3[1] = new TestObject(5);
+ obj3[2] = new TestObject(6);
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = new TestObject(7);
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((Object[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testLongArray() {
+ final long[] obj1 = new long[2];
+ obj1[0] = 5L;
+ obj1[1] = 6L;
+ final long[] obj2 = new long[2];
+ obj2[0] = 5L;
+ obj2[1] = 6L;
+ final long[] obj3 = new long[3];
+ obj3[0] = 5L;
+ obj3[1] = 6L;
+ obj3[2] = 7L;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((long[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testIntArray() {
+ final int[] obj1 = new int[2];
+ obj1[0] = 5;
+ obj1[1] = 6;
+ final int[] obj2 = new int[2];
+ obj2[0] = 5;
+ obj2[1] = 6;
+ final int[] obj3 = new int[3];
+ obj3[0] = 5;
+ obj3[1] = 6;
+ obj3[2] = 7;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((int[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testShortArray() {
+ final short[] obj1 = new short[2];
+ obj1[0] = 5;
+ obj1[1] = 6;
+ final short[] obj2 = new short[2];
+ obj2[0] = 5;
+ obj2[1] = 6;
+ final short[] obj3 = new short[3];
+ obj3[0] = 5;
+ obj3[1] = 6;
+ obj3[2] = 7;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((short[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testCharArray() {
+ final char[] obj1 = new char[2];
+ obj1[0] = 5;
+ obj1[1] = 6;
+ final char[] obj2 = new char[2];
+ obj2[0] = 5;
+ obj2[1] = 6;
+ final char[] obj3 = new char[3];
+ obj3[0] = 5;
+ obj3[1] = 6;
+ obj3[2] = 7;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((char[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testByteArray() {
+ final byte[] obj1 = new byte[2];
+ obj1[0] = 5;
+ obj1[1] = 6;
+ final byte[] obj2 = new byte[2];
+ obj2[0] = 5;
+ obj2[1] = 6;
+ final byte[] obj3 = new byte[3];
+ obj3[0] = 5;
+ obj3[1] = 6;
+ obj3[2] = 7;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((byte[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testDoubleArray() {
+ final double[] obj1 = new double[2];
+ obj1[0] = 5;
+ obj1[1] = 6;
+ final double[] obj2 = new double[2];
+ obj2[0] = 5;
+ obj2[1] = 6;
+ final double[] obj3 = new double[3];
+ obj3[0] = 5;
+ obj3[1] = 6;
+ obj3[2] = 7;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((double[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testFloatArray() {
+ final float[] obj1 = new float[2];
+ obj1[0] = 5;
+ obj1[1] = 6;
+ final float[] obj2 = new float[2];
+ obj2[0] = 5;
+ obj2[1] = 6;
+ final float[] obj3 = new float[3];
+ obj3[0] = 5;
+ obj3[1] = 6;
+ obj3[2] = 7;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((float[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testBooleanArray() {
+ final boolean[] obj1 = new boolean[2];
+ obj1[0] = true;
+ obj1[1] = false;
+ final boolean[] obj2 = new boolean[2];
+ obj2[0] = true;
+ obj2[1] = false;
+ final boolean[] obj3 = new boolean[3];
+ obj3[0] = true;
+ obj3[1] = false;
+ obj3[2] = true;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ obj1[1] = true;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+
+ assertTrue(new CompareToBuilder().append(obj1, null).toComparison() > 0);
+ assertEquals(0, new CompareToBuilder().append((boolean[]) null, null).toComparison());
+ assertTrue(new CompareToBuilder().append(null, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMultiLongArray() {
+ final long[][] array1 = new long[2][2];
+ final long[][] array2 = new long[2][2];
+ final long[][] array3 = new long[2][3];
+ for (int i = 0; i < array1.length; ++i) {
+ for (int j = 0; j < array1[0].length; j++) {
+ array1[i][j] = (i + 1) * (j + 1);
+ array2[i][j] = (i + 1) * (j + 1);
+ array3[i][j] = (i + 1) * (j + 1);
+ }
+ }
+ array3[1][2] = 100;
+ array3[1][2] = 100;
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = 200;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMultiIntArray() {
+ final int[][] array1 = new int[2][2];
+ final int[][] array2 = new int[2][2];
+ final int[][] array3 = new int[2][3];
+ for (int i = 0; i < array1.length; ++i) {
+ for (int j = 0; j < array1[0].length; j++) {
+ array1[i][j] = (i + 1) * (j + 1);
+ array2[i][j] = (i + 1) * (j + 1);
+ array3[i][j] = (i + 1) * (j + 1);
+ }
+ }
+ array3[1][2] = 100;
+ array3[1][2] = 100;
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = 200;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMultiShortArray() {
+ final short[][] array1 = new short[2][2];
+ final short[][] array2 = new short[2][2];
+ final short[][] array3 = new short[2][3];
+ for (short i = 0; i < array1.length; ++i) {
+ for (short j = 0; j < array1[0].length; j++) {
+ array1[i][j] = (short) ((i + 1) * (j + 1));
+ array2[i][j] = (short) ((i + 1) * (j + 1));
+ array3[i][j] = (short) ((i + 1) * (j + 1));
+ }
+ }
+ array3[1][2] = 100;
+ array3[1][2] = 100;
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = 200;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMultiCharArray() {
+ final char[][] array1 = new char[2][2];
+ final char[][] array2 = new char[2][2];
+ final char[][] array3 = new char[2][3];
+ for (short i = 0; i < array1.length; ++i) {
+ for (short j = 0; j < array1[0].length; j++) {
+ array1[i][j] = (char) ((i + 1) * (j + 1));
+ array2[i][j] = (char) ((i + 1) * (j + 1));
+ array3[i][j] = (char) ((i + 1) * (j + 1));
+ }
+ }
+ array3[1][2] = 100;
+ array3[1][2] = 100;
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = 200;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMultiByteArray() {
+ final byte[][] array1 = new byte[2][2];
+ final byte[][] array2 = new byte[2][2];
+ final byte[][] array3 = new byte[2][3];
+ for (byte i = 0; i < array1.length; ++i) {
+ for (byte j = 0; j < array1[0].length; j++) {
+ array1[i][j] = (byte) ((i + 1) * (j + 1));
+ array2[i][j] = (byte) ((i + 1) * (j + 1));
+ array3[i][j] = (byte) ((i + 1) * (j + 1));
+ }
+ }
+ array3[1][2] = 100;
+ array3[1][2] = 100;
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = 127;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMultiFloatArray() {
+ final float[][] array1 = new float[2][2];
+ final float[][] array2 = new float[2][2];
+ final float[][] array3 = new float[2][3];
+ for (int i = 0; i < array1.length; ++i) {
+ for (int j = 0; j < array1[0].length; j++) {
+ array1[i][j] = (i + 1) * (j + 1);
+ array2[i][j] = (i + 1) * (j + 1);
+ array3[i][j] = (i + 1) * (j + 1);
+ }
+ }
+ array3[1][2] = 100;
+ array3[1][2] = 100;
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = 127;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMultiDoubleArray() {
+ final double[][] array1 = new double[2][2];
+ final double[][] array2 = new double[2][2];
+ final double[][] array3 = new double[2][3];
+ for (int i = 0; i < array1.length; ++i) {
+ for (int j = 0; j < array1[0].length; j++) {
+ array1[i][j] = (i + 1) * (j + 1);
+ array2[i][j] = (i + 1) * (j + 1);
+ array3[i][j] = (i + 1) * (j + 1);
+ }
+ }
+ array3[1][2] = 100;
+ array3[1][2] = 100;
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = 127;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMultiBooleanArray() {
+ final boolean[][] array1 = new boolean[2][2];
+ final boolean[][] array2 = new boolean[2][2];
+ final boolean[][] array3 = new boolean[2][3];
+ for (int i = 0; i < array1.length; ++i) {
+ for (int j = 0; j < array1[0].length; j++) {
+ array1[i][j] = i == 1 ^ j == 1;
+ array2[i][j] = i == 1 ^ j == 1;
+ array3[i][j] = i == 1 ^ j == 1;
+ }
+ }
+ array3[1][2] = false;
+ array3[1][2] = false;
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = true;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testRaggedArray() {
+ final long[][] array1 = new long[2][];
+ final long[][] array2 = new long[2][];
+ final long[][] array3 = new long[3][];
+ for (int i = 0; i < array1.length; ++i) {
+ array1[i] = new long[2];
+ array2[i] = new long[2];
+ array3[i] = new long[3];
+ for (int j = 0; j < array1[i].length; ++j) {
+ array1[i][j] = (i + 1) * (j + 1);
+ array2[i][j] = (i + 1) * (j + 1);
+ array3[i][j] = (i + 1) * (j + 1);
+ }
+ }
+ array3[1][2] = 100;
+ array3[1][2] = 100;
+
+
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ array1[1][1] = 200;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testMixedArray() {
+ final Object[] array1 = new Object[2];
+ final Object[] array2 = new Object[2];
+ final Object[] array3 = new Object[2];
+ for (int i = 0; i < array1.length; ++i) {
+ array1[i] = new long[2];
+ array2[i] = new long[2];
+ array3[i] = new long[3];
+ for (int j = 0; j < 2; ++j) {
+ ((long[]) array1[i])[j] = (i + 1) * (j + 1);
+ ((long[]) array2[i])[j] = (i + 1) * (j + 1);
+ ((long[]) array3[i])[j] = (i + 1) * (j + 1);
+ }
+ }
+ ((long[]) array3[0])[2] = 1;
+ ((long[]) array3[1])[2] = 1;
+ assertEquals(0, new CompareToBuilder().append(array1, array1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(array1, array2).toComparison());
+ assertTrue(new CompareToBuilder().append(array1, array3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(array3, array1).toComparison() > 0);
+ ((long[]) array1[1])[1] = 200;
+ assertTrue(new CompareToBuilder().append(array1, array2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(array2, array1).toComparison() < 0);
+ }
+
+ @Test
+ public void testObjectArrayHiddenByObject() {
+ final TestObject[] array1 = new TestObject[2];
+ array1[0] = new TestObject(4);
+ array1[1] = new TestObject(5);
+ final TestObject[] array2 = new TestObject[2];
+ array2[0] = new TestObject(4);
+ array2[1] = new TestObject(5);
+ final TestObject[] array3 = new TestObject[3];
+ array3[0] = new TestObject(4);
+ array3[1] = new TestObject(5);
+ array3[2] = new TestObject(6);
+
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = new TestObject(7);
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testLongArrayHiddenByObject() {
+ final long[] array1 = new long[2];
+ array1[0] = 5L;
+ array1[1] = 6L;
+ final long[] array2 = new long[2];
+ array2[0] = 5L;
+ array2[1] = 6L;
+ final long[] array3 = new long[3];
+ array3[0] = 5L;
+ array3[1] = 6L;
+ array3[2] = 7L;
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testIntArrayHiddenByObject() {
+ final int[] array1 = new int[2];
+ array1[0] = 5;
+ array1[1] = 6;
+ final int[] array2 = new int[2];
+ array2[0] = 5;
+ array2[1] = 6;
+ final int[] array3 = new int[3];
+ array3[0] = 5;
+ array3[1] = 6;
+ array3[2] = 7;
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testShortArrayHiddenByObject() {
+ final short[] array1 = new short[2];
+ array1[0] = 5;
+ array1[1] = 6;
+ final short[] array2 = new short[2];
+ array2[0] = 5;
+ array2[1] = 6;
+ final short[] array3 = new short[3];
+ array3[0] = 5;
+ array3[1] = 6;
+ array3[2] = 7;
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testCharArrayHiddenByObject() {
+ final char[] array1 = new char[2];
+ array1[0] = 5;
+ array1[1] = 6;
+ final char[] array2 = new char[2];
+ array2[0] = 5;
+ array2[1] = 6;
+ final char[] array3 = new char[3];
+ array3[0] = 5;
+ array3[1] = 6;
+ array3[2] = 7;
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testByteArrayHiddenByObject() {
+ final byte[] array1 = new byte[2];
+ array1[0] = 5;
+ array1[1] = 6;
+ final byte[] array2 = new byte[2];
+ array2[0] = 5;
+ array2[1] = 6;
+ final byte[] array3 = new byte[3];
+ array3[0] = 5;
+ array3[1] = 6;
+ array3[2] = 7;
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testDoubleArrayHiddenByObject() {
+ final double[] array1 = new double[2];
+ array1[0] = 5;
+ array1[1] = 6;
+ final double[] array2 = new double[2];
+ array2[0] = 5;
+ array2[1] = 6;
+ final double[] array3 = new double[3];
+ array3[0] = 5;
+ array3[1] = 6;
+ array3[2] = 7;
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testFloatArrayHiddenByObject() {
+ final float[] array1 = new float[2];
+ array1[0] = 5;
+ array1[1] = 6;
+ final float[] array2 = new float[2];
+ array2[0] = 5;
+ array2[1] = 6;
+ final float[] array3 = new float[3];
+ array3[0] = 5;
+ array3[1] = 6;
+ array3[2] = 7;
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = 7;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ @Test
+ public void testBooleanArrayHiddenByObject() {
+ final boolean[] array1 = new boolean[2];
+ array1[0] = true;
+ array1[1] = false;
+ final boolean[] array2 = new boolean[2];
+ array2[0] = true;
+ array2[1] = false;
+ final boolean[] array3 = new boolean[3];
+ array3[0] = true;
+ array3[1] = false;
+ array3[2] = true;
+ final Object obj1 = array1;
+ final Object obj2 = array2;
+ final Object obj3 = array3;
+ assertEquals(0, new CompareToBuilder().append(obj1, obj1).toComparison());
+ assertEquals(0, new CompareToBuilder().append(obj1, obj2).toComparison());
+ assertTrue(new CompareToBuilder().append(obj1, obj3).toComparison() < 0);
+ assertTrue(new CompareToBuilder().append(obj3, obj1).toComparison() > 0);
+
+ array1[1] = true;
+ assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0);
+ assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0);
+ }
+
+ }