Skip to content

Commit 85ce8e0

Browse files
author
BaierD
committed
Add tests for quantifier visitation/variable extraction in SolverVisitorTest with more than one bound variable
1 parent 57d7e4a commit 85ce8e0

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

src/org/sosy_lab/java_smt/test/SolverVisitorTest.java

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,4 +1610,91 @@ public void testSl() throws SolverException, InterruptedException {
16101610
assertThat(f2).isEqualTo(f);
16111611
assertThatFormula(f).isEquivalentTo(f2);
16121612
}
1613+
1614+
@Test
1615+
public void testQuantifierAndBoundVariablesWithIntegers() {
1616+
requireQuantifiers();
1617+
requireArrays();
1618+
requireIntegers();
1619+
requireVisitor();
1620+
1621+
IntegerFormula four = imgr.makeNumber(4);
1622+
IntegerFormula var1 = imgr.makeVariable("var1");
1623+
IntegerFormula var2 = imgr.makeVariable("var2");
1624+
IntegerFormula var3 = imgr.makeVariable("var3");
1625+
1626+
ArrayFormula<IntegerFormula, IntegerFormula> array1 =
1627+
amgr.makeArray("array1", FormulaType.IntegerType, FormulaType.IntegerType);
1628+
ArrayFormula<IntegerFormula, IntegerFormula> array2 =
1629+
amgr.makeArray("array2", FormulaType.IntegerType, FormulaType.IntegerType);
1630+
1631+
IntegerFormula bvIndex = imgr.add(var2, imgr.multiply(four, var1));
1632+
BooleanFormula body = amgr.equivalence(array2, amgr.store(array1, bvIndex, var3));
1633+
1634+
List<? extends Formula> freeVars = ImmutableList.of(var2, var3, array2);
1635+
List<? extends Formula> boundVars = ImmutableList.of(var1, array1);
1636+
List<? extends Formula> allVars = ImmutableList.of(var1, var2, var3, array1, array2);
1637+
Map<String, Formula> variablesInBody = mgr.extractVariables(body);
1638+
assertThat(variablesInBody.values()).containsExactlyElementsIn(allVars);
1639+
1640+
for (Quantifier quantifier : Quantifier.values()) {
1641+
BooleanFormula quantifiedFormula = qmgr.mkQuantifier(quantifier, boundVars, body);
1642+
1643+
Map<String, Formula> variablesInQuantifiedFormula = mgr.extractVariables(quantifiedFormula);
1644+
Map<String, Formula> variablesAndUFsInQuantifiedFormula =
1645+
mgr.extractVariablesAndUFs(quantifiedFormula);
1646+
1647+
assertThat(variablesAndUFsInQuantifiedFormula).isEqualTo(variablesInQuantifiedFormula);
1648+
assertThat(variablesInQuantifiedFormula.values()).containsExactlyElementsIn(freeVars);
1649+
assertThat(variablesInQuantifiedFormula.values()).containsNoneIn(boundVars);
1650+
1651+
// TODO: add collection of bound variables through new visitor implementation and test
1652+
// failure of the old
1653+
}
1654+
}
1655+
1656+
@Test
1657+
public void testQuantifierAndBoundVariablesWithBitvectors() {
1658+
requireQuantifiers();
1659+
requireArrays();
1660+
requireBitvectors();
1661+
requireVisitor();
1662+
1663+
int bvLen = 32;
1664+
BitvectorType bvType = FormulaType.BitvectorType.getBitvectorTypeWithSize(bvLen);
1665+
1666+
BitvectorFormula four = bvmgr.makeBitvector(bvLen, 4);
1667+
BitvectorFormula var1 = bvmgr.makeVariable(bvType, "var1");
1668+
BitvectorFormula var2 = bvmgr.makeVariable(bvType, "var2");
1669+
BitvectorFormula var3 = bvmgr.makeVariable(bvType, "var3");
1670+
1671+
ArrayFormula<BitvectorFormula, BitvectorFormula> array1 =
1672+
amgr.makeArray("array1", bvType, bvType);
1673+
ArrayFormula<BitvectorFormula, BitvectorFormula> array2 =
1674+
amgr.makeArray("array2", bvType, bvType);
1675+
1676+
BitvectorFormula bvIndex = bvmgr.add(var2, bvmgr.multiply(four, var1));
1677+
BooleanFormula body = amgr.equivalence(array2, amgr.store(array1, bvIndex, var3));
1678+
1679+
List<? extends Formula> freeVars = ImmutableList.of(var2, var3, array2);
1680+
List<? extends Formula> boundVars = ImmutableList.of(var1, array1);
1681+
List<? extends Formula> allVars = ImmutableList.of(var1, var2, var3, array1, array2);
1682+
Map<String, Formula> variablesInBody = mgr.extractVariables(body);
1683+
assertThat(variablesInBody.values()).containsExactlyElementsIn(allVars);
1684+
1685+
for (Quantifier quantifier : Quantifier.values()) {
1686+
BooleanFormula quantifiedFormula = qmgr.mkQuantifier(quantifier, boundVars, body);
1687+
1688+
Map<String, Formula> variablesInQuantifiedFormula = mgr.extractVariables(quantifiedFormula);
1689+
Map<String, Formula> variablesAndUFsInQuantifiedFormula =
1690+
mgr.extractVariablesAndUFs(quantifiedFormula);
1691+
1692+
assertThat(variablesAndUFsInQuantifiedFormula).isEqualTo(variablesInQuantifiedFormula);
1693+
assertThat(variablesInQuantifiedFormula.values()).containsExactlyElementsIn(freeVars);
1694+
assertThat(variablesInQuantifiedFormula.values()).containsNoneIn(boundVars);
1695+
1696+
// TODO: add collection of bound variables through new visitor implementation and test
1697+
// failure of the old
1698+
}
1699+
}
16131700
}

0 commit comments

Comments
 (0)