001package daikon.test.inv.unary.sequence;
002
003import static java.util.logging.Level.INFO;
004import static org.junit.Assert.assertFalse;
005import static org.junit.Assert.assertTrue;
006
007import daikon.FileIO;
008import daikon.PptSlice;
009import daikon.PptSlice1;
010import daikon.PptTopLevel;
011import daikon.ProglangType;
012import daikon.VarComparabilityNone;
013import daikon.VarInfo;
014import daikon.VarInfoAux;
015import daikon.inv.unary.sequence.OneOfSequence;
016import daikon.test.Common;
017import junit.framework.*;
018import org.checkerframework.checker.nullness.qual.NonNull;
019import org.junit.BeforeClass;
020import org.junit.Test;
021import org.plumelib.util.Intern;
022
023@SuppressWarnings("nullness") // testing code
024public class OneOfSequenceTester {
025
026  private VarInfo[] vars = {Common.makeHashcodeArrayVarInfo("x"), Common.makeIntArrayVarInfo("y")};
027  private PptTopLevel ppt = Common.makePptTopLevel("Foo.Baa(int):::ENTER", vars);
028  private PptSlice slicex = new PptSlice1(ppt, new VarInfo[] {vars[0]});
029  // private PptSlice slicey = new PptSlice1(ppt, new VarInfo[] {vars[1]});
030
031  private static final int DOESNT_MATTER = 0;
032
033  /** prepare for tests */
034  @BeforeClass
035  public static void setUpClass() {
036    daikon.LogHelper.setupLogs(INFO);
037    FileIO.new_decl_format = true;
038  }
039
040  @SuppressWarnings("interning")
041  public static VarInfo newIntArrayVarInfo(String name) {
042    VarInfo result =
043        new VarInfo(
044            name,
045            ProglangType.INT_ARRAY,
046            ProglangType.INT_ARRAY,
047            VarComparabilityNone.it,
048            VarInfoAux.getDefault());
049    return result;
050  }
051
052  @SuppressWarnings("interning")
053  public static VarInfo newHashcodeArrayVarInfo(String name) {
054    VarInfo result =
055        new VarInfo(
056            name,
057            ProglangType.HASHCODE_ARRAY,
058            ProglangType.HASHCODE_ARRAY,
059            VarComparabilityNone.it,
060            VarInfoAux.getDefault());
061    return result;
062  }
063
064  @Test
065  public void testNonNonNonNull() {
066    @NonNull OneOfSequence inv1 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
067    @NonNull OneOfSequence inv2 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
068
069    inv1.add_modified(Intern.intern(new long[] {19, 23}), DOESNT_MATTER);
070    inv2.add_modified(Intern.intern(new long[] {91, 0}), DOESNT_MATTER);
071
072    assertFalse(inv1.isSameFormula(inv2));
073  }
074
075  @Test
076  public void testNonNonNonNon() {
077    @NonNull OneOfSequence inv1 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
078    @NonNull OneOfSequence inv2 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
079
080    inv1.add_modified(Intern.intern(new long[] {19, 23}), DOESNT_MATTER);
081    inv2.add_modified(Intern.intern(new long[] {91, 32}), DOESNT_MATTER);
082
083    assertTrue(inv1.isSameFormula(inv2));
084  }
085
086  @Test
087  public void testNonNullNonNull() {
088    @NonNull OneOfSequence inv1 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
089    @NonNull OneOfSequence inv2 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
090
091    inv1.add_modified(Intern.intern(new long[] {19, 0}), DOESNT_MATTER);
092    inv2.add_modified(Intern.intern(new long[] {91, 0}), DOESNT_MATTER);
093
094    assertTrue(inv1.isSameFormula(inv2));
095  }
096
097  @Test
098  public void testNullNullNullNull() {
099    @NonNull OneOfSequence inv1 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
100    @NonNull OneOfSequence inv2 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
101
102    inv1.add_modified(Intern.intern(new long[] {0, 0}), DOESNT_MATTER);
103    inv2.add_modified(Intern.intern(new long[] {0, 0}), DOESNT_MATTER);
104
105    assertTrue(inv1.isSameFormula(inv2));
106  }
107
108  @Test
109  public void testDifferentLengths() {
110    @NonNull OneOfSequence inv1 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
111    @NonNull OneOfSequence inv2 = (OneOfSequence) OneOfSequence.get_proto().instantiate(slicex);
112
113    inv1.add_modified(Intern.intern(new long[] {0, 0, 0}), DOESNT_MATTER);
114    inv2.add_modified(Intern.intern(new long[] {0, 0}), DOESNT_MATTER);
115
116    assertFalse(inv1.isSameFormula(inv2));
117  }
118}