summaryrefslogtreecommitdiff
path: root/test/api
diff options
context:
space:
mode:
authoryoni206 <yoni206@users.noreply.github.com>2021-05-28 13:28:56 -0700
committerGitHub <noreply@github.com>2021-05-28 20:28:56 +0000
commit40089fc79491a0608f36e6af9db69d2c12c37e3e (patch)
tree84cbabd73236653c64c19bd779ce6d2ad1ad9182 /test/api
parent15d38800b9f493fcf4573160b420f0ab9563b4a8 (diff)
Python API: bugfix + translating tests from cpp unit tests (#6559)
This PR fixes an issue in the python API for datatypes, and also introduces tests translated from https://github.com/cvc5/cvc5/blob/master/test/unit/api/datatype_api_black.cpp The next PR will translate more tests and will also introduce missing functions in the python API for datatypes.
Diffstat (limited to 'test/api')
-rw-r--r--test/api/python/CMakeLists.txt1
-rw-r--r--test/api/python/test_datatype_api.py184
2 files changed, 0 insertions, 185 deletions
diff --git a/test/api/python/CMakeLists.txt b/test/api/python/CMakeLists.txt
index 7f05bf130..4e77c0ead 100644
--- a/test/api/python/CMakeLists.txt
+++ b/test/api/python/CMakeLists.txt
@@ -38,5 +38,4 @@ macro(cvc5_add_python_api_test name filename)
endmacro()
-cvc5_add_python_api_test(pytest_datatype_api test_datatype_api.py)
cvc5_add_python_api_test(pytest_to_python_obj test_to_python_obj.py)
diff --git a/test/api/python/test_datatype_api.py b/test/api/python/test_datatype_api.py
deleted file mode 100644
index 06f4e0f3d..000000000
--- a/test/api/python/test_datatype_api.py
+++ /dev/null
@@ -1,184 +0,0 @@
-###############################################################################
-# Top contributors (to current version):
-# Andres Noetzli, Makai Mann
-#
-# This file is part of the cvc5 project.
-#
-# Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
-# 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.
-# #############################################################################
-##
-
-import pytest
-
-import pycvc5
-from pycvc5 import kinds
-
-
-def test_datatype_simply_rec():
- solver = pycvc5.Solver()
-
- # Create mutual datatypes corresponding to this definition block:
- #
- # DATATYPE
- # wlist = leaf(data: list),
- # list = cons(car: wlist, cdr: list) | nil,
- # ns = elem(ndata: set(wlist)) | elemArray(ndata2: array(list, list))
- # END;
-
- # Make unresolved types as placeholders
- unres_wlist = solver.mkUninterpretedSort('wlist')
- unres_list = solver.mkUninterpretedSort('list')
- unres_ns = solver.mkUninterpretedSort('ns')
- unres_types = set([unres_wlist, unres_list, unres_ns])
-
- wlist = solver.mkDatatypeDecl('wlist')
- leaf = solver.mkDatatypeConstructorDecl('leaf')
- leaf.addSelector('data', unres_list)
- wlist.addConstructor(leaf)
-
- dlist = solver.mkDatatypeDecl('list')
- cons = solver.mkDatatypeConstructorDecl('cons')
- cons.addSelector('car', unres_wlist)
- cons.addSelector('cdr', unres_list)
- dlist.addConstructor(cons)
- nil = solver.mkDatatypeConstructorDecl("nil")
- dlist.addConstructor(nil)
-
- ns = solver.mkDatatypeDecl('ns')
- elem = solver.mkDatatypeConstructorDecl('elem')
- elem.addSelector('ndata', solver.mkSetSort(unres_wlist))
- ns.addConstructor(elem)
- elem_array = solver.mkDatatypeConstructorDecl('elemArray')
- elem_array.addSelector('ndata', solver.mkArraySort(unres_list, unres_list))
- ns.addConstructor(elem_array)
-
- # this is well-founded and has no nested recursion
- dtdecls = [wlist, dlist, ns]
- dtsorts = solver.mkDatatypeSorts(dtdecls, unres_types)
- assert len(dtsorts) == 3
- assert dtsorts[0].getDatatype().isWellFounded()
- assert dtsorts[1].getDatatype().isWellFounded()
- assert dtsorts[2].getDatatype().isWellFounded()
- assert not dtsorts[0].getDatatype().hasNestedRecursion()
- assert not dtsorts[1].getDatatype().hasNestedRecursion()
- assert not dtsorts[2].getDatatype().hasNestedRecursion()
-
- # Create mutual datatypes corresponding to this definition block:
- # DATATYPE
- # ns2 = elem2(ndata: array(int,ns2)) | nil2
- # END;
- unres_ns2 = solver.mkUninterpretedSort('ns2')
- unres_types = set([unres_ns2])
-
- ns2 = solver.mkDatatypeDecl('ns2')
- elem2 = solver.mkDatatypeConstructorDecl('elem2')
- elem2.addSelector('ndata',
- solver.mkArraySort(solver.getIntegerSort(), unres_ns2))
- ns2.addConstructor(elem2)
- nil2 = solver.mkDatatypeConstructorDecl('nil2')
- ns2.addConstructor(nil2)
-
- # this is not well-founded due to non-simple recursion
- dtdecls = [ns2]
- dtsorts = solver.mkDatatypeSorts(dtdecls, unres_types)
- assert len(dtsorts) == 1
- assert dtsorts[0].getDatatype()[0][0].getRangeSort().isArray()
- elem_sort = dtsorts[0].getDatatype()[0][0].getRangeSort().getArrayElementSort()
- assert elem_sort == dtsorts[0]
- assert dtsorts[0].getDatatype().isWellFounded()
- assert dtsorts[0].getDatatype().hasNestedRecursion()
-
- # Create mutual datatypes corresponding to this definition block:
- # DATATYPE
- # list3 = cons3(car: ns3, cdr: list3) | nil3,
- # ns3 = elem3(ndata: set(list3))
- # END
- unres_ns3 = solver.mkUninterpretedSort('ns3')
- unres_list3 = solver.mkUninterpretedSort('list3')
- unres_types = set([unres_ns3, unres_list3])
-
- list3 = solver.mkDatatypeDecl('list3')
- cons3 = solver.mkDatatypeConstructorDecl('cons3')
- cons3.addSelector('car', unres_ns3)
- cons3.addSelector('cdr', unres_list3)
- list3.addConstructor(cons3)
- nil3 = solver.mkDatatypeConstructorDecl('nil3')
- list3.addConstructor(nil3)
-
- ns3 = solver.mkDatatypeDecl('ns3')
- elem3 = solver.mkDatatypeConstructorDecl('elem3')
- elem3.addSelector('ndata', solver.mkSetSort(unres_list3))
- ns3.addConstructor(elem3)
-
- # both are well-founded and have nested recursion
- dtdecls = [list3, ns3]
- dtsorts = solver.mkDatatypeSorts(dtdecls, unres_types)
- assert len(dtsorts) == 2
- assert dtsorts[0].getDatatype().isWellFounded()
- assert dtsorts[1].getDatatype().isWellFounded()
- assert dtsorts[0].getDatatype().hasNestedRecursion()
- assert dtsorts[1].getDatatype().hasNestedRecursion()
-
- # Create mutual datatypes corresponding to this definition block:
- # DATATYPE
- # list4 = cons(car: set(ns4), cdr: list4) | nil,
- # ns4 = elem(ndata: list4)
- # END
- unres_ns4 = solver.mkUninterpretedSort('ns4')
- unres_list4 = solver.mkUninterpretedSort('list4')
- unres_types = set([unres_ns4, unres_list4])
-
- list4 = solver.mkDatatypeDecl('list4')
- cons4 = solver.mkDatatypeConstructorDecl('cons4')
- cons4.addSelector('car', solver.mkSetSort(unres_ns4))
- cons4.addSelector('cdr', unres_list4)
- list4.addConstructor(cons4)
- nil4 = solver.mkDatatypeConstructorDecl('nil4')
- list4.addConstructor(nil4)
-
- ns4 = solver.mkDatatypeDecl('ns4')
- elem4 = solver.mkDatatypeConstructorDecl('elem3')
- elem4.addSelector('ndata', unres_list4)
- ns4.addConstructor(elem4)
-
- # both are well-founded and have nested recursion
- dtdecls = [list4, ns4]
- dtsorts = solver.mkDatatypeSorts(dtdecls, unres_types)
- assert len(dtsorts) == 2
- assert dtsorts[0].getDatatype().isWellFounded()
- assert dtsorts[1].getDatatype().isWellFounded()
- assert dtsorts[0].getDatatype().hasNestedRecursion()
- assert dtsorts[1].getDatatype().hasNestedRecursion()
-
- # Create mutual datatypes corresponding to this definition block:
- # DATATYPE
- # list5[X] = cons(car: X, cdr: list5[list5[X]]) | nil
- # END
- unres_list5 = solver.mkSortConstructorSort('list5', 1)
- unres_types = set([unres_list5])
-
- x = solver.mkParamSort('X')
- v = [x]
- list5 = solver.mkDatatypeDecl('list5', v)
-
- args = [x]
- ur_list_x = unres_list5.instantiate(args)
- args = [ur_list_x]
- ur_list_list_x = unres_list5.instantiate(args)
-
- cons5 = solver.mkDatatypeConstructorDecl('cons5')
- cons5.addSelector('car', x)
- cons5.addSelector('cdr', ur_list_list_x)
- list5.addConstructor(cons5)
- nil5 = solver.mkDatatypeConstructorDecl('nil5')
- list5.addConstructor(nil5)
-
- # well-founded and has nested recursion
- dtdecls = [list5]
- dtsorts = solver.mkDatatypeSorts(dtdecls, unres_types)
- assert len(dtsorts) == 1
- assert dtsorts[0].getDatatype().isWellFounded()
- assert dtsorts[0].getDatatype().hasNestedRecursion()
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback