001package daikon.test.diff;
002
003import static java.util.logging.Level.INFO;
004import static org.junit.Assert.assertEquals;
005import static org.junit.Assert.assertTrue;
006
007import daikon.*;
008import daikon.diff.*;
009import daikon.inv.*;
010import daikon.inv.unary.scalar.*;
011import daikon.test.*;
012import java.util.Comparator;
013import junit.framework.*;
014import org.junit.BeforeClass;
015import org.junit.Test;
016
017/** Daikon unit test class. */
018@SuppressWarnings("nullness") // testing code
019public class ConsequentCVFSortComparatorTester {
020
021  /** prepare for tests */
022  @BeforeClass
023  public static void setUpClass() {
024    daikon.LogHelper.setupLogs(INFO);
025    FileIO.new_decl_format = true;
026  }
027
028  @Test
029  public void testCompare() {
030    VarInfo[] vars = {
031      DiffTester.newIntVarInfo("a"),
032      DiffTester.newIntVarInfo("b"),
033      DiffTester.newIntVarInfo("c"),
034      DiffTester.newIntVarInfo("d"),
035    };
036    PptTopLevel P = Common.makePptTopLevel("P:::OBJECT", vars);
037    PptSlice slicea = new PptSlice1(P, new VarInfo[] {vars[0]});
038    PptSlice sliceb = new PptSlice1(P, new VarInfo[] {vars[1]});
039    PptSlice slicec = new PptSlice1(P, new VarInfo[] {vars[2]});
040    PptSlice sliced = new PptSlice1(P, new VarInfo[] {vars[3]});
041    Invariant A = NonZero.get_proto().instantiate(slicea);
042    Invariant B = NonZero.get_proto().instantiate(sliceb);
043    Invariant C = NonZero.get_proto().instantiate(slicec);
044    Invariant D = NonZero.get_proto().instantiate(sliced);
045    Invariant A_B = Implication.makeImplication(P, A, B, false, A, B);
046    Invariant A_C = Implication.makeImplication(P, A, C, false, A, C);
047    Invariant B_C = Implication.makeImplication(P, B, C, false, B, C);
048
049    Comparator<Invariant> c = new ConsequentCVFSortComparator();
050
051    assertEquals(0, c.compare(A, A));
052    assertTrue(c.compare(A, B) < 0);
053    assertTrue(c.compare(A, C) < 0);
054    assertTrue(c.compare(A, D) < 0);
055    assertTrue(c.compare(A, A_B) < 0);
056    assertTrue(c.compare(A, A_C) < 0);
057    assertTrue(c.compare(A, B_C) < 0);
058
059    assertEquals(0, c.compare(B, B));
060    assertTrue(c.compare(B, C) < 0);
061    assertTrue(c.compare(B, D) < 0);
062    assertEquals(0, c.compare(B, A_B));
063    assertTrue(c.compare(B, A_C) < 0);
064    assertTrue(c.compare(B, B_C) < 0);
065
066    assertEquals(0, c.compare(C, C));
067    assertTrue(c.compare(C, D) < 0);
068    assertTrue(c.compare(C, A_B) > 0);
069    assertEquals(0, c.compare(C, A_C));
070    assertEquals(0, c.compare(C, B_C));
071
072    assertEquals(0, c.compare(D, D));
073    assertTrue(c.compare(D, A_B) > 0);
074    assertTrue(c.compare(D, A_C) > 0);
075    assertTrue(c.compare(D, B_C) > 0);
076
077    assertEquals(0, c.compare(A_B, A_B));
078    assertTrue(c.compare(A_B, A_C) < 0);
079    assertTrue(c.compare(A_B, B_C) < 0);
080
081    assertEquals(0, c.compare(A_C, A_C));
082    assertTrue(c.compare(A_C, B_C) < 0);
083
084    assertEquals(0, c.compare(B_C, B_C));
085  }
086}