diff options
Diffstat (limited to 'test/unit')
-rw-r--r-- | test/unit/api/solver_black.h | 23 | ||||
-rw-r--r-- | test/unit/api/sort_black.h | 11 | ||||
-rw-r--r-- | test/unit/api/term_black.h | 27 |
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&); +} |