def test_ptr(): gun, = autowrap.PXDParser.parse_str(""" cdef extern from "": unsigned int * gun (vector[double *] *) """) assert gun.result_type == CppType.from_string("unsigned int *") (n, t), = gun.arguments assert t == CppType.from_string("vector[double *] *")
def _assert_exeception_when_testing(str_): try: CppType.from_string(str_).check_for_recursion() except Exception as e: estr = str(e) if not estr.startswith("recursion check for "): if not estr.endswith(" failed"): raise e else: assert False, "invalid type '%s' passed test" % str_
def test_nested_mapping_flattening(): from autowrap.Types import CppType B = CppType.from_string("B") Y = CppType.from_string("Y") Z = CppType.from_string("Z") CXD = CppType.from_string("C[X,D]") mapping = dict(A=B, B=CXD, C=Z, D=Y) autowrap.Utils.flatten(mapping) assert str(mapping["A"]) == "Z[X,Y]" assert str(mapping["B"]) == "Z[X,Y]" assert str(mapping["C"]) == "Z" assert str(mapping["D"]) == "Y"
def test_inv_transform(): A = CppType.from_string("A") AX = CppType.from_string("A[X]") AXX = CppType.from_string("A[X,X]") ABX = CppType.from_string("A[B[X]]") ABXX = CppType.from_string("A[B[X],X]") T = CppType.from_string("T") def check(t, map_, expected): is_ = str(t.inv_transformed(map_)) assert is_ == expected, is_ map1 = dict(Z=A) check(A, map1, "Z") check(AX, map1, "A[X]") map2 = dict(Z=CppType.from_string("B[X]")) check(ABX, map2, "A[Z]") check(ABXX, map2, "A[Z,X]") ABXp = ABX.copy() ABXp.is_ptr = True check(ABXp, map2, "A[Z] *") ABXXp = ABXX.copy() ABXXp.template_args[0].is_ptr = True check(ABXXp, map2, "A[Z *,X]")
def test_base_type_collecting(): def check(t, tobe): collected = "".join(sorted(t.all_occuring_base_types())) if collected != tobe: msg = "input '%s', collected '%s'" % (t, collected) assert False, msg check(CppType.from_string("A"), "A") check(CppType.from_string("A[B]"), "AB") check(CppType.from_string("A[B,C]"), "ABC") check(CppType.from_string("A[B[C]]"), "ABC") check(CppType.from_string("A[B[C],D]"), "ABCD") check(CppType.from_string("A[B[C[D]]]"), "ABCD")
def parse(anno): m = re.match("(\S+)\((\S+)\)", anno) assert m is not None, "invalid iter annotation" name, type_str = m.groups() return name, CppType.from_string(type_str)
def _test_check_for_recursion_1(): CppType.from_string("A").check_for_recursion() CppType.from_string("A[B]").check_for_recursion() CppType.from_string("A[B,B]").check_for_recursion() CppType.from_string("A[B,C]").check_for_recursion() CppType.from_string("A[B[C],C]").check_for_recursion() CppType.from_string("A[B[C],D]").check_for_recursion() CppType.from_string("A[B[C],D[E]]").check_for_recursion() CppType.from_string("A[B[C],D[E],D]").check_for_recursion() CppType.from_string("A[B[C],D[E],B]").check_for_recursion()
def _testErr(s): CppType.from_string(s)
def _testType(t): assert t == str(CppType.from_string(t)) == t, str(CppType.from_string(t))