use of kodkod.instance.TupleSet in project org.alloytools.alloy by AlloyTools.
the class BugTests method testFelix_02222008.
public final void testFelix_02222008() {
List<String> atomlist = Arrays.asList("X1", "X2", "X3");
Universe universe = new Universe(atomlist);
TupleFactory factory = universe.factory();
Bounds bounds = new Bounds(universe);
Relation x = Relation.unary("X");
TupleSet x_upper = factory.noneOf(1);
x_upper.add(factory.tuple("X1"));
x_upper.add(factory.tuple("X2"));
x_upper.add(factory.tuple("X3"));
bounds.bound(x, x_upper);
Variable a = Variable.unary("a");
Variable b = Variable.unary("b");
Variable c = Variable.unary("c");
Formula goal = x.lone().not().and(b.union(c).eq(a).forSome(c.oneOf(x)).forAll(b.oneOf(x)).forSome(a.setOf(x)));
Solver solver = new Solver();
solver.options().setSolver(SATFactory.DefaultSAT4J);
solver.options().setBitwidth(4);
solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT);
solver.options().setSymmetryBreaking(0);
solver.options().setSkolemDepth(2);
Iterator<Solution> itr = solver.solveAll(goal, bounds);
int sols = 0;
while (itr.hasNext()) {
Solution sol = itr.next();
Instance inst = sol.instance();
if (inst == null)
break;
sols++;
for (Relation rel : inst.relations()) {
if (rel != x) {
if (rel.arity() == 1) {
// rel = a
assertEquals(inst.tuples(x), inst.tuples(rel));
} else {
// rel = c
final TupleSet dom = factory.noneOf(1);
for (Tuple t : inst.tuples(rel)) {
dom.add(factory.tuple(t.atom(0)));
}
assertEquals(inst.tuples(x), dom);
}
}
}
}
assertEquals(3, sols);
}
use of kodkod.instance.TupleSet in project org.alloytools.alloy by AlloyTools.
the class BugTests method testGreg_01052006.
public final void testGreg_01052006() {
// final TreeSequence<Integer> t = new TreeSequence<Integer>();
// final int[] elts = {107, 31, 86, 72, 6, 119, 23, 131};
// for(int i = 0; i < elts.length; i++) {
// t.put(elts[i], 0);
// }
// final int[] sorted = new int[elts.length];
// System.arraycopy(elts, 0, sorted, 0, elts.length);
// Arrays.sort(sorted);
// int count = 0;
// for(IndexedEntry<Integer> e : t) {
// assertEquals(sorted[count++], e.index());
// }
// t.remove(72);
// t.put(72,0);
// count = 0;
// for(IndexedEntry<Integer> e : t) {
// assertEquals(sorted[count++], e.index());
// }
final List<Object> atoms = new ArrayList<Object>(12);
atoms.add(2);
atoms.add(4);
atoms.add(-2);
atoms.add("null");
atoms.add("array0");
atoms.add(6);
atoms.add(1);
atoms.add(-1);
atoms.add(-3);
atoms.add(3);
atoms.add(5);
atoms.add(0);
final Universe u = new Universe(atoms);
final TupleFactory f = u.factory();
final TupleSet tdiv = f.noneOf(3);
for (int i = -3; i <= 6; i++) {
for (int j = -3; j <= 6; j++) {
if (j != 0) {
int divij = i / j;
if (-3 <= divij && divij <= 6)
tdiv.add(f.tuple(i, j, divij));
else
tdiv.add(f.tuple(i, j, (10 + divij) % 10));
}
}
}
final TupleSet tdivcopy = tdiv.clone();
for (int i = -3; i <= 6; i++) {
for (int j = -3; j <= 6; j++) {
if (j != 0) {
int divij = i / j;
if (-3 <= divij && divij <= 6)
assertTrue(tdivcopy.contains(f.tuple(i, j, divij)));
else
assertTrue(tdivcopy.contains(f.tuple(i, j, (10 + divij) % 10)));
}
}
}
}
use of kodkod.instance.TupleSet in project org.alloytools.alloy by AlloyTools.
the class BugTests method testFelix_05152007_1.
public final void testFelix_05152007_1() {
Relation x5 = Relation.nary("A", 1);
List<String> atomlist = Arrays.asList("A0", "A1", "A2");
Universe universe = new Universe(atomlist);
TupleFactory factory = universe.factory();
Bounds bounds = new Bounds(universe);
TupleSet x5_upper = factory.noneOf(1);
x5_upper.add(factory.tuple("A2"));
x5_upper.add(factory.tuple("A1"));
x5_upper.add(factory.tuple("A0"));
bounds.bound(x5, x5_upper);
Formula x7 = x5.some();
Formula x8 = x5.no();
Formula x6 = x7.and(x8);
Solver solver = new Solver();
solver.options().setLogTranslation(1);
solver.options().setSolver(SATFactory.MiniSatProver);
solver.options().setBitwidth(4);
solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT);
Solution sol = solver.solve(x6, bounds);
// System.out.println("Sol="+sol);
Set<Formula> core = Nodes.minRoots(x6, sol.proof().highLevelCore().values());
assertEquals(2, core.size());
assertTrue(core.contains(x7));
assertTrue(core.contains(x8));
}
use of kodkod.instance.TupleSet in project org.alloytools.alloy by AlloyTools.
the class BugTests method testEmina_01232006.
public final void testEmina_01232006() {
final List<String> atoms = new ArrayList<String>(5);
for (int i = 0; i < 5; i++) atoms.add("a" + i);
final Universe u = new Universe(atoms);
final TupleFactory tf = u.factory();
final Relation r1 = Relation.unary("r1"), r2 = Relation.binary("r2"), r3 = Relation.ternary("r3");
final Bounds b = new Bounds(u);
final TupleSet r2Bound = tf.noneOf(2);
for (int i = 0; i < 4; i++) r2Bound.add(tf.tuple(atoms.get(i), atoms.get(i)));
r2Bound.add(tf.tuple("a4", "a1"));
r2Bound.add(tf.tuple("a4", "a2"));
b.bound(r2, r2Bound);
b.bound(r1, tf.setOf("a0", "a3"), tf.setOf("a0", "a3", "a4"));
b.bound(r3, tf.setOf(tf.tuple("a0", "a0", "a0"), tf.tuple("a3", "a3", "a3")));
final Formula f = r1.product(r2).in(r3);
final Instance instance = solver.solve(f, b).instance();
assertTrue((new Evaluator(instance)).evaluate(f));
// System.out.println(instance);
// System.out.println((new Evaluator(instance)).evaluate(f ));
}
use of kodkod.instance.TupleSet in project org.alloytools.alloy by AlloyTools.
the class BugTests method testFelix_01032007.
public final void testFelix_01032007() {
List<String> atomlist = Arrays.asList("-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "0", "1", "2", "3", "4", "5", "6", "7");
Universe universe = new Universe(atomlist);
TupleFactory factory = universe.factory();
Bounds bounds = new Bounds(universe);
bounds.boundExactly(-8, factory.range(factory.tuple("-8"), factory.tuple("-8")));
bounds.boundExactly(-7, factory.range(factory.tuple("-7"), factory.tuple("-7")));
bounds.boundExactly(-6, factory.range(factory.tuple("-6"), factory.tuple("-6")));
bounds.boundExactly(-5, factory.range(factory.tuple("-5"), factory.tuple("-5")));
bounds.boundExactly(-4, factory.range(factory.tuple("-4"), factory.tuple("-4")));
bounds.boundExactly(-3, factory.range(factory.tuple("-3"), factory.tuple("-3")));
bounds.boundExactly(-2, factory.range(factory.tuple("-2"), factory.tuple("-2")));
bounds.boundExactly(-1, factory.range(factory.tuple("-1"), factory.tuple("-1")));
bounds.boundExactly(0, factory.range(factory.tuple("0"), factory.tuple("0")));
bounds.boundExactly(1, factory.range(factory.tuple("1"), factory.tuple("1")));
bounds.boundExactly(2, factory.range(factory.tuple("2"), factory.tuple("2")));
bounds.boundExactly(3, factory.range(factory.tuple("3"), factory.tuple("3")));
bounds.boundExactly(4, factory.range(factory.tuple("4"), factory.tuple("4")));
bounds.boundExactly(5, factory.range(factory.tuple("5"), factory.tuple("5")));
bounds.boundExactly(6, factory.range(factory.tuple("6"), factory.tuple("6")));
bounds.boundExactly(7, factory.range(factory.tuple("7"), factory.tuple("7")));
Expression set = IntConstant.constant(8).toExpression();
Solver solver = new Solver();
solver.options().setSolver(SATFactory.DefaultSAT4J);
solver.options().setBitwidth(4);
solver.options().setIntEncoding(Options.IntEncoding.TWOSCOMPLEMENT);
Solution sol = solver.solve(set.some(), bounds);
assertNotNull("expected SATISFIABLE but was " + sol.outcome(), sol.instance());
Evaluator eval = new Evaluator(sol.instance(), solver.options());
TupleSet ts = eval.evaluate(set);
assertFalse(ts.size() == 0);
}
Aggregations