irbuild-int.test 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. [case testIntNeq]
  2. def f(x: int, y: int) -> bool:
  3. return x != y
  4. [out]
  5. def f(x, y):
  6. x, y :: int
  7. r0 :: native_int
  8. r1, r2 :: bit
  9. r3 :: bool
  10. r4, r5 :: bit
  11. L0:
  12. r0 = x & 1
  13. r1 = r0 == 0
  14. if r1 goto L1 else goto L2 :: bool
  15. L1:
  16. r2 = x != y
  17. r3 = r2
  18. goto L3
  19. L2:
  20. r4 = CPyTagged_IsEq_(x, y)
  21. r5 = r4 ^ 1
  22. r3 = r5
  23. L3:
  24. return r3
  25. [case testShortIntComparisons]
  26. def f(x: int) -> int:
  27. if x == 3:
  28. return 1
  29. elif x != 4:
  30. return 2
  31. elif 5 == x:
  32. return 3
  33. elif 6 != x:
  34. return 4
  35. elif x < 4:
  36. return 5
  37. return 6
  38. [out]
  39. def f(x):
  40. x :: int
  41. r0, r1, r2, r3 :: bit
  42. r4 :: native_int
  43. r5, r6, r7 :: bit
  44. L0:
  45. r0 = x == 6
  46. if r0 goto L1 else goto L2 :: bool
  47. L1:
  48. return 2
  49. L2:
  50. r1 = x != 8
  51. if r1 goto L3 else goto L4 :: bool
  52. L3:
  53. return 4
  54. L4:
  55. r2 = 10 == x
  56. if r2 goto L5 else goto L6 :: bool
  57. L5:
  58. return 6
  59. L6:
  60. r3 = 12 != x
  61. if r3 goto L7 else goto L8 :: bool
  62. L7:
  63. return 8
  64. L8:
  65. r4 = x & 1
  66. r5 = r4 != 0
  67. if r5 goto L9 else goto L10 :: bool
  68. L9:
  69. r6 = CPyTagged_IsLt_(x, 8)
  70. if r6 goto L11 else goto L12 :: bool
  71. L10:
  72. r7 = x < 8 :: signed
  73. if r7 goto L11 else goto L12 :: bool
  74. L11:
  75. return 10
  76. L12:
  77. L13:
  78. L14:
  79. L15:
  80. L16:
  81. return 12
  82. [case testIntMin]
  83. def f(x: int, y: int) -> int:
  84. return min(x, y)
  85. [out]
  86. def f(x, y):
  87. x, y :: int
  88. r0 :: native_int
  89. r1 :: bit
  90. r2 :: native_int
  91. r3, r4, r5 :: bit
  92. r6 :: bool
  93. r7 :: bit
  94. r8 :: int
  95. L0:
  96. r0 = y & 1
  97. r1 = r0 == 0
  98. r2 = x & 1
  99. r3 = r2 == 0
  100. r4 = r1 & r3
  101. if r4 goto L1 else goto L2 :: bool
  102. L1:
  103. r5 = y < x :: signed
  104. r6 = r5
  105. goto L3
  106. L2:
  107. r7 = CPyTagged_IsLt_(y, x)
  108. r6 = r7
  109. L3:
  110. if r6 goto L4 else goto L5 :: bool
  111. L4:
  112. r8 = y
  113. goto L6
  114. L5:
  115. r8 = x
  116. L6:
  117. return r8
  118. [case testIntFloorDivideByPowerOfTwo]
  119. def divby1(x: int) -> int:
  120. return x // 1
  121. def divby2(x: int) -> int:
  122. return x // 2
  123. def divby3(x: int) -> int:
  124. return x // 3
  125. def divby4(x: int) -> int:
  126. return x // 4
  127. def divby8(x: int) -> int:
  128. return x // 8
  129. [out]
  130. def divby1(x):
  131. x, r0 :: int
  132. L0:
  133. r0 = CPyTagged_FloorDivide(x, 2)
  134. return r0
  135. def divby2(x):
  136. x, r0 :: int
  137. L0:
  138. r0 = CPyTagged_Rshift(x, 2)
  139. return r0
  140. def divby3(x):
  141. x, r0 :: int
  142. L0:
  143. r0 = CPyTagged_FloorDivide(x, 6)
  144. return r0
  145. def divby4(x):
  146. x, r0 :: int
  147. L0:
  148. r0 = CPyTagged_Rshift(x, 4)
  149. return r0
  150. def divby8(x):
  151. x, r0 :: int
  152. L0:
  153. r0 = CPyTagged_Rshift(x, 6)
  154. return r0
  155. [case testFinalConstantFolding]
  156. from typing_extensions import Final
  157. X: Final = -1
  158. Y: Final = -(1 + 3*2)
  159. Z: Final = Y + 1
  160. class C:
  161. A: Final = 1
  162. B: Final = -1
  163. def f1() -> int:
  164. return X
  165. def f2() -> int:
  166. return X + Y
  167. def f3() -> int:
  168. return Z
  169. def f4() -> int:
  170. return C.A
  171. def f5() -> int:
  172. return C.B
  173. [out]
  174. def C.__mypyc_defaults_setup(__mypyc_self__):
  175. __mypyc_self__ :: __main__.C
  176. L0:
  177. __mypyc_self__.A = 2
  178. __mypyc_self__.B = -2
  179. return 1
  180. def f1():
  181. L0:
  182. return -2
  183. def f2():
  184. L0:
  185. return -16
  186. def f3():
  187. L0:
  188. return -12
  189. def f4():
  190. L0:
  191. return 2
  192. def f5():
  193. L0:
  194. return -2
  195. [case testConvertIntegralToInt]
  196. def bool_to_int(b: bool) -> int:
  197. return int(b)
  198. def int_to_int(n: int) -> int:
  199. return int(n)
  200. [out]
  201. def bool_to_int(b):
  202. b, r0 :: bool
  203. r1 :: int
  204. L0:
  205. r0 = b << 1
  206. r1 = extend r0: builtins.bool to builtins.int
  207. return r1
  208. def int_to_int(n):
  209. n :: int
  210. L0:
  211. return n
  212. [case testIntUnaryPlus]
  213. def unary_plus(n: int) -> int:
  214. x = +n
  215. return x
  216. [out]
  217. def unary_plus(n):
  218. n, x :: int
  219. L0:
  220. x = n
  221. return x