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}