public static boolean equals(FlatRecordTraversalObjectNode left, FlatRecordTraversalObjectNode right) {
        if (left == null && right == null) {
            return true;
        }
        if (left == null || right == null) {
            return false;
        }
        if (!left.getSchema().getName().equals(right.getSchema().getName())) {
            return false;
        }
        extractCommonObjectSchema(left, right);

        return compare(left, right);
    }
@Test
    public void shouldProvideCollisionGuaranteesForIntegerCollisions_onObjects() {
        IntTypeState1 intTypeState1 = new IntTypeState1();
        intTypeState1.intA = 15;
        intTypeState1.intB = 5;

        writer1.reset();
        mapper1.writeFlat(intTypeState1, writer1);
        FlatRecord rec1 = writer1.generateFlatRecord();

        IntTypeState2 intTypeState2 = new IntTypeState2();
        intTypeState2.intA = 13;
        intTypeState2.intB = 7;
        writer2.reset();
        mapper2.writeFlat(intTypeState2, writer2);
        FlatRecord rec2 = writer2.generateFlatRecord();

        FlatRecordTraversalObjectNode leftNode = new FlatRecordTraversalObjectNode(rec1);
        FlatRecordTraversalObjectNode rightNode = new FlatRecordTraversalObjectNode(rec2);

        assertThat(FlatRecordTraversalObjectNodeEquality.equals(leftNode, rightNode)).isFalse();
        assertThat(FlatRecordTraversalObjectNodeEquality.equals(rightNode, leftNode)).isFalse();
    }