diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..c995aa5cefc --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.debug.settings.onBuildFailureProceed": true +} \ No newline at end of file diff --git a/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java b/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java index d187ee5c47e..4b22582a495 100644 --- a/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java +++ b/src/test/java/org/apache/commons/lang3/builder/CompareToBuilderTest.java @@ -19,1155 +19,284 @@ 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 java.util.Objects; - import org.apache.commons.lang3.AbstractLangTest; import org.junit.jupiter.api.Test; /** * Tests {@link CompareToBuilder}. */ -public class CompareToBuilderTest extends AbstractLangTest { - - static class TestObject implements Comparable { - private int a; - TestObject(final int a) { - this.a = a; - } - @Override - public int compareTo(final TestObject rhs) { - return Integer.compare(a, rhs.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; - } - public int getA() { - return a; + public class CompareToBuilderTest extends AbstractLangTest { + //Test object with multiple fields for Bottom-up integration test + public class BottomUpTestObj implements Comparable{ + private int[] var1; + private char var2; + private boolean var3; + + public BottomUpTestObj(int[] var1, char var2, boolean var3){ + this.var1 = var1; + this.var2 = var2; + this.var3 = var3; } - + @Override - public int hashCode() { - return a; - } - public void setA(final int a) { - this.a = a; + public int compareTo(BottomUpTestObj obj2){ + return new CompareToBuilder() + .append(this.var1, obj2.var1) + .append(this.var2, obj2.var2) + .append(this.var3, obj2.var3) + .toComparison(); } } - static class TestSubObject extends TestObject { - private int b; - - TestSubObject() { - super(0); - } - - TestSubObject(final int a, final int b) { - super(a); - this.b = b; + //Test object with multiple fields for Top-Down Integration test + public class TopDownTestObj implements Comparable{ + private double[] var1; + private byte[] var2; + + public TopDownTestObj(double[] var1, byte[] var2){ + this.var1 = var1; + this.var2 = var2; } - - @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; - } - + @Override - public int hashCode() { - return Objects.hash(getA(), 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; - } - } - - /** - * 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)); + public int compareTo(TopDownTestObj obj2){ + return new CompareToBuilder() + .append(this.var1, obj2.var1) + .append(this.var2, obj2.var2) + .toComparison(); } - - // strongly recommended but not strictly required - assertTrue(CompareToBuilder.reflectionCompare(x, y, testTransients) == 0 == EqualsBuilder.reflectionEquals(x, y, testTransients)); } + +//Testing object comparisons using Bottom-Up Integration testing + + //Tests for the append method that compares ints + @Test + public void appendIntTest(){ + //Basic Comparison + assertTrue(new CompareToBuilder().append(0, 1000).toComparison() < 0); + assertTrue(new CompareToBuilder().append(1000, 0).toComparison() > 0); + + //Equality + assertTrue(new CompareToBuilder().append(50, 50).toComparison() == 0); + } + + //Tests for the append method that compares chars + @Test + public void appendCharTest(){ + //Basic comparison + assertTrue(new CompareToBuilder().append('a', 'z').toComparison() < 0); + assertTrue(new CompareToBuilder().append('z', 'a').toComparison() > 0); - 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)); + //Case differences + assertTrue(new CompareToBuilder().append('a', 'A').toComparison() > 0); + assertTrue(new CompareToBuilder().append('A', 'Z').toComparison() < 0); + assertTrue(new CompareToBuilder().append('Z', 'A').toComparison() > 0); - 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)); + //Equality + assertEquals(0, new CompareToBuilder().append('G', 'G').toComparison()); + assertEquals(0, new CompareToBuilder().append('%', '%').toComparison()); } - - /** - * 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(); - } - + + //Tests for the append method that compares booleans @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); + public void appendBoolTest(){ + boolean a = false; + boolean b = true; + + //Different Boolean Value + assertTrue(new CompareToBuilder().append(a, b).toComparison() < 0); + assertTrue(new CompareToBuilder().append(b, a).toComparison() > 0); + + //Self Equality + assertEquals(0, new CompareToBuilder().append(a, a).toComparison()); + assertEquals(0, new CompareToBuilder().append(b, b).toComparison()); + } + + //Tests for the append method that compares integer arrays + @Test + public void appendIntArrayTest(){ + int[] a = {1}; + int[] b = {10}; + int[] c = {1, 2, 3, 4, 5, 6, 7, 8, 9}; + int[] d = {9, 8, 7, 6, 5, 4, 3, 2, 1}; + int[] e = {2, 3, 4, 5, 6, 7, 8, 8, 10}; + + //Self Equality + assertEquals(0, new CompareToBuilder().append(a, a).toComparison()); + assertEquals(0, new CompareToBuilder().append(c, c).toComparison()); + + //Null handling + assertTrue(new CompareToBuilder().append(null, a).toComparison() < 0); + assertTrue(new CompareToBuilder().append(a, null).toComparison() > 0); + + //Single Element comparison + assertTrue(new CompareToBuilder().append(a, b).toComparison() < 0); + assertTrue(new CompareToBuilder().append(b, a).toComparison() > 0); + + //Array Length Difference + assertTrue(new CompareToBuilder().append(a, c).toComparison() < 0); + assertTrue(new CompareToBuilder().append(c, a).toComparison() > 0); + + //Multi Element Comparison + assertTrue(new CompareToBuilder().append(c, d).toComparison() < 0); + assertTrue(new CompareToBuilder().append(d, c).toComparison() > 0); + assertTrue(new CompareToBuilder().append(c, e).toComparison() < 0); + assertTrue(new CompareToBuilder().append(e, c).toComparison() > 0); } + //Tests for the append method that compares objects @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); - } + public void appendObjectTest(){ + int[] a1 = {1}; + int[] a2 = {1, 1}; - @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; + BottomUpTestObj a = new BottomUpTestObj(a1, 'a', false); + BottomUpTestObj b = new BottomUpTestObj(a2, 'a', false); + BottomUpTestObj c = new BottomUpTestObj(a1, 'z', false); + BottomUpTestObj d = new BottomUpTestObj(a1, 'a', true); + BottomUpTestObj e = new BottomUpTestObj(a2, 'z', 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); + //Self Equality + assertEquals(0, new CompareToBuilder().append(a, a).toComparison()); + assertEquals(0, new CompareToBuilder().append(b, b).toComparison()); + + //Nulls + assertTrue(new CompareToBuilder().append(null, a).toComparison() < 0); + assertTrue(new CompareToBuilder().append(a, null).toComparison() > 0); - obj1[1] = true; - assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0); - assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0); + //Only Int Array Differs + assertTrue(new CompareToBuilder().append(a, b).toComparison() < 0); + assertTrue(new CompareToBuilder().append(b, a).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); - } + //Only Char Differs + assertTrue(new CompareToBuilder().append(a, c).toComparison() < 0); + assertTrue(new CompareToBuilder().append(c, a).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); + //Only Bool Differs + assertTrue(new CompareToBuilder().append(a, d).toComparison() < 0); + assertTrue(new CompareToBuilder().append(d, a).toComparison() > 0); - array1[1] = true; - assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0); - assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0); + //Everything Differs + assertTrue(new CompareToBuilder().append(a, e).toComparison() < 0); + assertTrue(new CompareToBuilder().append(e, a).toComparison() > 0); } +//End of Bottom-Up Integration Testing - @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); - } +//Testing Reflection Comparison using Top-Down Integration testing + //Tests for Reflection Compare to compare objects @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; + public void reflectionCompareTest(){ + double[] d1 = {1.1}; + double[] d2 = {1.1, 1.1}; - 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); + byte[] b1 = {1}; + byte[] b2 = {1, 1}; - obj1[1] = 7; - assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0); - assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0); + TopDownTestObj obj1 = new TopDownTestObj(d1, b1); + TopDownTestObj obj2 = new TopDownTestObj(d1, b2); + TopDownTestObj obj3 = new TopDownTestObj(d2, b1); + TopDownTestObj obj4 = new TopDownTestObj(d2, b2); + + //Equality + assertEquals(0, CompareToBuilder.reflectionCompare(obj1, obj1)); + assertEquals(0, CompareToBuilder.reflectionCompare(obj4, obj4)); + + //Nulls + assertThrows(NullPointerException.class, () -> CompareToBuilder.reflectionCompare(obj1, null)); + assertThrows(NullPointerException.class, () -> CompareToBuilder.reflectionCompare(null, obj1)); + + //Comparisons + assertTrue(CompareToBuilder.reflectionCompare(obj1, obj2) < 0); + assertTrue(CompareToBuilder.reflectionCompare(obj2, obj1) > 0); + assertTrue(CompareToBuilder.reflectionCompare(obj1, obj3) < 0); + assertTrue(CompareToBuilder.reflectionCompare(obj3, obj1) > 0); + assertTrue(CompareToBuilder.reflectionCompare(obj1, obj4) < 0); + assertTrue(CompareToBuilder.reflectionCompare(obj4, obj1) > 0); + } + + //Tests for append method that compares double arrays + @Test + public void appendDoubleArrayTest(){ + double[] a = {1.1}; + double[] b = {1.1, 1.1}; - 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); - } + //Equals + assertEquals(0, new CompareToBuilder().append(a, a).toComparison()); + assertEquals(0, new CompareToBuilder().append(b, b).toComparison()); - @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); + //Null Handling + assertTrue(new CompareToBuilder().append(a, null).toComparison() > 0); + assertTrue(new CompareToBuilder().append(null, a).toComparison() < 0); - array1[1] = 7; - assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0); - assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0); + //Comparisons + assertTrue(new CompareToBuilder().append(a, b).toComparison() < 0); + assertTrue(new CompareToBuilder().append(b, a).toComparison() > 0); } + //Tests for append method that compares byte arrays @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); - } + public void appendByteArrayTest(){ + byte[] a = {1}; + byte[] b = {1, 1}; - @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; + //Equals + assertEquals(0, new CompareToBuilder().append(a, a).toComparison()); + assertEquals(0, new CompareToBuilder().append(b, b).toComparison()); - 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); + //Null Handling + assertTrue(new CompareToBuilder().append(a, null).toComparison() > 0); + assertTrue(new CompareToBuilder().append(null, a).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); + //Comparisons + assertTrue(new CompareToBuilder().append(a, b).toComparison() < 0); + assertTrue(new CompareToBuilder().append(b, a).toComparison() > 0); } + //Tests for append method that compares doubles @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); - } + public void appendDoubleTest(){ + //Equals + assertEquals(0, new CompareToBuilder().append(1.0, 1.0).toComparison()); + assertEquals(0, new CompareToBuilder().append(3.14159, 3.14159).toComparison()); + assertEquals(0, new CompareToBuilder().append(0.0, 0.0).toComparison()); - @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); + //Positive vs Negative Comparison assertTrue(new CompareToBuilder().append(0.0, -0.0).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 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 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 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); + assertTrue(new CompareToBuilder().append(1.0, -1.0).toComparison() > 0); + assertTrue(new CompareToBuilder().append(-1.0, 1.0).toComparison() < 0); - obj1[1] = 7; - assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0); - assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0); + //Regular Comparisons + assertTrue(new CompareToBuilder().append(1.0, 5.0).toComparison() < 0); + assertTrue(new CompareToBuilder().append(5.0, 1.0).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); + assertTrue(new CompareToBuilder().append(3.0, 3.14159).toComparison() < 0); + assertTrue(new CompareToBuilder().append(3.14159, 3.0).toComparison() > 0); } + //Tests for append method that compares bytes @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); + public void appendByteTest(){ + byte a = 0; + byte b = 127; + byte c = -128; - array1[1] = 7; - assertTrue(new CompareToBuilder().append(obj1, obj2).toComparison() > 0); - assertTrue(new CompareToBuilder().append(obj2, obj1).toComparison() < 0); - } + //Equals + assertEquals(0, new CompareToBuilder().append(b, b).toComparison()); + assertEquals(0, new CompareToBuilder().append(c, c).toComparison()); - @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 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; + //Comparisons + assertTrue(new CompareToBuilder().append(a, b).toComparison() < 0); + assertTrue(new CompareToBuilder().append(b, a).toComparison() > 0); - 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); + assertTrue(new CompareToBuilder().append(a, c).toComparison() > 0); + assertTrue(new CompareToBuilder().append(c, a).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); + assertTrue(new CompareToBuilder().append(c, b).toComparison() < 0); + assertTrue(new CompareToBuilder().append(b, c).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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 testObjectEx2() { - final TestObject o1 = new TestObject(4); - final Object o2 = new Object(); - assertThrows(ClassCastException.class, () -> new CompareToBuilder().append(o1, o2)); - } - - @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 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); - } - - 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); - } - - @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); - } - - @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 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 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); - } - - } +//End of Top-Down Integration Testing +}