1 2cimport cython 3from cpython.bool cimport bool 4 5cdef class A: 6 pass 7 8 9a_as_obj = A 10 11 12@cython.test_assert_path_exists('//SimpleCallNode//SimpleCallNode') 13@cython.test_fail_if_path_exists('//SimpleCallNode//PythonCapiCallNode', 14 '//PythonCapiCallNode//SimpleCallNode') 15def test_non_optimised(): 16 """ 17 >>> test_non_optimised() 18 True 19 """ 20 # Non-optimized 21 cdef object foo = A 22 assert isinstance(A(), foo) 23 return True 24 25 26@cython.test_assert_path_exists('//PythonCapiCallNode', 27 '//PythonCapiCallNode//SimpleCallNode', 28 '//PythonCapiFunctionNode[@cname = "PyType_Check"]', 29 '//PythonCapiFunctionNode[@cname = "PyInt_Check"]', 30 '//PythonCapiFunctionNode[@cname = "PyFloat_Check"]', 31 '//PythonCapiFunctionNode[@cname = "PyBytes_Check"]', 32 '//PythonCapiFunctionNode[@cname = "PyUnicode_Check"]', 33 '//PythonCapiFunctionNode[@cname = "PyTuple_Check"]', 34 '//PythonCapiFunctionNode[@cname = "PyList_Check"]', 35 '//PythonCapiFunctionNode[@cname = "PyDict_Check"]', 36 '//PythonCapiFunctionNode[@cname = "PySet_Check"]', 37 '//PythonCapiFunctionNode[@cname = "PySlice_Check"]', 38 '//PythonCapiFunctionNode[@cname = "PyComplex_Check"]') 39@cython.test_fail_if_path_exists('//SimpleCallNode//SimpleCallNode', 40 '//SimpleCallNode//PythonCapiCallNode') 41def test_optimised(): 42 """ 43 >>> test_optimised() 44 True 45 """ 46 # Optimized tests. 47 cdef object new_type = type('a',(),{}) 48 assert isinstance(type('a',(),{}), type) 49 assert isinstance(new_type, type) 50 51 cdef object boolval = True 52 assert isinstance(boolval, bool) 53 assert isinstance(True, bool) 54 55 cdef object intval = int() 56 assert isinstance(intval, int) 57 assert isinstance(int(), int) 58 59 cdef object longval = long() 60 assert isinstance(longval, long) 61 assert isinstance(long(), long) 62 63 cdef object floatval = float() 64 assert isinstance(floatval, float) 65 assert isinstance(float(), float) 66 67 cdef object bytesval = bytes() 68 assert isinstance(bytesval, bytes) 69 assert isinstance(bytes(), bytes) 70 71 cdef object strval = str() 72 assert isinstance(strval, str) 73 assert isinstance(str(), str) 74 75 cdef object unicodeval = unicode() 76 assert isinstance(unicodeval, unicode) 77 assert isinstance(unicode(), unicode) 78 79 cdef object tupleval = tuple() 80 assert isinstance(tupleval, tuple) 81 assert isinstance(tuple(), tuple) 82 83 cdef object listval = list() 84 assert isinstance(listval, list) 85 assert isinstance(list(), list) 86 87 cdef object dictval = dict() 88 assert isinstance(dictval, dict) 89 assert isinstance(dict(), dict) 90 91 cdef object setval = set() 92 assert isinstance(setval, set) 93 assert isinstance(set(), set) 94 95 cdef object sliceval = slice(0) 96 assert isinstance(sliceval, slice) 97 assert isinstance(slice(0), slice) 98 99 cdef object complexval = complex() 100 assert isinstance(complexval, complex) 101 assert isinstance(complex(), complex) 102 103 assert not isinstance(u"foo", int) 104 assert isinstance(A, type) 105 assert isinstance(A(), A) 106 cdef type typed_type = A 107 assert isinstance(A(), typed_type) 108 cdef object untyped_type = A 109 assert isinstance(A(), <type>untyped_type) 110 return True 111 112 113@cython.test_assert_path_exists('//PythonCapiCallNode') 114@cython.test_fail_if_path_exists('//SimpleCallNode//SimpleCallNode', 115 '//SimpleCallNode//PythonCapiCallNode', 116 '//TupleNode//NameNode') 117def test_optimised_tuple(): 118 """ 119 >>> test_optimised_tuple() 120 True 121 """ 122 assert isinstance(int(), (int, long, float, bytes, str, unicode, tuple, list, dict, set, slice, type, A)) 123 assert isinstance(list(), (int, long, float, bytes, str, unicode, tuple, list, dict, set, slice, type, A)) 124 assert isinstance(A(), (int, long, float, bytes, str, unicode, tuple, list, dict, set, slice, type, A)) 125 assert isinstance(A(), (int, long, float, bytes, str, unicode, tuple, list, dict, set, slice, type, A, a_as_obj)) 126 assert isinstance(A(), (int, long, float, bytes, str, unicode, tuple, list, dict, set, slice, type, a_as_obj, A)) 127 assert isinstance(A(), (int, long, float, bytes, str, unicode, a_as_obj, tuple, list, dict, set, slice, type, A)) 128 assert isinstance(0, (int, long)) 129 assert not isinstance(u"xyz", (int, long)) 130 return True 131 132 133def test_custom(): 134 """ 135 >>> test_custom() 136 True 137 """ 138 assert isinstance(A(), A) 139 return True 140 141cdef class B: 142 pass 143 144cdef class C: 145 pass 146 147 148@cython.test_assert_path_exists('//PythonCapiCallNode') 149@cython.test_fail_if_path_exists('//SimpleCallNode//SimpleCallNode', 150 '//SimpleCallNode//PythonCapiCallNode', 151 '//TupleNode//NameNode') 152def test_custom_tuple(obj): 153 """ 154 >>> test_custom_tuple(A()) 155 True 156 >>> test_custom_tuple(B()) 157 True 158 >>> test_custom_tuple(C()) 159 False 160 """ 161 return isinstance(obj, (A,B)) 162 163 164def test_nested(x): 165 """ 166 >>> test_nested(1) 167 True 168 >>> test_nested(1.5) 169 True 170 >>> test_nested("a") 171 False 172 """ 173 cdef object a = (x, None) 174 if isinstance(a[0], (int, float)): 175 return True 176 return False 177