irbuild-set.test 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. [case testNewSet]
  2. from typing import Set
  3. def f() -> Set[int]:
  4. return {1, 2, 3}
  5. [out]
  6. def f():
  7. r0 :: set
  8. r1 :: object
  9. r2 :: i32
  10. r3 :: bit
  11. r4 :: object
  12. r5 :: i32
  13. r6 :: bit
  14. r7 :: object
  15. r8 :: i32
  16. r9 :: bit
  17. L0:
  18. r0 = PySet_New(0)
  19. r1 = object 1
  20. r2 = PySet_Add(r0, r1)
  21. r3 = r2 >= 0 :: signed
  22. r4 = object 2
  23. r5 = PySet_Add(r0, r4)
  24. r6 = r5 >= 0 :: signed
  25. r7 = object 3
  26. r8 = PySet_Add(r0, r7)
  27. r9 = r8 >= 0 :: signed
  28. return r0
  29. [case testNewEmptySet]
  30. from typing import Set
  31. def f() -> Set[int]:
  32. return set()
  33. [out]
  34. def f():
  35. r0 :: set
  36. L0:
  37. r0 = PySet_New(0)
  38. return r0
  39. [case testNewSetFromIterable]
  40. from typing import Set, List
  41. def f(l: List[T]) -> Set[T]:
  42. return set(l)
  43. [out]
  44. def f(l):
  45. l :: list
  46. r0 :: set
  47. L0:
  48. r0 = PySet_New(l)
  49. return r0
  50. [case testNewSetFromIterable2]
  51. def f(x: int) -> int:
  52. return x
  53. def test1() -> None:
  54. tmp_list = [1, 3, 5]
  55. a = set(f(x) for x in tmp_list)
  56. def test2() -> None:
  57. tmp_tuple = (1, 3, 5)
  58. b = set(f(x) for x in tmp_tuple)
  59. def test3() -> None:
  60. tmp_dict = {1: '1', 3: '3', 5: '5'}
  61. c = set(f(x) for x in tmp_dict)
  62. def test4() -> None:
  63. d = set(f(x) for x in range(1, 6, 2))
  64. def test5() -> None:
  65. e = set((f(x) for x in range(1, 6, 2)))
  66. [out]
  67. def f(x):
  68. x :: int
  69. L0:
  70. return x
  71. def test1():
  72. r0 :: list
  73. r1, r2, r3 :: object
  74. r4, r5, r6, r7 :: ptr
  75. tmp_list :: list
  76. r8 :: set
  77. r9 :: short_int
  78. r10 :: ptr
  79. r11 :: native_int
  80. r12 :: short_int
  81. r13 :: bit
  82. r14 :: object
  83. r15, x, r16 :: int
  84. r17 :: object
  85. r18 :: i32
  86. r19 :: bit
  87. r20 :: short_int
  88. a :: set
  89. L0:
  90. r0 = PyList_New(3)
  91. r1 = object 1
  92. r2 = object 3
  93. r3 = object 5
  94. r4 = get_element_ptr r0 ob_item :: PyListObject
  95. r5 = load_mem r4 :: ptr*
  96. set_mem r5, r1 :: builtins.object*
  97. r6 = r5 + WORD_SIZE*1
  98. set_mem r6, r2 :: builtins.object*
  99. r7 = r5 + WORD_SIZE*2
  100. set_mem r7, r3 :: builtins.object*
  101. keep_alive r0
  102. tmp_list = r0
  103. r8 = PySet_New(0)
  104. r9 = 0
  105. L1:
  106. r10 = get_element_ptr tmp_list ob_size :: PyVarObject
  107. r11 = load_mem r10 :: native_int*
  108. keep_alive tmp_list
  109. r12 = r11 << 1
  110. r13 = r9 < r12 :: signed
  111. if r13 goto L2 else goto L4 :: bool
  112. L2:
  113. r14 = CPyList_GetItemUnsafe(tmp_list, r9)
  114. r15 = unbox(int, r14)
  115. x = r15
  116. r16 = f(x)
  117. r17 = box(int, r16)
  118. r18 = PySet_Add(r8, r17)
  119. r19 = r18 >= 0 :: signed
  120. L3:
  121. r20 = r9 + 2
  122. r9 = r20
  123. goto L1
  124. L4:
  125. a = r8
  126. return 1
  127. def test2():
  128. r0, tmp_tuple :: tuple[int, int, int]
  129. r1 :: set
  130. r2, r3, r4 :: object
  131. r5, x, r6 :: int
  132. r7 :: object
  133. r8 :: i32
  134. r9, r10 :: bit
  135. b :: set
  136. L0:
  137. r0 = (2, 6, 10)
  138. tmp_tuple = r0
  139. r1 = PySet_New(0)
  140. r2 = box(tuple[int, int, int], tmp_tuple)
  141. r3 = PyObject_GetIter(r2)
  142. L1:
  143. r4 = PyIter_Next(r3)
  144. if is_error(r4) goto L4 else goto L2
  145. L2:
  146. r5 = unbox(int, r4)
  147. x = r5
  148. r6 = f(x)
  149. r7 = box(int, r6)
  150. r8 = PySet_Add(r1, r7)
  151. r9 = r8 >= 0 :: signed
  152. L3:
  153. goto L1
  154. L4:
  155. r10 = CPy_NoErrOccured()
  156. L5:
  157. b = r1
  158. return 1
  159. def test3():
  160. r0, r1, r2 :: str
  161. r3, r4, r5 :: object
  162. r6, tmp_dict :: dict
  163. r7 :: set
  164. r8 :: short_int
  165. r9 :: native_int
  166. r10 :: short_int
  167. r11 :: object
  168. r12 :: tuple[bool, short_int, object]
  169. r13 :: short_int
  170. r14 :: bool
  171. r15 :: object
  172. r16, x, r17 :: int
  173. r18 :: object
  174. r19 :: i32
  175. r20, r21, r22 :: bit
  176. c :: set
  177. L0:
  178. r0 = '1'
  179. r1 = '3'
  180. r2 = '5'
  181. r3 = object 1
  182. r4 = object 3
  183. r5 = object 5
  184. r6 = CPyDict_Build(3, r3, r0, r4, r1, r5, r2)
  185. tmp_dict = r6
  186. r7 = PySet_New(0)
  187. r8 = 0
  188. r9 = PyDict_Size(tmp_dict)
  189. r10 = r9 << 1
  190. r11 = CPyDict_GetKeysIter(tmp_dict)
  191. L1:
  192. r12 = CPyDict_NextKey(r11, r8)
  193. r13 = r12[1]
  194. r8 = r13
  195. r14 = r12[0]
  196. if r14 goto L2 else goto L4 :: bool
  197. L2:
  198. r15 = r12[2]
  199. r16 = unbox(int, r15)
  200. x = r16
  201. r17 = f(x)
  202. r18 = box(int, r17)
  203. r19 = PySet_Add(r7, r18)
  204. r20 = r19 >= 0 :: signed
  205. L3:
  206. r21 = CPyDict_CheckSize(tmp_dict, r10)
  207. goto L1
  208. L4:
  209. r22 = CPy_NoErrOccured()
  210. L5:
  211. c = r7
  212. return 1
  213. def test4():
  214. r0 :: set
  215. r1 :: short_int
  216. x :: int
  217. r2 :: bit
  218. r3 :: int
  219. r4 :: object
  220. r5 :: i32
  221. r6 :: bit
  222. r7 :: short_int
  223. d :: set
  224. L0:
  225. r0 = PySet_New(0)
  226. r1 = 2
  227. x = r1
  228. L1:
  229. r2 = r1 < 12 :: signed
  230. if r2 goto L2 else goto L4 :: bool
  231. L2:
  232. r3 = f(x)
  233. r4 = box(int, r3)
  234. r5 = PySet_Add(r0, r4)
  235. r6 = r5 >= 0 :: signed
  236. L3:
  237. r7 = r1 + 4
  238. r1 = r7
  239. x = r7
  240. goto L1
  241. L4:
  242. d = r0
  243. return 1
  244. def test5():
  245. r0 :: set
  246. r1 :: short_int
  247. x :: int
  248. r2 :: bit
  249. r3 :: int
  250. r4 :: object
  251. r5 :: i32
  252. r6 :: bit
  253. r7 :: short_int
  254. e :: set
  255. L0:
  256. r0 = PySet_New(0)
  257. r1 = 2
  258. x = r1
  259. L1:
  260. r2 = r1 < 12 :: signed
  261. if r2 goto L2 else goto L4 :: bool
  262. L2:
  263. r3 = f(x)
  264. r4 = box(int, r3)
  265. r5 = PySet_Add(r0, r4)
  266. r6 = r5 >= 0 :: signed
  267. L3:
  268. r7 = r1 + 4
  269. r1 = r7
  270. x = r7
  271. goto L1
  272. L4:
  273. e = r0
  274. return 1
  275. [case testNewSetFromIterable3]
  276. def f1(x: int) -> int:
  277. return x
  278. def f2(x: int) -> int:
  279. return x * 10
  280. def f3(x: int) -> int:
  281. return x + 1
  282. def test() -> None:
  283. tmp_list = [1, 2, 3, 4, 5]
  284. a = set(f3(x) for x in (f2(y) for y in (f1(z) for z in tmp_list if z < 4)))
  285. [out]
  286. def f1(x):
  287. x :: int
  288. L0:
  289. return x
  290. def f2(x):
  291. x, r0 :: int
  292. L0:
  293. r0 = CPyTagged_Multiply(x, 20)
  294. return r0
  295. def f3(x):
  296. x, r0 :: int
  297. L0:
  298. r0 = CPyTagged_Add(x, 2)
  299. return r0
  300. def test():
  301. r0 :: list
  302. r1, r2, r3, r4, r5 :: object
  303. r6, r7, r8, r9, r10, r11 :: ptr
  304. tmp_list :: list
  305. r12 :: set
  306. r13, r14 :: list
  307. r15 :: short_int
  308. r16 :: ptr
  309. r17 :: native_int
  310. r18 :: short_int
  311. r19 :: bit
  312. r20 :: object
  313. r21, z :: int
  314. r22 :: native_int
  315. r23 :: bit
  316. r24 :: native_int
  317. r25, r26, r27 :: bit
  318. r28 :: bool
  319. r29 :: bit
  320. r30 :: int
  321. r31 :: object
  322. r32 :: i32
  323. r33 :: bit
  324. r34 :: short_int
  325. r35, r36, r37 :: object
  326. r38, y, r39 :: int
  327. r40 :: object
  328. r41 :: i32
  329. r42, r43 :: bit
  330. r44, r45, r46 :: object
  331. r47, x, r48 :: int
  332. r49 :: object
  333. r50 :: i32
  334. r51, r52 :: bit
  335. a :: set
  336. L0:
  337. r0 = PyList_New(5)
  338. r1 = object 1
  339. r2 = object 2
  340. r3 = object 3
  341. r4 = object 4
  342. r5 = object 5
  343. r6 = get_element_ptr r0 ob_item :: PyListObject
  344. r7 = load_mem r6 :: ptr*
  345. set_mem r7, r1 :: builtins.object*
  346. r8 = r7 + WORD_SIZE*1
  347. set_mem r8, r2 :: builtins.object*
  348. r9 = r7 + WORD_SIZE*2
  349. set_mem r9, r3 :: builtins.object*
  350. r10 = r7 + WORD_SIZE*3
  351. set_mem r10, r4 :: builtins.object*
  352. r11 = r7 + WORD_SIZE*4
  353. set_mem r11, r5 :: builtins.object*
  354. keep_alive r0
  355. tmp_list = r0
  356. r12 = PySet_New(0)
  357. r13 = PyList_New(0)
  358. r14 = PyList_New(0)
  359. r15 = 0
  360. L1:
  361. r16 = get_element_ptr tmp_list ob_size :: PyVarObject
  362. r17 = load_mem r16 :: native_int*
  363. keep_alive tmp_list
  364. r18 = r17 << 1
  365. r19 = r15 < r18 :: signed
  366. if r19 goto L2 else goto L9 :: bool
  367. L2:
  368. r20 = CPyList_GetItemUnsafe(tmp_list, r15)
  369. r21 = unbox(int, r20)
  370. z = r21
  371. r22 = z & 1
  372. r23 = r22 == 0
  373. r24 = 8 & 1
  374. r25 = r24 == 0
  375. r26 = r23 & r25
  376. if r26 goto L3 else goto L4 :: bool
  377. L3:
  378. r27 = z < 8 :: signed
  379. r28 = r27
  380. goto L5
  381. L4:
  382. r29 = CPyTagged_IsLt_(z, 8)
  383. r28 = r29
  384. L5:
  385. if r28 goto L7 else goto L6 :: bool
  386. L6:
  387. goto L8
  388. L7:
  389. r30 = f1(z)
  390. r31 = box(int, r30)
  391. r32 = PyList_Append(r14, r31)
  392. r33 = r32 >= 0 :: signed
  393. L8:
  394. r34 = r15 + 2
  395. r15 = r34
  396. goto L1
  397. L9:
  398. r35 = PyObject_GetIter(r14)
  399. r36 = PyObject_GetIter(r35)
  400. L10:
  401. r37 = PyIter_Next(r36)
  402. if is_error(r37) goto L13 else goto L11
  403. L11:
  404. r38 = unbox(int, r37)
  405. y = r38
  406. r39 = f2(y)
  407. r40 = box(int, r39)
  408. r41 = PyList_Append(r13, r40)
  409. r42 = r41 >= 0 :: signed
  410. L12:
  411. goto L10
  412. L13:
  413. r43 = CPy_NoErrOccured()
  414. L14:
  415. r44 = PyObject_GetIter(r13)
  416. r45 = PyObject_GetIter(r44)
  417. L15:
  418. r46 = PyIter_Next(r45)
  419. if is_error(r46) goto L18 else goto L16
  420. L16:
  421. r47 = unbox(int, r46)
  422. x = r47
  423. r48 = f3(x)
  424. r49 = box(int, r48)
  425. r50 = PySet_Add(r12, r49)
  426. r51 = r50 >= 0 :: signed
  427. L17:
  428. goto L15
  429. L18:
  430. r52 = CPy_NoErrOccured()
  431. L19:
  432. a = r12
  433. return 1
  434. [case testSetSize]
  435. from typing import Set
  436. def f() -> int:
  437. return len({1, 2, 3})
  438. [out]
  439. def f():
  440. r0 :: set
  441. r1 :: object
  442. r2 :: i32
  443. r3 :: bit
  444. r4 :: object
  445. r5 :: i32
  446. r6 :: bit
  447. r7 :: object
  448. r8 :: i32
  449. r9 :: bit
  450. r10 :: ptr
  451. r11 :: native_int
  452. r12 :: short_int
  453. L0:
  454. r0 = PySet_New(0)
  455. r1 = object 1
  456. r2 = PySet_Add(r0, r1)
  457. r3 = r2 >= 0 :: signed
  458. r4 = object 2
  459. r5 = PySet_Add(r0, r4)
  460. r6 = r5 >= 0 :: signed
  461. r7 = object 3
  462. r8 = PySet_Add(r0, r7)
  463. r9 = r8 >= 0 :: signed
  464. r10 = get_element_ptr r0 used :: PySetObject
  465. r11 = load_mem r10 :: native_int*
  466. keep_alive r0
  467. r12 = r11 << 1
  468. return r12
  469. [case testSetContains]
  470. from typing import Set
  471. def f() -> bool:
  472. x = {3, 4}
  473. return (5 in x)
  474. [out]
  475. def f():
  476. r0 :: set
  477. r1 :: object
  478. r2 :: i32
  479. r3 :: bit
  480. r4 :: object
  481. r5 :: i32
  482. r6 :: bit
  483. x :: set
  484. r7 :: object
  485. r8 :: i32
  486. r9 :: bit
  487. r10 :: bool
  488. L0:
  489. r0 = PySet_New(0)
  490. r1 = object 3
  491. r2 = PySet_Add(r0, r1)
  492. r3 = r2 >= 0 :: signed
  493. r4 = object 4
  494. r5 = PySet_Add(r0, r4)
  495. r6 = r5 >= 0 :: signed
  496. x = r0
  497. r7 = object 5
  498. r8 = PySet_Contains(x, r7)
  499. r9 = r8 >= 0 :: signed
  500. r10 = truncate r8: i32 to builtins.bool
  501. return r10
  502. [case testSetRemove]
  503. from typing import Set
  504. def f() -> Set[int]:
  505. x = set() # type: Set[int]
  506. x.remove(1)
  507. return x
  508. [out]
  509. def f():
  510. r0, x :: set
  511. r1 :: object
  512. r2 :: bit
  513. L0:
  514. r0 = PySet_New(0)
  515. x = r0
  516. r1 = object 1
  517. r2 = CPySet_Remove(x, r1)
  518. return x
  519. [case testSetDiscard]
  520. from typing import Set
  521. def f() -> Set[int]:
  522. x = set() # type: Set[int]
  523. x.discard(1)
  524. return x
  525. [out]
  526. def f():
  527. r0, x :: set
  528. r1 :: object
  529. r2 :: i32
  530. r3 :: bit
  531. L0:
  532. r0 = PySet_New(0)
  533. x = r0
  534. r1 = object 1
  535. r2 = PySet_Discard(x, r1)
  536. r3 = r2 >= 0 :: signed
  537. return x
  538. [case testSetAdd]
  539. from typing import Set
  540. def f() -> Set[int]:
  541. x = set() # type: Set[int]
  542. x.add(1)
  543. return x
  544. [out]
  545. def f():
  546. r0, x :: set
  547. r1 :: object
  548. r2 :: i32
  549. r3 :: bit
  550. L0:
  551. r0 = PySet_New(0)
  552. x = r0
  553. r1 = object 1
  554. r2 = PySet_Add(x, r1)
  555. r3 = r2 >= 0 :: signed
  556. return x
  557. [case testSetClear]
  558. from typing import Set
  559. def f() -> Set[int]:
  560. x = set() # type: Set[int]
  561. x.clear()
  562. return x
  563. [out]
  564. def f():
  565. r0, x :: set
  566. r1 :: i32
  567. r2 :: bit
  568. L0:
  569. r0 = PySet_New(0)
  570. x = r0
  571. r1 = PySet_Clear(x)
  572. r2 = r1 >= 0 :: signed
  573. return x
  574. [case testSetPop]
  575. from typing import Set
  576. def f(s : Set[int]) -> int:
  577. return s.pop()
  578. [out]
  579. def f(s):
  580. s :: set
  581. r0 :: object
  582. r1 :: int
  583. L0:
  584. r0 = PySet_Pop(s)
  585. r1 = unbox(int, r0)
  586. return r1
  587. [case testSetUpdate]
  588. from typing import Set, List
  589. def update(s: Set[int], x: List[int]) -> None:
  590. s.update(x)
  591. [out]
  592. def update(s, x):
  593. s :: set
  594. x :: list
  595. r0 :: i32
  596. r1 :: bit
  597. L0:
  598. r0 = _PySet_Update(s, x)
  599. r1 = r0 >= 0 :: signed
  600. return 1
  601. [case testSetDisplay]
  602. from typing import Set
  603. def f(x: Set[int], y: Set[int]) -> Set[int]:
  604. return {1, 2, *x, *y, 3}
  605. [out]
  606. def f(x, y):
  607. x, y, r0 :: set
  608. r1 :: object
  609. r2 :: i32
  610. r3 :: bit
  611. r4 :: object
  612. r5 :: i32
  613. r6 :: bit
  614. r7 :: i32
  615. r8 :: bit
  616. r9 :: i32
  617. r10 :: bit
  618. r11 :: object
  619. r12 :: i32
  620. r13 :: bit
  621. L0:
  622. r0 = PySet_New(0)
  623. r1 = object 1
  624. r2 = PySet_Add(r0, r1)
  625. r3 = r2 >= 0 :: signed
  626. r4 = object 2
  627. r5 = PySet_Add(r0, r4)
  628. r6 = r5 >= 0 :: signed
  629. r7 = _PySet_Update(r0, x)
  630. r8 = r7 >= 0 :: signed
  631. r9 = _PySet_Update(r0, y)
  632. r10 = r9 >= 0 :: signed
  633. r11 = object 3
  634. r12 = PySet_Add(r0, r11)
  635. r13 = r12 >= 0 :: signed
  636. return r0
  637. [case testOperatorInSetLiteral]
  638. from typing_extensions import Final
  639. CONST: Final = "daylily"
  640. non_const = 10
  641. def precomputed(i: object) -> bool:
  642. return i in {1, 2.0, 1 +2, 4j, "foo", b"bar", CONST, (None, (27,)), (), False}
  643. def not_precomputed_non_final_name(i: int) -> bool:
  644. return i in {non_const}
  645. def not_precomputed_nested_set(i: int) -> bool:
  646. return i in {frozenset({1}), 2}
  647. [out]
  648. def precomputed(i):
  649. i :: object
  650. r0 :: set
  651. r1 :: i32
  652. r2 :: bit
  653. r3 :: bool
  654. L0:
  655. r0 = frozenset({(), (None, (27,)), 1, 2.0, 3, 4j, False, b'bar', 'daylily', 'foo'})
  656. r1 = PySet_Contains(r0, i)
  657. r2 = r1 >= 0 :: signed
  658. r3 = truncate r1: i32 to builtins.bool
  659. return r3
  660. def not_precomputed_non_final_name(i):
  661. i :: int
  662. r0 :: dict
  663. r1 :: str
  664. r2 :: object
  665. r3 :: int
  666. r4 :: set
  667. r5 :: object
  668. r6 :: i32
  669. r7 :: bit
  670. r8 :: object
  671. r9 :: i32
  672. r10 :: bit
  673. r11 :: bool
  674. L0:
  675. r0 = __main__.globals :: static
  676. r1 = 'non_const'
  677. r2 = CPyDict_GetItem(r0, r1)
  678. r3 = unbox(int, r2)
  679. r4 = PySet_New(0)
  680. r5 = box(int, r3)
  681. r6 = PySet_Add(r4, r5)
  682. r7 = r6 >= 0 :: signed
  683. r8 = box(int, i)
  684. r9 = PySet_Contains(r4, r8)
  685. r10 = r9 >= 0 :: signed
  686. r11 = truncate r9: i32 to builtins.bool
  687. return r11
  688. def not_precomputed_nested_set(i):
  689. i :: int
  690. r0 :: set
  691. r1 :: object
  692. r2 :: i32
  693. r3 :: bit
  694. r4 :: object
  695. r5 :: set
  696. r6 :: i32
  697. r7 :: bit
  698. r8 :: object
  699. r9 :: i32
  700. r10 :: bit
  701. r11 :: object
  702. r12 :: i32
  703. r13 :: bit
  704. r14 :: bool
  705. L0:
  706. r0 = PySet_New(0)
  707. r1 = object 1
  708. r2 = PySet_Add(r0, r1)
  709. r3 = r2 >= 0 :: signed
  710. r4 = PyFrozenSet_New(r0)
  711. r5 = PySet_New(0)
  712. r6 = PySet_Add(r5, r4)
  713. r7 = r6 >= 0 :: signed
  714. r8 = object 2
  715. r9 = PySet_Add(r5, r8)
  716. r10 = r9 >= 0 :: signed
  717. r11 = box(int, i)
  718. r12 = PySet_Contains(r5, r11)
  719. r13 = r12 >= 0 :: signed
  720. r14 = truncate r12: i32 to builtins.bool
  721. return r14
  722. [case testForSetLiteral]
  723. from typing_extensions import Final
  724. CONST: Final = 10
  725. non_const = 20
  726. def precomputed() -> None:
  727. for _ in {"None", "True", "False"}:
  728. pass
  729. def precomputed2() -> None:
  730. for _ in {None, False, 1, 2.0, "4", b"5", (6,), 7j, CONST, CONST + 1}:
  731. pass
  732. def not_precomputed() -> None:
  733. for not_optimized in {non_const}:
  734. pass
  735. [out]
  736. def precomputed():
  737. r0 :: set
  738. r1, r2 :: object
  739. r3 :: str
  740. _ :: object
  741. r4 :: bit
  742. L0:
  743. r0 = frozenset({'False', 'None', 'True'})
  744. r1 = PyObject_GetIter(r0)
  745. L1:
  746. r2 = PyIter_Next(r1)
  747. if is_error(r2) goto L4 else goto L2
  748. L2:
  749. r3 = cast(str, r2)
  750. _ = r3
  751. L3:
  752. goto L1
  753. L4:
  754. r4 = CPy_NoErrOccured()
  755. L5:
  756. return 1
  757. def precomputed2():
  758. r0 :: set
  759. r1, r2, _ :: object
  760. r3 :: bit
  761. L0:
  762. r0 = frozenset({(6,), 1, 10, 11, 2.0, '4', 7j, False, None, b'5'})
  763. r1 = PyObject_GetIter(r0)
  764. L1:
  765. r2 = PyIter_Next(r1)
  766. if is_error(r2) goto L4 else goto L2
  767. L2:
  768. _ = r2
  769. L3:
  770. goto L1
  771. L4:
  772. r3 = CPy_NoErrOccured()
  773. L5:
  774. return 1
  775. def not_precomputed():
  776. r0 :: dict
  777. r1 :: str
  778. r2 :: object
  779. r3 :: int
  780. r4 :: set
  781. r5 :: object
  782. r6 :: i32
  783. r7 :: bit
  784. r8, r9 :: object
  785. r10, not_optimized :: int
  786. r11 :: bit
  787. L0:
  788. r0 = __main__.globals :: static
  789. r1 = 'non_const'
  790. r2 = CPyDict_GetItem(r0, r1)
  791. r3 = unbox(int, r2)
  792. r4 = PySet_New(0)
  793. r5 = box(int, r3)
  794. r6 = PySet_Add(r4, r5)
  795. r7 = r6 >= 0 :: signed
  796. r8 = PyObject_GetIter(r4)
  797. L1:
  798. r9 = PyIter_Next(r8)
  799. if is_error(r9) goto L4 else goto L2
  800. L2:
  801. r10 = unbox(int, r9)
  802. not_optimized = r10
  803. L3:
  804. goto L1
  805. L4:
  806. r11 = CPy_NoErrOccured()
  807. L5:
  808. return 1