from python_builtin import * if is_python_builtin(): # Test 0 for default tp_hash vs = ValueStruct(1234) h = hash(vs) d = dict() d[h] = "hi" if h not in d: raise RuntimeError("h should be in d") h2 = hash(ValueStruct.inout(vs)) if h != h2: raise RuntimeError("default tp_hash not working") # Test 1a for tp_hash if hash(SimpleValue(222)) != 222: raise RuntimeError("tp_hash not working") # Test 1b for tp_hash if hash(SimpleValue2(333)) != 333: raise RuntimeError("tp_hash not working") # Test 2 for tp_hash try: # Was incorrectly raising: SystemError: error return without exception set h = hash(BadHashFunctionReturnType()) raise RuntimeError("Missing TypeError") except TypeError: pass # Test 3 for tp_hash passed = False try: h = hash(ExceptionHashFunction()) except RuntimeError, e: passed = str(e).find("oops") != -1 pass if not passed: raise RuntimeError("did not catch exception in hash()") # Test 4 for tp_dealloc (which is handled differently to other slots in the SWIG source) d = Dealloc1() if cvar.Dealloc1CalledCount != 0: raise RuntimeError("count should be 0") del d if cvar.Dealloc1CalledCount != 1: raise RuntimeError("count should be 1") d = Dealloc2() if cvar.Dealloc2CalledCount != 0: raise RuntimeError("count should be 0") del d if cvar.Dealloc2CalledCount != 1: raise RuntimeError("count should be 1") d = Dealloc3() if cvar.Dealloc3CalledCount != 0: raise RuntimeError("count should be 0") del d if cvar.Dealloc3CalledCount != 1: raise RuntimeError("count should be 1") # Test 5 for python:compare feature m10 = MyClass(10) m20 = MyClass(20) m15 = MyClass(15) if not m10 < m15: raise RuntimeError("m10 < m15") if not m10 < m20: raise RuntimeError("m10 < m20") if not m15 < m20: raise RuntimeError("m15 < m20") if m10 > m15: raise RuntimeError("m10 > m15") if m10 > m20: raise RuntimeError("m10 > m20") if m15 > m20: raise RuntimeError("m15 > m20") if MyClass.less_than_counts != 6: raise RuntimeError("python:compare feature not working") # Test 6 sa = SimpleArray(5) elements = [x for x in sa] if elements != [0, 10, 20, 30, 40]: raise RuntimeError("Iteration not working") if len(sa) != 5: raise RuntimeError("len not working") for i in range(5): if sa[i] != i*10: raise RuntimeError("indexing not working") subslice = sa[1:3] elements = [x for x in subslice] if elements != [10, 20]: raise RuntimeError("slice not working") # Test 7 mapping to Python's pow x = ANumber(2) y = ANumber(4) z = x ** y if z.Value() != 16: raise RuntimeError("x ** y wrong") z = pow(x, y) if z.Value() != 16: raise RuntimeError("pow(x, y) wrong") z = ANumber(9) z = pow(x, y, z) if z.Value() != 7: raise RuntimeError("pow(x, y, z) wrong")