001package daikon.test.inv.unary.scalar;
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.scalar.OneOfScalar;
016import daikon.test.Common;
017import junit.framework.*;
018import org.checkerframework.checker.nullness.qual.NonNull;
019import org.junit.BeforeClass;
020import org.junit.Test;
021
022@SuppressWarnings("nullness") // testing code
023public class OneOfScalarTester {
024
025  private VarInfo[] vars = {Common.makeHashcodeVarInfo("x"), Common.newIntVarInfo("y")};
026  private PptTopLevel ppt = Common.makePptTopLevel("Foo.Baa(int):::ENTER", vars);
027  private PptSlice slicex = new PptSlice1(ppt, new VarInfo[] {vars[0]});
028  // private PptSlice slicey = new PptSlice1(ppt, new VarInfo[] {vars[1]});
029
030  private static final int DOESNT_MATTER = 0;
031
032  /** prepare for tests */
033  @BeforeClass
034  public static void setUpClass() {
035    daikon.LogHelper.setupLogs(INFO);
036    FileIO.new_decl_format = true;
037  }
038
039  @SuppressWarnings("interning")
040  public static VarInfo newIntVarInfo(String name) {
041    VarInfo result =
042        new VarInfo(
043            name,
044            ProglangType.INT,
045            ProglangType.INT,
046            VarComparabilityNone.it,
047            VarInfoAux.getDefault());
048    return result;
049  }
050
051  @SuppressWarnings("interning")
052  public static VarInfo newHashcodeVarInfo(String name) {
053    VarInfo result =
054        new VarInfo(
055            name,
056            ProglangType.HASHCODE,
057            ProglangType.HASHCODE,
058            VarComparabilityNone.it,
059            VarInfoAux.getDefault());
060    return result;
061  }
062
063  @Test
064  public void testNullNon() {
065    @NonNull OneOfScalar inv1 = (OneOfScalar) OneOfScalar.get_proto().instantiate(slicex);
066    @NonNull OneOfScalar inv2 = (OneOfScalar) OneOfScalar.get_proto().instantiate(slicex);
067
068    inv1.add_modified(19, DOESNT_MATTER);
069    inv2.add_modified(0, DOESNT_MATTER);
070
071    assertFalse(inv1.isSameFormula(inv2));
072  }
073
074  @Test
075  public void testNullNull() {
076    @NonNull OneOfScalar inv1 = (OneOfScalar) OneOfScalar.get_proto().instantiate(slicex);
077    @NonNull OneOfScalar inv2 = (OneOfScalar) OneOfScalar.get_proto().instantiate(slicex);
078
079    inv1.add_modified(0, DOESNT_MATTER);
080    inv2.add_modified(0, DOESNT_MATTER);
081
082    assertTrue(inv1.isSameFormula(inv2));
083  }
084
085  @Test
086  public void testNonNon() {
087    @NonNull OneOfScalar inv1 = (OneOfScalar) OneOfScalar.get_proto().instantiate(slicex);
088    @NonNull OneOfScalar inv2 = (OneOfScalar) OneOfScalar.get_proto().instantiate(slicex);
089
090    inv1.add_modified(19, DOESNT_MATTER);
091    inv2.add_modified(22, DOESNT_MATTER);
092
093    assertTrue(inv1.isSameFormula(inv2));
094  }
095
096  /* NEED TO DEFINE SEMANTICS WITH MIKE E
097  @Test
098  public void testNullNonHashcodeInt() {
099    OneOfScalar inv1 = OneOfScalar.get_proto().instantiate(slicex);
100    OneOfScalar inv2 = OneOfScalar.get_proto().instantiate(slicey);
101
102    inv1.add_modified(0, DOESNT_MATTER);
103    inv2.add_modified(22, DOESNT_MATTER);
104
105    assertFalse( inv1.isSameFormula(inv2));
106  }
107
108  @Test
109  public void testNullNullHashcodeInt() {
110    OneOfScalar inv1 = OneOfScalar.get_proto().instantiate(slicex);
111    OneOfScalar inv2 = OneOfScalar.get_proto().instantiate(slicey);
112
113    inv1.add_modified(0, DOESNT_MATTER);
114    inv2.add_modified(0, DOESNT_MATTER);
115
116    assertTrue(inv1.isSameFormula(inv2));
117  }
118
119  @Test
120  public void testNonNonHashcodeInt() {
121    OneOfScalar inv1 = OneOfScalar.get_proto().instantiate(slicex);
122    OneOfScalar inv2 = OneOfScalar.get_proto().instantiate(slicey);
123
124    inv1.add_modified(19, DOESNT_MATTER);
125    inv2.add_modified(22, DOESNT_MATTER);
126
127    assertTrue(inv1.isSameFormula(inv2));
128  }
129  */
130}