2021-04-12 12:31:43 -07:00
|
|
|
/******************************************************************************
|
|
|
|
|
* Top contributors (to current version):
|
2023-05-09 11:06:18 -07:00
|
|
|
* Aina Niemetz, Andrew Reynolds, Alex Ozdemir
|
2021-04-12 12:31:43 -07:00
|
|
|
*
|
|
|
|
|
* This file is part of the cvc5 project.
|
|
|
|
|
*
|
2023-05-09 11:06:18 -07:00
|
|
|
* Copyright (c) 2009-2023 by the authors listed in the file AUTHORS
|
2021-04-12 12:31:43 -07:00
|
|
|
* in the top-level source directory and their institutional affiliations.
|
|
|
|
|
* All rights reserved. See the file COPYING in the top-level source
|
|
|
|
|
* directory for licensing information.
|
|
|
|
|
* ****************************************************************************
|
|
|
|
|
*
|
|
|
|
|
* Black box testing of the guards of the C++ API functions.
|
|
|
|
|
*/
|
2018-11-05 09:43:29 -08:00
|
|
|
|
2020-12-04 08:54:32 -08:00
|
|
|
#include "test_api.h"
|
2018-11-05 09:43:29 -08:00
|
|
|
|
2022-03-29 16:23:01 -07:00
|
|
|
namespace cvc5::internal {
|
2020-12-04 08:54:32 -08:00
|
|
|
|
|
|
|
|
namespace test {
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
class TestApiBlackSort : public TestApi
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2021-03-11 17:32:09 -08:00
|
|
|
protected:
|
|
|
|
|
Sort create_datatype_sort()
|
|
|
|
|
{
|
|
|
|
|
DatatypeDecl dtypeSpec = d_solver.mkDatatypeDecl("list");
|
|
|
|
|
DatatypeConstructorDecl cons = d_solver.mkDatatypeConstructorDecl("cons");
|
|
|
|
|
cons.addSelector("head", d_solver.getIntegerSort());
|
|
|
|
|
cons.addSelectorSelf("tail");
|
|
|
|
|
dtypeSpec.addConstructor(cons);
|
|
|
|
|
DatatypeConstructorDecl nil = d_solver.mkDatatypeConstructorDecl("nil");
|
|
|
|
|
dtypeSpec.addConstructor(nil);
|
|
|
|
|
return d_solver.mkDatatypeSort(dtypeSpec);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Sort create_param_datatype_sort()
|
|
|
|
|
{
|
|
|
|
|
Sort sort = d_solver.mkParamSort("T");
|
2022-04-02 14:21:46 -05:00
|
|
|
DatatypeDecl paramDtypeSpec = d_solver.mkDatatypeDecl("paramlist", {sort});
|
2021-03-11 17:32:09 -08:00
|
|
|
DatatypeConstructorDecl paramCons =
|
|
|
|
|
d_solver.mkDatatypeConstructorDecl("cons");
|
|
|
|
|
DatatypeConstructorDecl paramNil =
|
|
|
|
|
d_solver.mkDatatypeConstructorDecl("nil");
|
|
|
|
|
paramCons.addSelector("head", sort);
|
|
|
|
|
paramDtypeSpec.addConstructor(paramCons);
|
|
|
|
|
paramDtypeSpec.addConstructor(paramNil);
|
|
|
|
|
return d_solver.mkDatatypeSort(paramDtypeSpec);
|
|
|
|
|
}
|
2018-11-05 09:43:29 -08:00
|
|
|
};
|
|
|
|
|
|
2022-04-28 17:47:10 -07:00
|
|
|
TEST_F(TestApiBlackSort, hash)
|
|
|
|
|
{
|
|
|
|
|
std::hash<cvc5::Sort> h;
|
|
|
|
|
ASSERT_NO_THROW(h(d_solver.getIntegerSort()));
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-11 17:32:09 -08:00
|
|
|
TEST_F(TestApiBlackSort, operators_comparison)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_NO_THROW(d_solver.getIntegerSort() == Sort());
|
|
|
|
|
ASSERT_NO_THROW(d_solver.getIntegerSort() != Sort());
|
|
|
|
|
ASSERT_NO_THROW(d_solver.getIntegerSort() < Sort());
|
|
|
|
|
ASSERT_NO_THROW(d_solver.getIntegerSort() <= Sort());
|
|
|
|
|
ASSERT_NO_THROW(d_solver.getIntegerSort() > Sort());
|
|
|
|
|
ASSERT_NO_THROW(d_solver.getIntegerSort() >= Sort());
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-17 13:37:10 -06:00
|
|
|
TEST_F(TestApiBlackSort, getKind)
|
|
|
|
|
{
|
|
|
|
|
Sort b = d_solver.getBooleanSort();
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_EQ(b.getKind(), SortKind::BOOLEAN_SORT);
|
2023-01-17 13:37:10 -06:00
|
|
|
Sort dt_sort = create_datatype_sort();
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_EQ(dt_sort.getKind(), SortKind::DATATYPE_SORT);
|
2023-01-17 13:37:10 -06:00
|
|
|
Sort arr_sort =
|
|
|
|
|
d_solver.mkArraySort(d_solver.getRealSort(), d_solver.getIntegerSort());
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_EQ(arr_sort.getKind(), SortKind::ARRAY_SORT);
|
2023-01-17 13:37:10 -06:00
|
|
|
Sort fp_sort = d_solver.mkFloatingPointSort(8, 24);
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_EQ(fp_sort.getKind(), SortKind::FLOATINGPOINT_SORT);
|
2023-01-17 13:37:10 -06:00
|
|
|
Sort bv_sort = d_solver.mkBitVectorSort(8);
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_EQ(bv_sort.getKind(), SortKind::BITVECTOR_SORT);
|
|
|
|
|
Sort abs_sort = d_solver.mkAbstractSort(SortKind::BITVECTOR_SORT);
|
|
|
|
|
ASSERT_EQ(abs_sort.getKind(), SortKind::ABSTRACT_SORT);
|
2023-01-17 13:37:10 -06:00
|
|
|
}
|
|
|
|
|
|
2021-12-16 10:50:01 -08:00
|
|
|
TEST_F(TestApiBlackSort, hasGetSymbol)
|
|
|
|
|
{
|
|
|
|
|
Sort n;
|
|
|
|
|
Sort b = d_solver.getBooleanSort();
|
|
|
|
|
Sort s0 = d_solver.mkParamSort("s0");
|
|
|
|
|
Sort s1 = d_solver.mkParamSort("|s1\\|");
|
|
|
|
|
|
|
|
|
|
ASSERT_THROW(n.hasSymbol(), CVC5ApiException);
|
|
|
|
|
ASSERT_FALSE(b.hasSymbol());
|
|
|
|
|
ASSERT_TRUE(s0.hasSymbol());
|
|
|
|
|
ASSERT_TRUE(s1.hasSymbol());
|
|
|
|
|
|
|
|
|
|
ASSERT_THROW(n.getSymbol(), CVC5ApiException);
|
|
|
|
|
ASSERT_THROW(b.getSymbol(), CVC5ApiException);
|
|
|
|
|
ASSERT_EQ(s0.getSymbol(), "s0");
|
|
|
|
|
ASSERT_EQ(s1.getSymbol(), "|s1\\|");
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-21 01:18:33 +03:00
|
|
|
TEST_F(TestApiBlackSort, isNull)
|
|
|
|
|
{
|
|
|
|
|
Sort x;
|
|
|
|
|
ASSERT_TRUE(x.isNull());
|
|
|
|
|
x = d_solver.getBooleanSort();
|
|
|
|
|
ASSERT_FALSE(x.isNull());
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-11 17:32:09 -08:00
|
|
|
TEST_F(TestApiBlackSort, isBoolean)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_TRUE(d_solver.getBooleanSort().isBoolean());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isBoolean());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isInteger)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_TRUE(d_solver.getIntegerSort().isInteger());
|
2021-04-01 15:44:34 -05:00
|
|
|
ASSERT_TRUE(!d_solver.getRealSort().isInteger());
|
2021-03-11 17:32:09 -08:00
|
|
|
ASSERT_NO_THROW(Sort().isInteger());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isReal)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_TRUE(d_solver.getRealSort().isReal());
|
2021-04-01 15:44:34 -05:00
|
|
|
ASSERT_TRUE(!d_solver.getIntegerSort().isReal());
|
2021-03-11 17:32:09 -08:00
|
|
|
ASSERT_NO_THROW(Sort().isReal());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isString)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_TRUE(d_solver.getStringSort().isString());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isRegExp)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_TRUE(d_solver.getRegExpSort().isRegExp());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isRegExp());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isRoundingMode)
|
|
|
|
|
{
|
2021-06-16 14:04:09 -07:00
|
|
|
ASSERT_TRUE(d_solver.getRoundingModeSort().isRoundingMode());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isRoundingMode());
|
2021-03-11 17:32:09 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isBitVector)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_TRUE(d_solver.mkBitVectorSort(8).isBitVector());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isBitVector());
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-16 08:36:41 -08:00
|
|
|
TEST_F(TestApiBlackSort, isFiniteField)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_TRUE(d_solver.mkFiniteFieldSort("7").isFiniteField());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isFiniteField());
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-11 17:32:09 -08:00
|
|
|
TEST_F(TestApiBlackSort, isFloatingPoint)
|
|
|
|
|
{
|
2021-06-16 14:04:09 -07:00
|
|
|
ASSERT_TRUE(d_solver.mkFloatingPointSort(8, 24).isFloatingPoint());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isFloatingPoint());
|
2021-03-11 17:32:09 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isDatatype)
|
|
|
|
|
{
|
|
|
|
|
Sort dt_sort = create_datatype_sort();
|
|
|
|
|
ASSERT_TRUE(dt_sort.isDatatype());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isDatatype());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isConstructor)
|
|
|
|
|
{
|
|
|
|
|
Sort dt_sort = create_datatype_sort();
|
|
|
|
|
Datatype dt = dt_sort.getDatatype();
|
2022-04-02 11:57:50 -07:00
|
|
|
Sort cons_sort = dt[0].getTerm().getSort();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_TRUE(cons_sort.isDatatypeConstructor());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isDatatypeConstructor());
|
2021-03-11 17:32:09 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isSelector)
|
|
|
|
|
{
|
|
|
|
|
Sort dt_sort = create_datatype_sort();
|
|
|
|
|
Datatype dt = dt_sort.getDatatype();
|
2022-04-02 11:57:50 -07:00
|
|
|
Sort cons_sort = dt[0][1].getTerm().getSort();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_TRUE(cons_sort.isDatatypeSelector());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isDatatypeSelector());
|
2021-03-11 17:32:09 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isTester)
|
|
|
|
|
{
|
|
|
|
|
Sort dt_sort = create_datatype_sort();
|
|
|
|
|
Datatype dt = dt_sort.getDatatype();
|
2021-05-07 19:25:27 -05:00
|
|
|
Sort testerSort = dt[0].getTesterTerm().getSort();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_TRUE(testerSort.isDatatypeTester());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isDatatypeTester());
|
2021-03-11 17:32:09 -08:00
|
|
|
}
|
|
|
|
|
|
2021-05-07 19:25:27 -05:00
|
|
|
TEST_F(TestApiBlackSort, isUpdater)
|
|
|
|
|
{
|
|
|
|
|
Sort dt_sort = create_datatype_sort();
|
|
|
|
|
Datatype dt = dt_sort.getDatatype();
|
|
|
|
|
Sort updaterSort = dt[0][0].getUpdaterTerm().getSort();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_TRUE(updaterSort.isDatatypeUpdater());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isDatatypeUpdater());
|
2021-05-07 19:25:27 -05:00
|
|
|
}
|
|
|
|
|
|
2021-03-11 17:32:09 -08:00
|
|
|
TEST_F(TestApiBlackSort, isFunction)
|
|
|
|
|
{
|
2022-03-31 21:50:25 -07:00
|
|
|
Sort fun_sort = d_solver.mkFunctionSort({d_solver.getRealSort()},
|
2021-03-11 17:32:09 -08:00
|
|
|
d_solver.getIntegerSort());
|
|
|
|
|
ASSERT_TRUE(fun_sort.isFunction());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isFunction());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isPredicate)
|
|
|
|
|
{
|
|
|
|
|
Sort pred_sort = d_solver.mkPredicateSort({d_solver.getRealSort()});
|
|
|
|
|
ASSERT_TRUE(pred_sort.isPredicate());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isPredicate());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isTuple)
|
|
|
|
|
{
|
|
|
|
|
Sort tup_sort = d_solver.mkTupleSort({d_solver.getRealSort()});
|
|
|
|
|
ASSERT_TRUE(tup_sort.isTuple());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isTuple());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isRecord)
|
|
|
|
|
{
|
|
|
|
|
Sort rec_sort =
|
|
|
|
|
d_solver.mkRecordSort({std::make_pair("asdf", d_solver.getRealSort())});
|
|
|
|
|
ASSERT_TRUE(rec_sort.isRecord());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isRecord());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isArray)
|
|
|
|
|
{
|
|
|
|
|
Sort arr_sort =
|
|
|
|
|
d_solver.mkArraySort(d_solver.getRealSort(), d_solver.getIntegerSort());
|
|
|
|
|
ASSERT_TRUE(arr_sort.isArray());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isArray());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isSet)
|
|
|
|
|
{
|
|
|
|
|
Sort set_sort = d_solver.mkSetSort(d_solver.getRealSort());
|
|
|
|
|
ASSERT_TRUE(set_sort.isSet());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isSet());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isBag)
|
|
|
|
|
{
|
|
|
|
|
Sort bag_sort = d_solver.mkBagSort(d_solver.getRealSort());
|
|
|
|
|
ASSERT_TRUE(bag_sort.isBag());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isBag());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isSequence)
|
|
|
|
|
{
|
|
|
|
|
Sort seq_sort = d_solver.mkSequenceSort(d_solver.getRealSort());
|
|
|
|
|
ASSERT_TRUE(seq_sort.isSequence());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isSequence());
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-17 13:37:10 -06:00
|
|
|
TEST_F(TestApiBlackSort, isAbstract)
|
|
|
|
|
{
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_TRUE(d_solver.mkAbstractSort(SortKind::BITVECTOR_SORT).isAbstract());
|
2023-01-17 13:37:10 -06:00
|
|
|
// ?Array is syntax sugar for (Array ? ?), thus the constructed sort
|
|
|
|
|
// is an Array sort, not an abstract sort.
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_FALSE(d_solver.mkAbstractSort(SortKind::ARRAY_SORT).isAbstract());
|
|
|
|
|
ASSERT_TRUE(d_solver.mkAbstractSort(SortKind::ABSTRACT_SORT).isAbstract());
|
2023-01-17 13:37:10 -06:00
|
|
|
ASSERT_NO_THROW(Sort().isAbstract());
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-11 17:32:09 -08:00
|
|
|
TEST_F(TestApiBlackSort, isUninterpreted)
|
|
|
|
|
{
|
|
|
|
|
Sort un_sort = d_solver.mkUninterpretedSort("asdf");
|
|
|
|
|
ASSERT_TRUE(un_sort.isUninterpretedSort());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isUninterpretedSort());
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort un_sort2 = d_solver.mkUninterpretedSort();
|
|
|
|
|
ASSERT_TRUE(un_sort2.isUninterpretedSort());
|
2021-03-11 17:32:09 -08:00
|
|
|
}
|
|
|
|
|
|
2022-03-25 22:40:42 -07:00
|
|
|
TEST_F(TestApiBlackSort, isUninterpretedSortConstructor)
|
2021-03-11 17:32:09 -08:00
|
|
|
{
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort sc_sort = d_solver.mkUninterpretedSortConstructorSort(1, "asdf");
|
2022-03-25 22:40:42 -07:00
|
|
|
ASSERT_TRUE(sc_sort.isUninterpretedSortConstructor());
|
|
|
|
|
ASSERT_NO_THROW(Sort().isUninterpretedSortConstructor());
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort sc_sort2 = d_solver.mkUninterpretedSortConstructorSort(2);
|
|
|
|
|
ASSERT_TRUE(sc_sort2.isUninterpretedSortConstructor());
|
2021-03-11 17:32:09 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getDatatype)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2021-03-11 17:32:09 -08:00
|
|
|
Sort dtypeSort = create_datatype_sort();
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(dtypeSort.getDatatype());
|
2018-11-05 09:43:29 -08:00
|
|
|
// create bv sort, check should fail
|
|
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getDatatype(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, datatypeSorts)
|
2020-02-24 11:35:37 -06:00
|
|
|
{
|
|
|
|
|
Sort intSort = d_solver.getIntegerSort();
|
2021-03-11 17:32:09 -08:00
|
|
|
Sort dtypeSort = create_datatype_sort();
|
2020-02-24 11:35:37 -06:00
|
|
|
Datatype dt = dtypeSort.getDatatype();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_FALSE(dtypeSort.isDatatypeConstructor());
|
|
|
|
|
ASSERT_THROW(dtypeSort.getDatatypeConstructorCodomainSort(),
|
|
|
|
|
CVC5ApiException);
|
|
|
|
|
ASSERT_THROW(dtypeSort.getDatatypeConstructorDomainSorts(), CVC5ApiException);
|
|
|
|
|
ASSERT_THROW(dtypeSort.getDatatypeConstructorArity(), CVC5ApiException);
|
2020-02-24 11:35:37 -06:00
|
|
|
|
|
|
|
|
// get constructor
|
|
|
|
|
DatatypeConstructor dcons = dt[0];
|
2022-04-02 11:57:50 -07:00
|
|
|
Term consTerm = dcons.getTerm();
|
2020-02-24 11:35:37 -06:00
|
|
|
Sort consSort = consTerm.getSort();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_TRUE(consSort.isDatatypeConstructor());
|
|
|
|
|
ASSERT_FALSE(consSort.isDatatypeTester());
|
|
|
|
|
ASSERT_FALSE(consSort.isDatatypeSelector());
|
|
|
|
|
ASSERT_EQ(consSort.getDatatypeConstructorArity(), 2);
|
|
|
|
|
std::vector<Sort> consDomSorts = consSort.getDatatypeConstructorDomainSorts();
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_EQ(consDomSorts[0], intSort);
|
|
|
|
|
ASSERT_EQ(consDomSorts[1], dtypeSort);
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_EQ(consSort.getDatatypeConstructorCodomainSort(), dtypeSort);
|
2020-02-24 11:35:37 -06:00
|
|
|
|
|
|
|
|
// get tester
|
|
|
|
|
Term isConsTerm = dcons.getTesterTerm();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_TRUE(isConsTerm.getSort().isDatatypeTester());
|
|
|
|
|
ASSERT_EQ(isConsTerm.getSort().getDatatypeTesterDomainSort(), dtypeSort);
|
2020-10-27 11:46:20 -05:00
|
|
|
Sort booleanSort = d_solver.getBooleanSort();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_EQ(isConsTerm.getSort().getDatatypeTesterCodomainSort(), booleanSort);
|
|
|
|
|
ASSERT_THROW(booleanSort.getDatatypeTesterDomainSort(), CVC5ApiException);
|
|
|
|
|
ASSERT_THROW(booleanSort.getDatatypeTesterCodomainSort(), CVC5ApiException);
|
2020-02-24 11:35:37 -06:00
|
|
|
|
|
|
|
|
// get selector
|
|
|
|
|
DatatypeSelector dselTail = dcons[1];
|
2022-04-02 11:57:50 -07:00
|
|
|
Term tailTerm = dselTail.getTerm();
|
2022-03-31 13:50:45 -07:00
|
|
|
ASSERT_TRUE(tailTerm.getSort().isDatatypeSelector());
|
|
|
|
|
ASSERT_EQ(tailTerm.getSort().getDatatypeSelectorDomainSort(), dtypeSort);
|
|
|
|
|
ASSERT_EQ(tailTerm.getSort().getDatatypeSelectorCodomainSort(), dtypeSort);
|
|
|
|
|
ASSERT_THROW(booleanSort.getDatatypeSelectorDomainSort(), CVC5ApiException);
|
|
|
|
|
ASSERT_THROW(booleanSort.getDatatypeSelectorCodomainSort(), CVC5ApiException);
|
2020-02-24 11:35:37 -06:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, instantiate)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
// instantiate parametric datatype, check should not fail
|
2021-03-11 17:32:09 -08:00
|
|
|
Sort paramDtypeSort = create_param_datatype_sort();
|
2022-03-29 14:36:12 -07:00
|
|
|
ASSERT_NO_THROW(paramDtypeSort.instantiate({d_solver.getIntegerSort()}));
|
2018-11-05 09:43:29 -08:00
|
|
|
// instantiate non-parametric datatype sort, check should fail
|
2019-12-06 11:00:33 -06:00
|
|
|
DatatypeDecl dtypeSpec = d_solver.mkDatatypeDecl("list");
|
2020-06-03 20:56:24 -07:00
|
|
|
DatatypeConstructorDecl cons = d_solver.mkDatatypeConstructorDecl("cons");
|
2020-03-11 22:45:03 -05:00
|
|
|
cons.addSelector("head", d_solver.getIntegerSort());
|
2018-11-05 09:43:29 -08:00
|
|
|
dtypeSpec.addConstructor(cons);
|
2020-06-03 20:56:24 -07:00
|
|
|
DatatypeConstructorDecl nil = d_solver.mkDatatypeConstructorDecl("nil");
|
2018-11-05 09:43:29 -08:00
|
|
|
dtypeSpec.addConstructor(nil);
|
|
|
|
|
Sort dtypeSort = d_solver.mkDatatypeSort(dtypeSpec);
|
2022-03-29 14:36:12 -07:00
|
|
|
ASSERT_THROW(dtypeSort.instantiate({d_solver.getIntegerSort()}),
|
|
|
|
|
CVC5ApiException);
|
2022-03-28 18:37:13 -07:00
|
|
|
// instantiate uninterpreted sort constructor
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort sortConsSort = d_solver.mkUninterpretedSortConstructorSort(1, "s");
|
2022-03-29 14:36:12 -07:00
|
|
|
ASSERT_NO_THROW(sortConsSort.instantiate({d_solver.getIntegerSort()}));
|
2022-03-28 18:37:13 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(TestApiBlackSort, isInstantiated)
|
|
|
|
|
{
|
|
|
|
|
Sort paramDtypeSort = create_param_datatype_sort();
|
|
|
|
|
ASSERT_FALSE(paramDtypeSort.isInstantiated());
|
|
|
|
|
Sort instParamDtypeSort =
|
2022-03-29 14:36:12 -07:00
|
|
|
paramDtypeSort.instantiate({d_solver.getIntegerSort()});
|
2022-03-28 18:37:13 -07:00
|
|
|
ASSERT_TRUE(instParamDtypeSort.isInstantiated());
|
|
|
|
|
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort sortConsSort = d_solver.mkUninterpretedSortConstructorSort(1, "s");
|
2022-03-28 18:37:13 -07:00
|
|
|
ASSERT_FALSE(sortConsSort.isInstantiated());
|
2022-03-29 14:36:12 -07:00
|
|
|
Sort instSortConsSort = sortConsSort.instantiate({d_solver.getIntegerSort()});
|
2022-03-28 18:37:13 -07:00
|
|
|
ASSERT_TRUE(instSortConsSort.isInstantiated());
|
|
|
|
|
|
|
|
|
|
ASSERT_FALSE(d_solver.getIntegerSort().isInstantiated());
|
|
|
|
|
ASSERT_FALSE(d_solver.mkBitVectorSort(32).isInstantiated());
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2022-03-29 14:36:12 -07:00
|
|
|
TEST_F(TestApiBlackSort, getInstantiatedParameters)
|
|
|
|
|
{
|
|
|
|
|
Sort intSort = d_solver.getIntegerSort();
|
|
|
|
|
Sort realSort = d_solver.getRealSort();
|
|
|
|
|
Sort boolSort = d_solver.getBooleanSort();
|
|
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(8);
|
|
|
|
|
std::vector<Sort> instSorts;
|
|
|
|
|
|
|
|
|
|
// parametric datatype instantiation
|
|
|
|
|
Sort p1 = d_solver.mkParamSort("p1");
|
|
|
|
|
Sort p2 = d_solver.mkParamSort("p2");
|
|
|
|
|
DatatypeDecl pspec = d_solver.mkDatatypeDecl("pdtype", {p1, p2});
|
|
|
|
|
DatatypeConstructorDecl pcons1 = d_solver.mkDatatypeConstructorDecl("cons1");
|
|
|
|
|
DatatypeConstructorDecl pcons2 = d_solver.mkDatatypeConstructorDecl("cons2");
|
|
|
|
|
DatatypeConstructorDecl pnil = d_solver.mkDatatypeConstructorDecl("nil");
|
|
|
|
|
pcons1.addSelector("sel", p1);
|
|
|
|
|
pcons2.addSelector("sel", p2);
|
|
|
|
|
pspec.addConstructor(pcons1);
|
|
|
|
|
pspec.addConstructor(pcons2);
|
|
|
|
|
pspec.addConstructor(pnil);
|
|
|
|
|
Sort paramDtypeSort = d_solver.mkDatatypeSort(pspec);
|
|
|
|
|
|
|
|
|
|
ASSERT_THROW(paramDtypeSort.getInstantiatedParameters(), CVC5ApiException);
|
|
|
|
|
|
|
|
|
|
Sort instParamDtypeSort = paramDtypeSort.instantiate({realSort, boolSort});
|
|
|
|
|
|
|
|
|
|
instSorts = instParamDtypeSort.getInstantiatedParameters();
|
|
|
|
|
ASSERT_EQ(instSorts[0], realSort);
|
|
|
|
|
ASSERT_EQ(instSorts[1], boolSort);
|
|
|
|
|
|
|
|
|
|
// uninterpreted sort constructor sort instantiation
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort sortConsSort = d_solver.mkUninterpretedSortConstructorSort(4, "s");
|
2022-03-29 14:36:12 -07:00
|
|
|
ASSERT_THROW(sortConsSort.getInstantiatedParameters(), CVC5ApiException);
|
|
|
|
|
|
|
|
|
|
Sort instSortConsSort =
|
|
|
|
|
sortConsSort.instantiate({boolSort, intSort, bvSort, realSort});
|
|
|
|
|
|
|
|
|
|
instSorts = instSortConsSort.getInstantiatedParameters();
|
|
|
|
|
ASSERT_EQ(instSorts[0], boolSort);
|
|
|
|
|
ASSERT_EQ(instSorts[1], intSort);
|
|
|
|
|
ASSERT_EQ(instSorts[2], bvSort);
|
|
|
|
|
ASSERT_EQ(instSorts[3], realSort);
|
|
|
|
|
|
|
|
|
|
ASSERT_THROW(intSort.getInstantiatedParameters(), CVC5ApiException);
|
|
|
|
|
ASSERT_THROW(bvSort.getInstantiatedParameters(), CVC5ApiException);
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-30 12:39:52 -07:00
|
|
|
TEST_F(TestApiBlackSort, getUninterpretedSortConstructor)
|
|
|
|
|
{
|
|
|
|
|
Sort intSort = d_solver.getIntegerSort();
|
|
|
|
|
Sort realSort = d_solver.getRealSort();
|
|
|
|
|
Sort boolSort = d_solver.getBooleanSort();
|
|
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(8);
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort sortConsSort = d_solver.mkUninterpretedSortConstructorSort(4, "s");
|
2022-03-30 12:39:52 -07:00
|
|
|
ASSERT_THROW(sortConsSort.getUninterpretedSortConstructor(),
|
|
|
|
|
CVC5ApiException);
|
|
|
|
|
Sort instSortConsSort =
|
|
|
|
|
sortConsSort.instantiate({boolSort, intSort, bvSort, realSort});
|
|
|
|
|
ASSERT_EQ(sortConsSort, instSortConsSort.getUninterpretedSortConstructor());
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getFunctionArity)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2022-03-31 21:50:25 -07:00
|
|
|
Sort funSort = d_solver.mkFunctionSort({d_solver.mkUninterpretedSort("u")},
|
2018-11-05 09:43:29 -08:00
|
|
|
d_solver.getIntegerSort());
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(funSort.getFunctionArity());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getFunctionArity(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getFunctionDomainSorts)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2022-03-31 21:50:25 -07:00
|
|
|
Sort funSort = d_solver.mkFunctionSort({d_solver.mkUninterpretedSort("u")},
|
2018-11-05 09:43:29 -08:00
|
|
|
d_solver.getIntegerSort());
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(funSort.getFunctionDomainSorts());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getFunctionDomainSorts(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getFunctionCodomainSort)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2022-03-31 21:50:25 -07:00
|
|
|
Sort funSort = d_solver.mkFunctionSort({d_solver.mkUninterpretedSort("u")},
|
2018-11-05 09:43:29 -08:00
|
|
|
d_solver.getIntegerSort());
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(funSort.getFunctionCodomainSort());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getFunctionCodomainSort(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getArrayIndexSort)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
Sort elementSort = d_solver.mkBitVectorSort(32);
|
|
|
|
|
Sort indexSort = d_solver.mkBitVectorSort(32);
|
|
|
|
|
Sort arraySort = d_solver.mkArraySort(indexSort, elementSort);
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(arraySort.getArrayIndexSort());
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(indexSort.getArrayIndexSort(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getArrayElementSort)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
Sort elementSort = d_solver.mkBitVectorSort(32);
|
|
|
|
|
Sort indexSort = d_solver.mkBitVectorSort(32);
|
|
|
|
|
Sort arraySort = d_solver.mkArraySort(indexSort, elementSort);
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(arraySort.getArrayElementSort());
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(indexSort.getArrayElementSort(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getSetElementSort)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
Sort setSort = d_solver.mkSetSort(d_solver.getIntegerSort());
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(setSort.getSetElementSort());
|
2020-09-22 16:59:41 -05:00
|
|
|
Sort elementSort = setSort.getSetElementSort();
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_EQ(elementSort, d_solver.getIntegerSort());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getSetElementSort(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getBagElementSort)
|
2020-09-22 16:59:41 -05:00
|
|
|
{
|
|
|
|
|
Sort bagSort = d_solver.mkBagSort(d_solver.getIntegerSort());
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(bagSort.getBagElementSort());
|
2020-09-22 16:59:41 -05:00
|
|
|
Sort elementSort = bagSort.getBagElementSort();
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_EQ(elementSort, d_solver.getIntegerSort());
|
2020-09-22 16:59:41 -05:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getBagElementSort(), CVC5ApiException);
|
2020-09-22 16:59:41 -05:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getSequenceElementSort)
|
2020-07-06 18:48:10 -05:00
|
|
|
{
|
|
|
|
|
Sort seqSort = d_solver.mkSequenceSort(d_solver.getIntegerSort());
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_TRUE(seqSort.isSequence());
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(seqSort.getSequenceElementSort());
|
2020-07-06 18:48:10 -05:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_FALSE(bvSort.isSequence());
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getSequenceElementSort(), CVC5ApiException);
|
2020-07-06 18:48:10 -05:00
|
|
|
}
|
|
|
|
|
|
2023-01-17 13:37:10 -06:00
|
|
|
TEST_F(TestApiBlackSort, getAbstractedKind)
|
|
|
|
|
{
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_EQ(
|
|
|
|
|
d_solver.mkAbstractSort(SortKind::BITVECTOR_SORT).getAbstractedKind(),
|
|
|
|
|
SortKind::BITVECTOR_SORT);
|
2023-01-17 13:37:10 -06:00
|
|
|
// ?Array is syntax sugar for (Array ? ?), thus the constructed sort
|
|
|
|
|
// is an Array sort, not an abstract sort and its abstract kind cannot be
|
|
|
|
|
// extracted.
|
2023-08-22 11:17:16 -07:00
|
|
|
ASSERT_THROW(
|
|
|
|
|
d_solver.mkAbstractSort(SortKind::ARRAY_SORT).getAbstractedKind(),
|
|
|
|
|
CVC5ApiException);
|
|
|
|
|
ASSERT_EQ(
|
|
|
|
|
d_solver.mkAbstractSort(SortKind::ABSTRACT_SORT).getAbstractedKind(),
|
|
|
|
|
SortKind::ABSTRACT_SORT);
|
2023-01-17 13:37:10 -06:00
|
|
|
}
|
|
|
|
|
|
2022-03-28 12:25:19 -07:00
|
|
|
TEST_F(TestApiBlackSort, getSymbol)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
Sort uSort = d_solver.mkUninterpretedSort("u");
|
2022-03-14 13:29:30 -05:00
|
|
|
ASSERT_NO_THROW(uSort.getSymbol());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2022-03-14 13:29:30 -05:00
|
|
|
ASSERT_THROW(bvSort.getSymbol(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getUninterpretedSortConstructorName)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort sSort = d_solver.mkUninterpretedSortConstructorSort(2, "s");
|
2022-03-14 13:29:30 -05:00
|
|
|
ASSERT_NO_THROW(sSort.getSymbol());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2022-03-14 13:29:30 -05:00
|
|
|
ASSERT_THROW(bvSort.getSymbol(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getUninterpretedSortConstructorArity)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2022-03-31 18:10:29 -07:00
|
|
|
Sort sSort = d_solver.mkUninterpretedSortConstructorSort(2, "s");
|
2022-03-25 22:40:42 -07:00
|
|
|
ASSERT_NO_THROW(sSort.getUninterpretedSortConstructorArity());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2022-03-25 22:40:42 -07:00
|
|
|
ASSERT_THROW(bvSort.getUninterpretedSortConstructorArity(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-10-20 12:14:59 -07:00
|
|
|
TEST_F(TestApiBlackSort, getBitVectorSize)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-10-20 12:14:59 -07:00
|
|
|
ASSERT_NO_THROW(bvSort.getBitVectorSize());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort setSort = d_solver.mkSetSort(d_solver.getIntegerSort());
|
2021-10-20 12:14:59 -07:00
|
|
|
ASSERT_THROW(setSort.getBitVectorSize(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2022-12-16 08:36:41 -08:00
|
|
|
TEST_F(TestApiBlackSort, getFiniteFieldSize)
|
|
|
|
|
{
|
|
|
|
|
Sort ffSort = d_solver.mkFiniteFieldSort("31");
|
|
|
|
|
ASSERT_NO_THROW(ffSort.getFiniteFieldSize());
|
|
|
|
|
ASSERT_EQ(ffSort.getFiniteFieldSize(), "31");
|
|
|
|
|
ASSERT_THROW(Sort().getFiniteFieldSize(), CVC5ApiException);
|
|
|
|
|
Sort setSort = d_solver.mkSetSort(d_solver.getIntegerSort());
|
|
|
|
|
ASSERT_THROW(setSort.getFiniteFieldSize(), CVC5ApiException);
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-20 12:14:59 -07:00
|
|
|
TEST_F(TestApiBlackSort, getFloatingPointExponentSize)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2021-06-16 14:04:09 -07:00
|
|
|
Sort fpSort = d_solver.mkFloatingPointSort(4, 8);
|
2021-10-20 12:14:59 -07:00
|
|
|
ASSERT_NO_THROW(fpSort.getFloatingPointExponentSize());
|
2021-06-16 14:04:09 -07:00
|
|
|
Sort setSort = d_solver.mkSetSort(d_solver.getIntegerSort());
|
2021-10-20 12:14:59 -07:00
|
|
|
ASSERT_THROW(setSort.getFloatingPointExponentSize(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-10-20 12:14:59 -07:00
|
|
|
TEST_F(TestApiBlackSort, getFloatingPointSignificandSize)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
2021-06-16 14:04:09 -07:00
|
|
|
Sort fpSort = d_solver.mkFloatingPointSort(4, 8);
|
2021-10-20 12:14:59 -07:00
|
|
|
ASSERT_NO_THROW(fpSort.getFloatingPointSignificandSize());
|
2021-06-16 14:04:09 -07:00
|
|
|
Sort setSort = d_solver.mkSetSort(d_solver.getIntegerSort());
|
2021-10-20 12:14:59 -07:00
|
|
|
ASSERT_THROW(setSort.getFloatingPointSignificandSize(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getDatatypeArity)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
// create datatype sort, check should not fail
|
2019-12-06 11:00:33 -06:00
|
|
|
DatatypeDecl dtypeSpec = d_solver.mkDatatypeDecl("list");
|
2020-06-03 20:56:24 -07:00
|
|
|
DatatypeConstructorDecl cons = d_solver.mkDatatypeConstructorDecl("cons");
|
2020-03-11 22:45:03 -05:00
|
|
|
cons.addSelector("head", d_solver.getIntegerSort());
|
2018-11-05 09:43:29 -08:00
|
|
|
dtypeSpec.addConstructor(cons);
|
2020-06-03 20:56:24 -07:00
|
|
|
DatatypeConstructorDecl nil = d_solver.mkDatatypeConstructorDecl("nil");
|
2018-11-05 09:43:29 -08:00
|
|
|
dtypeSpec.addConstructor(nil);
|
|
|
|
|
Sort dtypeSort = d_solver.mkDatatypeSort(dtypeSpec);
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(dtypeSort.getDatatypeArity());
|
2018-11-05 09:43:29 -08:00
|
|
|
// create bv sort, check should fail
|
|
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getDatatypeArity(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getTupleLength)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
Sort tupleSort = d_solver.mkTupleSort(
|
|
|
|
|
{d_solver.getIntegerSort(), d_solver.getIntegerSort()});
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(tupleSort.getTupleLength());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getTupleLength(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, getTupleSorts)
|
2018-11-05 09:43:29 -08:00
|
|
|
{
|
|
|
|
|
Sort tupleSort = d_solver.mkTupleSort(
|
|
|
|
|
{d_solver.getIntegerSort(), d_solver.getIntegerSort()});
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_NO_THROW(tupleSort.getTupleSorts());
|
2018-11-05 09:43:29 -08:00
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
2021-04-15 13:04:55 -07:00
|
|
|
ASSERT_THROW(bvSort.getTupleSorts(), CVC5ApiException);
|
2018-11-05 09:43:29 -08:00
|
|
|
}
|
2020-02-24 11:35:37 -06:00
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, sortCompare)
|
2020-02-24 11:35:37 -06:00
|
|
|
{
|
|
|
|
|
Sort boolSort = d_solver.getBooleanSort();
|
|
|
|
|
Sort intSort = d_solver.getIntegerSort();
|
|
|
|
|
Sort bvSort = d_solver.mkBitVectorSort(32);
|
|
|
|
|
Sort bvSort2 = d_solver.mkBitVectorSort(32);
|
2020-12-04 08:54:32 -08:00
|
|
|
ASSERT_TRUE(bvSort >= bvSort2);
|
|
|
|
|
ASSERT_TRUE(bvSort <= bvSort2);
|
|
|
|
|
ASSERT_TRUE((intSort > boolSort) != (intSort < boolSort));
|
|
|
|
|
ASSERT_TRUE((intSort > bvSort || intSort == bvSort) == (intSort >= bvSort));
|
2020-02-24 11:35:37 -06:00
|
|
|
}
|
|
|
|
|
|
2021-02-08 09:55:38 -08:00
|
|
|
TEST_F(TestApiBlackSort, sortScopedToString)
|
2020-10-08 09:35:56 -07:00
|
|
|
{
|
|
|
|
|
std::string name = "uninterp-sort";
|
|
|
|
|
Sort bvsort8 = d_solver.mkBitVectorSort(8);
|
|
|
|
|
Sort uninterp_sort = d_solver.mkUninterpretedSort(name);
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_EQ(bvsort8.toString(), "(_ BitVec 8)");
|
|
|
|
|
ASSERT_EQ(uninterp_sort.toString(), name);
|
2020-10-08 09:35:56 -07:00
|
|
|
Solver solver2;
|
2021-01-12 08:55:56 -08:00
|
|
|
ASSERT_EQ(bvsort8.toString(), "(_ BitVec 8)");
|
|
|
|
|
ASSERT_EQ(uninterp_sort.toString(), name);
|
2020-10-08 09:35:56 -07:00
|
|
|
}
|
2020-12-04 08:54:32 -08:00
|
|
|
|
2022-01-03 17:37:47 -08:00
|
|
|
TEST_F(TestApiBlackSort, toString)
|
|
|
|
|
{
|
|
|
|
|
ASSERT_NO_THROW(Sort().toString());
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-04 08:54:32 -08:00
|
|
|
} // namespace test
|
2022-03-29 16:23:01 -07:00
|
|
|
} // namespace cvc5::internal
|