1 2cimport cython 3 4module_level_tuple = (1,2,3) 5 6def return_module_level_tuple(): 7 """ 8 >>> return_module_level_tuple() 9 (1, 2, 3) 10 """ 11 return module_level_tuple 12 13@cython.test_assert_path_exists("//TupleNode", 14 "//TupleNode[@is_literal = true]") 15@cython.test_fail_if_path_exists("//TupleNode[@is_literal = false]") 16def return_empty_tuple(): 17 """ 18 >>> return_empty_tuple() 19 () 20 """ 21 return () 22 23@cython.test_assert_path_exists("//TupleNode", 24 "//TupleNode[@is_literal = true]") 25@cython.test_fail_if_path_exists("//TupleNode[@is_literal = false]") 26def return_constant_tuple1(): 27 """ 28 >>> return_constant_tuple1() 29 (1,) 30 """ 31 return (1,) 32 33@cython.test_assert_path_exists("//TupleNode", 34 "//TupleNode[@is_literal = true]") 35@cython.test_fail_if_path_exists("//TupleNode[@is_literal = false]") 36def return_folded_tuple(): 37 """ 38 >>> return_folded_tuple() 39 (1, 2, 3) 40 """ 41 return (1, 1+1, 1+1+1) 42 43@cython.test_assert_path_exists("//TupleNode", 44 "//TupleNode[@is_literal = true]") 45@cython.test_fail_if_path_exists("//TupleNode[@is_literal = false]") 46def return_nested_tuple(): 47 """ 48 >>> return_nested_tuple() 49 (1, (2, 3), (3, (4, 5), (2, 3, 2, 3))) 50 """ 51 return (1, (2, 3), (3, (4, 5), (2, 3) * 2)) 52 53@cython.test_assert_path_exists("//TupleNode", 54 "//TupleNode[@is_literal = true]") 55@cython.test_fail_if_path_exists("//TupleNode[@is_literal = false]") 56def constant_tuple1(): 57 """ 58 >>> constant_tuple1() 59 (1,) 60 """ 61 tuple1 = (1,) 62 return tuple1 63 64@cython.test_assert_path_exists("//TupleNode", 65 "//TupleNode[@is_literal = true]") 66@cython.test_fail_if_path_exists("//TupleNode[@is_literal = false]") 67def return_constant_tuple2(): 68 """ 69 >>> return_constant_tuple2() 70 (1, 2) 71 """ 72 return (1,2) 73 74 75def return_multiplied_constant_tuple(n): 76 """ 77 >>> tuples = return_multiplied_constant_tuple(2) 78 >>> type(tuples) is tuple 79 True 80 >>> for t in tuples: print(t) 81 () 82 (1, 2, 3) 83 (1, 2, 3, 1, 2, 3) 84 (1, 2, 3, 1, 2, 3, 1, 2, 3) 85 (1, 2, 3, 1, 2, 3) 86 (1, 2, 3, 1, 2, 3) 87 ((1, 2, 3, 1, 2, 3), (1, 2, 3), (1, 2, 3, 1, 2, 3)) 88 """ 89 return ( 90 (1, 2, 3) * 0, 91 (1, 2, 3) * 1, 92 (1, 2, 3) * 2, 93 (1, 2, 3) * 3, 94 (1, 2, 3) * 2, 95 (1, 2, 3) * n, 96 ((1, 2, 3) * n, (1, 2, 3), (1, 2, 3) * n), 97 ) 98 99 100@cython.test_assert_path_exists("//TupleNode", 101 "//TupleNode[@is_literal = true]") 102@cython.test_fail_if_path_exists("//TupleNode[@is_literal = false]") 103def return_constant_tuple_strings(): 104 """ 105 >>> return_constant_tuple_strings() 106 ('tuple_1', 'bc', 'tuple_2') 107 """ 108 return ('tuple_1', 'bc', 'tuple_2') 109 110@cython.test_assert_path_exists("//TupleNode", 111 "//TupleNode[@is_literal = true]") 112@cython.test_fail_if_path_exists("//TupleNode[@is_literal = false]") 113def return_constant_tuples_string_types(): 114 """ 115 >>> a,b,c = return_constant_tuples_string_types() 116 >>> a is b 117 False 118 >>> a is c 119 False 120 >>> b is c 121 False 122 """ 123 return ('a', 'bc'), (u'a', u'bc'), (b'a', b'bc') 124 125@cython.test_assert_path_exists("//ReturnStatNode//TupleNode", 126 "//ReturnStatNode//TupleNode[@is_literal = false]") 127@cython.test_fail_if_path_exists("//ReturnStatNode//TupleNode[@is_literal = true]") 128def return_nonconstant_tuple(): 129 """ 130 >>> return_nonconstant_tuple() 131 ('a', 1, 'd') 132 """ 133 a = eval("1") 134 return ('a', a, 'd') 135 136 137def constant_types_comparing_equal(): 138 """ 139 >>> constant_types_comparing_equal() 140 ((False, False), (0, 0), (0.0, 0.0), (0, False), (False, 0.0), (0, 0.0)) 141 """ 142 bool_tuple= (False, False) 143 int_tuple = (0, 0) 144 float_tuple = (0.0, 0.0) 145 int_bool = (0, False) 146 bool_float = (False, 0.0) 147 int_float = (0, 0.0) 148 149 assert bool_tuple is (False, False) 150 assert int_tuple is (0, 0) 151 assert bool_tuple == int_tuple 152 assert bool_tuple is not int_tuple 153 assert float_tuple is (0., 0.) 154 assert float_tuple == int_tuple 155 assert float_tuple is not int_tuple 156 assert int_bool is (0, False) 157 assert int_bool == bool_tuple 158 assert int_bool is not bool_tuple 159 assert int_bool is not int_tuple 160 assert bool_float is (False, 0.) 161 assert bool_float == bool_tuple 162 assert bool_float is not bool_tuple 163 assert bool_float is not float_tuple 164 assert int_float is (0, 0.) 165 assert int_float == int_tuple 166 assert int_float is not int_tuple 167 assert int_float is not float_tuple 168 169 return bool_tuple, int_tuple, float_tuple, int_bool, bool_float, int_float 170