summaryrefslogtreecommitdiff
path: root/test/unit
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit')
-rw-r--r--test/unit/api/solver_black.h23
-rw-r--r--test/unit/api/sort_black.h11
-rw-r--r--test/unit/api/term_black.h27
3 files changed, 61 insertions, 0 deletions
diff --git a/test/unit/api/solver_black.h b/test/unit/api/solver_black.h
index ddff63352..4a7b74c8e 100644
--- a/test/unit/api/solver_black.h
+++ b/test/unit/api/solver_black.h
@@ -46,6 +46,7 @@ class SolverBlack : public CxxTest::TestSuite
void testMkPredicateSort();
void testMkRecordSort();
void testMkSetSort();
+ void testMkSequenceSort();
void testMkSortConstructorSort();
void testMkTupleSort();
void testMkUninterpretedSort();
@@ -56,6 +57,7 @@ class SolverBlack : public CxxTest::TestSuite
void testMkConst();
void testMkConstArray();
void testMkEmptySet();
+ void testMkEmptySequence();
void testMkFalse();
void testMkFloatingPoint();
void testMkNaN();
@@ -388,6 +390,17 @@ void SolverBlack::testMkSetSort()
CVC4ApiException&);
}
+void SolverBlack::testMkSequenceSort()
+{
+ TS_ASSERT_THROWS_NOTHING(
+ d_solver->mkSequenceSort(d_solver->getBooleanSort()));
+ TS_ASSERT_THROWS_NOTHING(d_solver->mkSequenceSort(
+ d_solver->mkSequenceSort(d_solver->getIntegerSort())));
+ Solver slv;
+ TS_ASSERT_THROWS(slv.mkSequenceSort(d_solver->getIntegerSort()),
+ CVC4ApiException&);
+}
+
void SolverBlack::testMkUninterpretedSort()
{
TS_ASSERT_THROWS_NOTHING(d_solver->mkUninterpretedSort("u"));
@@ -540,6 +553,16 @@ void SolverBlack::testMkEmptySet()
TS_ASSERT_THROWS(slv.mkEmptySet(s), CVC4ApiException&);
}
+void SolverBlack::testMkEmptySequence()
+{
+ Solver slv;
+ Sort s = d_solver->mkSequenceSort(d_solver->getBooleanSort());
+ TS_ASSERT_THROWS_NOTHING(d_solver->mkEmptySequence(s));
+ TS_ASSERT_THROWS_NOTHING(
+ d_solver->mkEmptySequence(d_solver->getBooleanSort()));
+ TS_ASSERT_THROWS(slv.mkEmptySequence(s), CVC4ApiException&);
+}
+
void SolverBlack::testMkFalse()
{
TS_ASSERT_THROWS_NOTHING(d_solver->mkFalse());
diff --git a/test/unit/api/sort_black.h b/test/unit/api/sort_black.h
index 944b9309f..abaded5a1 100644
--- a/test/unit/api/sort_black.h
+++ b/test/unit/api/sort_black.h
@@ -35,6 +35,7 @@ class SortBlack : public CxxTest::TestSuite
void testGetArrayIndexSort();
void testGetArrayElementSort();
void testGetSetElementSort();
+ void testGetSequenceElementSort();
void testGetUninterpretedSortName();
void testIsUninterpretedSortParameterized();
void testGetUninterpretedSortParamSorts();
@@ -196,6 +197,16 @@ void SortBlack::testGetSetElementSort()
TS_ASSERT_THROWS(bvSort.getSetElementSort(), CVC4ApiException&);
}
+void SortBlack::testGetSequenceElementSort()
+{
+ Sort seqSort = d_solver.mkSequenceSort(d_solver.getIntegerSort());
+ TS_ASSERT(seqSort.isSequence());
+ TS_ASSERT_THROWS_NOTHING(seqSort.getSequenceElementSort());
+ Sort bvSort = d_solver.mkBitVectorSort(32);
+ TS_ASSERT(!bvSort.isSequence());
+ TS_ASSERT_THROWS(bvSort.getSequenceElementSort(), CVC4ApiException&);
+}
+
void SortBlack::testGetUninterpretedSortName()
{
Sort uSort = d_solver.mkUninterpretedSort("u");
diff --git a/test/unit/api/term_black.h b/test/unit/api/term_black.h
index d23f560ae..6ca02c9f1 100644
--- a/test/unit/api/term_black.h
+++ b/test/unit/api/term_black.h
@@ -44,6 +44,7 @@ class TermBlack : public CxxTest::TestSuite
void testSubstitute();
void testIsConst();
void testConstArray();
+ void testConstSequenceElements();
private:
Solver d_solver;
@@ -110,6 +111,13 @@ void TermBlack::testGetKind()
TS_ASSERT_THROWS_NOTHING(p_0.getKind());
Term p_f_y = d_solver.mkTerm(APPLY_UF, p, f_y);
TS_ASSERT_THROWS_NOTHING(p_f_y.getKind());
+
+ // Sequence kinds do not exist internally, test that the API properly
+ // converts them back.
+ Sort seqSort = d_solver.mkSequenceSort(intSort);
+ Term s = d_solver.mkConst(seqSort, "s");
+ Term ss = d_solver.mkTerm(SEQ_CONCAT, s, s);
+ TS_ASSERT(ss.getKind() == SEQ_CONCAT);
}
void TermBlack::testGetSort()
@@ -769,3 +777,22 @@ void TermBlack::testConstArray()
TS_ASSERT_EQUALS(constarr.getConstArrayBase(), one);
TS_ASSERT_THROWS(a.getConstArrayBase(), CVC4ApiException&);
}
+
+void TermBlack::testConstSequenceElements()
+{
+ Sort realsort = d_solver.getRealSort();
+ Sort seqsort = d_solver.mkSequenceSort(realsort);
+ Term s = d_solver.mkEmptySequence(seqsort);
+
+ TS_ASSERT(s.isConst());
+
+ TS_ASSERT_EQUALS(s.getKind(), CONST_SEQUENCE);
+ // empty sequence has zero elements
+ std::vector<Term> cs = s.getConstSequenceElements();
+ TS_ASSERT(cs.empty());
+
+ // A seq.unit app is not a constant sequence (regardless of whether it is
+ // applied to a constant).
+ Term su = d_solver.mkTerm(SEQ_UNIT, d_solver.mkReal(1));
+ TS_ASSERT_THROWS(su.getConstSequenceElements(), CVC4ApiException&);
+}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback