irbuild-bytes.test 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. [case testBytesBasics]
  2. def f(num: int, l: list, d: dict, s: str) -> None:
  3. b1 = bytes()
  4. b2 = bytes(num)
  5. b3 = bytes(l)
  6. b4 = bytes(d)
  7. b5 = bytes(s)
  8. [out]
  9. def f(num, l, d, s):
  10. num :: int
  11. l :: list
  12. d :: dict
  13. s :: str
  14. r0, r1 :: object
  15. r2, b1 :: bytes
  16. r3, r4, r5 :: object
  17. r6, b2, r7, b3, r8, b4, r9, b5 :: bytes
  18. L0:
  19. r0 = load_address PyBytes_Type
  20. r1 = PyObject_CallFunctionObjArgs(r0, 0)
  21. r2 = cast(bytes, r1)
  22. b1 = r2
  23. r3 = load_address PyBytes_Type
  24. r4 = box(int, num)
  25. r5 = PyObject_CallFunctionObjArgs(r3, r4, 0)
  26. r6 = cast(bytes, r5)
  27. b2 = r6
  28. r7 = PyBytes_FromObject(l)
  29. b3 = r7
  30. r8 = PyBytes_FromObject(d)
  31. b4 = r8
  32. r9 = PyBytes_FromObject(s)
  33. b5 = r9
  34. return 1
  35. [case testBytearrayBasics]
  36. def f(s: str, num: int) -> None:
  37. a = bytearray()
  38. b = bytearray(s)
  39. c = bytearray(num)
  40. [out]
  41. def f(s, num):
  42. s :: str
  43. num :: int
  44. r0 :: object
  45. r1 :: str
  46. r2, r3, a :: object
  47. r4 :: bytes
  48. b, r5 :: object
  49. r6 :: bytes
  50. c :: object
  51. L0:
  52. r0 = builtins :: module
  53. r1 = 'bytearray'
  54. r2 = CPyObject_GetAttr(r0, r1)
  55. r3 = PyObject_CallFunctionObjArgs(r2, 0)
  56. a = r3
  57. r4 = PyByteArray_FromObject(s)
  58. b = r4
  59. r5 = box(int, num)
  60. r6 = PyByteArray_FromObject(r5)
  61. c = r6
  62. return 1
  63. [case testBytesEquality]
  64. def eq(x: bytes, y: bytes) -> bool:
  65. return x == y
  66. def neq(x: bytes, y: bytes) -> bool:
  67. return x != y
  68. [out]
  69. def eq(x, y):
  70. x, y :: bytes
  71. r0 :: i32
  72. r1, r2 :: bit
  73. L0:
  74. r0 = CPyBytes_Compare(x, y)
  75. r1 = r0 >= 0 :: signed
  76. r2 = r0 == 1
  77. return r2
  78. def neq(x, y):
  79. x, y :: bytes
  80. r0 :: i32
  81. r1, r2 :: bit
  82. L0:
  83. r0 = CPyBytes_Compare(x, y)
  84. r1 = r0 >= 0 :: signed
  85. r2 = r0 != 1
  86. return r2
  87. [case testBytesSlicing]
  88. def f(a: bytes, start: int, end: int) -> bytes:
  89. return a[start:end]
  90. [out]
  91. def f(a, start, end):
  92. a :: bytes
  93. start, end :: int
  94. r0 :: bytes
  95. L0:
  96. r0 = CPyBytes_GetSlice(a, start, end)
  97. return r0
  98. [case testBytesIndex]
  99. def f(a: bytes, i: int) -> int:
  100. return a[i]
  101. [out]
  102. def f(a, i):
  103. a :: bytes
  104. i, r0 :: int
  105. L0:
  106. r0 = CPyBytes_GetItem(a, i)
  107. return r0
  108. [case testBytesConcat]
  109. def f(a: bytes, b: bytes) -> bytes:
  110. return a + b
  111. [out]
  112. def f(a, b):
  113. a, b, r0 :: bytes
  114. L0:
  115. r0 = CPyBytes_Concat(a, b)
  116. return r0
  117. [case testBytesJoin]
  118. from typing import List
  119. def f(b: List[bytes]) -> bytes:
  120. return b" ".join(b)
  121. [out]
  122. def f(b):
  123. b :: list
  124. r0, r1 :: bytes
  125. L0:
  126. r0 = b' '
  127. r1 = CPyBytes_Join(r0, b)
  128. return r1
  129. [case testBytesLen]
  130. def f(b: bytes) -> int:
  131. return len(b)
  132. [out]
  133. def f(b):
  134. b :: bytes
  135. r0 :: ptr
  136. r1 :: native_int
  137. r2 :: short_int
  138. L0:
  139. r0 = get_element_ptr b ob_size :: PyVarObject
  140. r1 = load_mem r0 :: native_int*
  141. keep_alive b
  142. r2 = r1 << 1
  143. return r2
  144. [case testBytesFormatting]
  145. def f(var: bytes, num: int) -> None:
  146. b1 = b'aaaa%bbbbb%s' % (var, var)
  147. b2 = b'aaaa%bbbbb%s%d' % (var, var, num)
  148. b3 = b'%b' % var
  149. b4 = b'%ssss' % var
  150. [typing fixtures/typing-full.pyi]
  151. [out]
  152. def f(var, num):
  153. var :: bytes
  154. num :: int
  155. r0, r1, r2, b1, r3 :: bytes
  156. r4 :: tuple[bytes, bytes, int]
  157. r5, r6 :: object
  158. r7, b2, r8, b3, r9, r10, b4 :: bytes
  159. L0:
  160. r0 = b'aaaa'
  161. r1 = b'bbbb'
  162. r2 = CPyBytes_Build(4, r0, var, r1, var)
  163. b1 = r2
  164. r3 = b'aaaa%bbbbb%s%d'
  165. r4 = (var, var, num)
  166. r5 = box(tuple[bytes, bytes, int], r4)
  167. r6 = PyNumber_Remainder(r3, r5)
  168. r7 = cast(bytes, r6)
  169. b2 = r7
  170. r8 = CPyBytes_Build(1, var)
  171. b3 = r8
  172. r9 = b'sss'
  173. r10 = CPyBytes_Build(2, var, r9)
  174. b4 = r10
  175. return 1