def test_is_null(solver): # creating empty (null) objects. dtypeSpec = DatatypeDecl(solver) cons = DatatypeConstructorDecl(solver) d = Datatype(solver) consConstr = DatatypeConstructor(solver) sel = DatatypeSelector(solver) # verifying that the objects are considered null. assert dtypeSpec.isNull() assert cons.isNull() assert d.isNull() assert consConstr.isNull() assert sel.isNull() # changing the objects to be non-null dtypeSpec = solver.mkDatatypeDecl("list") cons = solver.mkDatatypeConstructorDecl("cons") cons.addSelector("head", solver.getIntegerSort()) dtypeSpec.addConstructor(cons) assert dtypeSpec.getNumConstructors() == 1 assert not dtypeSpec.isParametric() listSort = solver.mkDatatypeSort(dtypeSpec) d = listSort.getDatatype() consConstr = d[0] sel = consConstr[0] # verifying that the new objects are non-null assert not dtypeSpec.isNull() assert not cons.isNull() assert not d.isNull() assert not consConstr.isNull() assert not sel.isNull()
def test_datatype_names(solver): intSort = solver.getIntegerSort() # create datatype sort to test dtypeSpec = solver.mkDatatypeDecl("list") dtypeSpec.getName() assert dtypeSpec.getName() == "list" cons = solver.mkDatatypeConstructorDecl("cons") cons.addSelector("head", intSort) cons.addSelectorSelf("tail") dtypeSpec.addConstructor(cons) nil = solver.mkDatatypeConstructorDecl("nil") dtypeSpec.addConstructor(nil) dtypeSort = solver.mkDatatypeSort(dtypeSpec) dt = dtypeSort.getDatatype() assert dt.getName() == "list" dt.getConstructor("nil") dt["cons"] with pytest.raises(RuntimeError): dt.getConstructor("head") with pytest.raises(RuntimeError): dt.getConstructor("") dcons = dt[0] assert dcons.getName() == "cons" dcons.getSelector("head") dcons["tail"] with pytest.raises(RuntimeError): dcons.getSelector("cons") # get selector dselTail = dcons[1] assert dselTail.getName() == "tail" assert dselTail.getCodomainSort() == dtypeSort # get selector from datatype dt.getSelector("head") with pytest.raises(RuntimeError): dt.getSelector("cons") # possible to construct null datatype declarations if not using mkDatatypeDecl with pytest.raises(RuntimeError): DatatypeDecl(solver).getName()