redscript-mc 2.4.0 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1502) hide show
  1. package/CHANGELOG.md +9 -5
  2. package/dist/__tests__/cli.test.d.ts +1 -0
  3. package/dist/__tests__/cli.test.js +278 -0
  4. package/dist/__tests__/codegen.test.d.ts +1 -0
  5. package/dist/__tests__/codegen.test.js +152 -0
  6. package/dist/__tests__/compile-all.test.d.ts +10 -0
  7. package/dist/__tests__/compile-all.test.js +108 -0
  8. package/dist/__tests__/dce.test.d.ts +1 -0
  9. package/dist/__tests__/dce.test.js +138 -0
  10. package/dist/__tests__/diagnostics.test.d.ts +4 -0
  11. package/dist/__tests__/diagnostics.test.js +149 -0
  12. package/dist/__tests__/e2e.test.d.ts +6 -0
  13. package/dist/__tests__/e2e.test.js +1847 -0
  14. package/dist/__tests__/entity-types.test.d.ts +1 -0
  15. package/dist/__tests__/entity-types.test.js +203 -0
  16. package/dist/__tests__/formatter.test.d.ts +1 -0
  17. package/dist/__tests__/formatter.test.js +40 -0
  18. package/dist/__tests__/lexer.test.d.ts +1 -0
  19. package/dist/__tests__/lexer.test.js +343 -0
  20. package/dist/__tests__/lowering.test.d.ts +1 -0
  21. package/dist/__tests__/lowering.test.js +1015 -0
  22. package/dist/__tests__/macro.test.d.ts +8 -0
  23. package/dist/__tests__/macro.test.js +305 -0
  24. package/dist/__tests__/mc-integration.test.d.ts +12 -0
  25. package/dist/__tests__/mc-integration.test.js +819 -0
  26. package/dist/__tests__/mc-syntax.test.d.ts +1 -0
  27. package/dist/__tests__/mc-syntax.test.js +124 -0
  28. package/dist/__tests__/nbt.test.d.ts +1 -0
  29. package/dist/__tests__/nbt.test.js +82 -0
  30. package/dist/__tests__/optimizer-advanced.test.d.ts +1 -0
  31. package/dist/__tests__/optimizer-advanced.test.js +124 -0
  32. package/dist/__tests__/optimizer.test.d.ts +1 -0
  33. package/dist/__tests__/optimizer.test.js +149 -0
  34. package/dist/__tests__/parser.test.d.ts +1 -0
  35. package/dist/__tests__/parser.test.js +807 -0
  36. package/dist/__tests__/repl.test.d.ts +1 -0
  37. package/dist/__tests__/repl.test.js +27 -0
  38. package/dist/__tests__/runtime.test.d.ts +1 -0
  39. package/dist/__tests__/runtime.test.js +289 -0
  40. package/dist/__tests__/stdlib-advanced.test.d.ts +4 -0
  41. package/dist/__tests__/stdlib-advanced.test.js +378 -0
  42. package/dist/__tests__/stdlib-bigint.test.d.ts +7 -0
  43. package/dist/__tests__/stdlib-bigint.test.js +428 -0
  44. package/dist/__tests__/stdlib-math.test.d.ts +7 -0
  45. package/dist/__tests__/stdlib-math.test.js +352 -0
  46. package/dist/__tests__/stdlib-vec.test.d.ts +4 -0
  47. package/dist/__tests__/stdlib-vec.test.js +264 -0
  48. package/dist/__tests__/structure-optimizer.test.d.ts +1 -0
  49. package/dist/__tests__/structure-optimizer.test.js +33 -0
  50. package/dist/__tests__/typechecker.test.d.ts +1 -0
  51. package/dist/__tests__/typechecker.test.js +552 -0
  52. package/dist/__tests__/var-allocator.test.d.ts +1 -0
  53. package/dist/__tests__/var-allocator.test.js +69 -0
  54. package/dist/ast/types.d.ts +514 -0
  55. package/dist/ast/types.js +9 -0
  56. package/dist/builtins/metadata.d.ts +36 -0
  57. package/dist/builtins/metadata.js +1014 -0
  58. package/dist/cli.d.ts +11 -0
  59. package/dist/cli.js +0 -0
  60. package/dist/codegen/cmdblock/index.d.ts +26 -0
  61. package/dist/codegen/cmdblock/index.js +45 -0
  62. package/dist/codegen/mcfunction/index.d.ts +40 -0
  63. package/dist/codegen/mcfunction/index.js +606 -0
  64. package/dist/codegen/structure/index.d.ts +24 -0
  65. package/dist/codegen/structure/index.js +279 -0
  66. package/dist/codegen/var-allocator.d.ts +45 -0
  67. package/dist/codegen/var-allocator.js +104 -0
  68. package/dist/compile.d.ts +68 -0
  69. package/dist/data/arena/function/__load.mcfunction +6 -0
  70. package/dist/data/arena/function/__tick.mcfunction +2 -0
  71. package/dist/data/arena/function/announce_leaders/else_1.mcfunction +3 -0
  72. package/dist/data/arena/function/announce_leaders/foreach_0/merge_2.mcfunction +1 -0
  73. package/dist/data/arena/function/announce_leaders/foreach_0/then_0.mcfunction +3 -0
  74. package/dist/data/arena/function/announce_leaders/foreach_0.mcfunction +7 -0
  75. package/dist/data/arena/function/announce_leaders/foreach_1/merge_2.mcfunction +1 -0
  76. package/dist/data/arena/function/announce_leaders/foreach_1/then_0.mcfunction +4 -0
  77. package/dist/data/arena/function/announce_leaders/foreach_1.mcfunction +6 -0
  78. package/dist/data/arena/function/announce_leaders/merge_2.mcfunction +1 -0
  79. package/dist/data/arena/function/announce_leaders/then_0.mcfunction +4 -0
  80. package/dist/data/arena/function/announce_leaders.mcfunction +6 -0
  81. package/dist/data/arena/function/arena_tick/merge_2.mcfunction +1 -0
  82. package/dist/data/arena/function/arena_tick/then_0.mcfunction +4 -0
  83. package/dist/data/arena/function/arena_tick.mcfunction +11 -0
  84. package/dist/data/capture_the_flag/function/add_to_team.mcfunction +5 -0
  85. package/dist/data/capture_the_flag/function/angry_at.mcfunction +1 -0
  86. package/dist/data/capture_the_flag/function/assign_teams.mcfunction +1 -0
  87. package/dist/data/capture_the_flag/function/assign_teams__foreach_t1.mcfunction +8 -0
  88. package/dist/data/capture_the_flag/function/assign_teams__foreach_t1__else_2.mcfunction +8 -0
  89. package/dist/data/capture_the_flag/function/assign_teams__foreach_t1__merge_1.mcfunction +3 -0
  90. package/dist/data/capture_the_flag/function/assign_teams__foreach_t1__then_0.mcfunction +8 -0
  91. package/dist/data/capture_the_flag/function/barrier_wall.mcfunction +1 -0
  92. package/dist/data/capture_the_flag/function/buff_all.mcfunction +22 -0
  93. package/dist/data/capture_the_flag/function/check_flag_capture.mcfunction +2 -0
  94. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t0.mcfunction +8 -0
  95. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t0__merge_1.mcfunction +1 -0
  96. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t0__then_0.mcfunction +7 -0
  97. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t1.mcfunction +8 -0
  98. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t1__merge_1.mcfunction +1 -0
  99. package/dist/data/capture_the_flag/function/check_flag_capture__foreach_t1__then_0.mcfunction +7 -0
  100. package/dist/data/capture_the_flag/function/check_flag_pickup.mcfunction +2 -0
  101. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t0.mcfunction +8 -0
  102. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t0__merge_1.mcfunction +1 -0
  103. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t0__then_0.mcfunction +7 -0
  104. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t1.mcfunction +8 -0
  105. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t1__merge_1.mcfunction +1 -0
  106. package/dist/data/capture_the_flag/function/check_flag_pickup__foreach_t1__then_0.mcfunction +7 -0
  107. package/dist/data/capture_the_flag/function/check_win.mcfunction +4 -0
  108. package/dist/data/capture_the_flag/function/cleanup_teams.mcfunction +8 -0
  109. package/dist/data/capture_the_flag/function/clear_area.mcfunction +1 -0
  110. package/dist/data/capture_the_flag/function/clear_effect.mcfunction +1 -0
  111. package/dist/data/capture_the_flag/function/clear_effects.mcfunction +1 -0
  112. package/dist/data/capture_the_flag/function/clear_inventory.mcfunction +1 -0
  113. package/dist/data/capture_the_flag/function/create_blue_team.mcfunction +10 -0
  114. package/dist/data/capture_the_flag/function/create_green_team.mcfunction +10 -0
  115. package/dist/data/capture_the_flag/function/create_red_team.mcfunction +10 -0
  116. package/dist/data/capture_the_flag/function/create_team.mcfunction +8 -0
  117. package/dist/data/capture_the_flag/function/create_yellow_team.mcfunction +10 -0
  118. package/dist/data/capture_the_flag/function/disable_fire_spread.mcfunction +1 -0
  119. package/dist/data/capture_the_flag/function/disable_keep_inventory.mcfunction +1 -0
  120. package/dist/data/capture_the_flag/function/disable_mob_griefing.mcfunction +1 -0
  121. package/dist/data/capture_the_flag/function/distance_to.mcfunction +6 -0
  122. package/dist/data/capture_the_flag/function/distance_to__const_0_0_0_0.mcfunction +5 -0
  123. package/dist/data/capture_the_flag/function/enable_keep_inventory.mcfunction +1 -0
  124. package/dist/data/capture_the_flag/function/end_game.mcfunction +6 -0
  125. package/dist/data/capture_the_flag/function/end_game__else_2.mcfunction +3 -0
  126. package/dist/data/capture_the_flag/function/end_game__foreach_t7.mcfunction +2 -0
  127. package/dist/data/capture_the_flag/function/end_game__merge_1.mcfunction +1 -0
  128. package/dist/data/capture_the_flag/function/end_game__then_0.mcfunction +3 -0
  129. package/dist/data/capture_the_flag/function/end_sparkles_at.mcfunction +1 -0
  130. package/dist/data/capture_the_flag/function/explosion_effect.mcfunction +1 -0
  131. package/dist/data/capture_the_flag/function/flames.mcfunction +1 -0
  132. package/dist/data/capture_the_flag/function/game_tick.mcfunction +1 -0
  133. package/dist/data/capture_the_flag/function/give_kit_archer.mcfunction +6 -0
  134. package/dist/data/capture_the_flag/function/give_kit_mage.mcfunction +5 -0
  135. package/dist/data/capture_the_flag/function/give_kit_warrior.mcfunction +6 -0
  136. package/dist/data/capture_the_flag/function/glass_box.mcfunction +2 -0
  137. package/dist/data/capture_the_flag/function/glow.mcfunction +1 -0
  138. package/dist/data/capture_the_flag/function/happy_at.mcfunction +1 -0
  139. package/dist/data/capture_the_flag/function/hearts_at.mcfunction +1 -0
  140. package/dist/data/capture_the_flag/function/init.mcfunction +11 -0
  141. package/dist/data/capture_the_flag/function/invisible.mcfunction +1 -0
  142. package/dist/data/capture_the_flag/function/jump.mcfunction +1 -0
  143. package/dist/data/capture_the_flag/function/load.mcfunction +1 -0
  144. package/dist/data/capture_the_flag/function/night_vision.mcfunction +1 -0
  145. package/dist/data/capture_the_flag/function/place_flags.mcfunction +2 -0
  146. package/dist/data/capture_the_flag/function/portal_effect.mcfunction +1 -0
  147. package/dist/data/capture_the_flag/function/regen.mcfunction +1 -0
  148. package/dist/data/capture_the_flag/function/remove_from_teams.mcfunction +3 -0
  149. package/dist/data/capture_the_flag/function/remove_item.mcfunction +1 -0
  150. package/dist/data/capture_the_flag/function/resistance.mcfunction +1 -0
  151. package/dist/data/capture_the_flag/function/set_day.mcfunction +1 -0
  152. package/dist/data/capture_the_flag/function/set_easy.mcfunction +1 -0
  153. package/dist/data/capture_the_flag/function/set_hard.mcfunction +1 -0
  154. package/dist/data/capture_the_flag/function/set_midnight.mcfunction +1 -0
  155. package/dist/data/capture_the_flag/function/set_night.mcfunction +1 -0
  156. package/dist/data/capture_the_flag/function/set_noon.mcfunction +1 -0
  157. package/dist/data/capture_the_flag/function/set_normal.mcfunction +1 -0
  158. package/dist/data/capture_the_flag/function/set_peaceful.mcfunction +1 -0
  159. package/dist/data/capture_the_flag/function/setup_four_teams.mcfunction +4 -0
  160. package/dist/data/capture_the_flag/function/setup_two_teams.mcfunction +2 -0
  161. package/dist/data/capture_the_flag/function/slow_fall.mcfunction +1 -0
  162. package/dist/data/capture_the_flag/function/smoke.mcfunction +1 -0
  163. package/dist/data/capture_the_flag/function/sparkles_at.mcfunction +1 -0
  164. package/dist/data/capture_the_flag/function/speed.mcfunction +1 -0
  165. package/dist/data/capture_the_flag/function/start_game.mcfunction +15 -0
  166. package/dist/data/capture_the_flag/function/start_game__foreach_t10.mcfunction +4 -0
  167. package/dist/data/capture_the_flag/function/strength.mcfunction +1 -0
  168. package/dist/data/capture_the_flag/function/totem_at.mcfunction +1 -0
  169. package/dist/data/capture_the_flag/function/weather_clear.mcfunction +1 -0
  170. package/dist/data/capture_the_flag/function/weather_rain.mcfunction +1 -0
  171. package/dist/data/capture_the_flag/function/weather_thunder.mcfunction +1 -0
  172. package/dist/data/counter/function/__load.mcfunction +5 -0
  173. package/dist/data/counter/function/__tick.mcfunction +2 -0
  174. package/dist/data/counter/function/counter_tick/merge_2.mcfunction +1 -0
  175. package/dist/data/counter/function/counter_tick/then_0.mcfunction +3 -0
  176. package/dist/data/counter/function/counter_tick.mcfunction +11 -0
  177. package/dist/data/gcd2/function/__load.mcfunction +3 -0
  178. package/dist/data/gcd2/function/abs/merge_2.mcfunction +3 -0
  179. package/dist/data/gcd2/function/abs/then_0.mcfunction +5 -0
  180. package/dist/data/gcd2/function/abs.mcfunction +7 -0
  181. package/dist/data/gcd2/function/gcd/loop_body_1.mcfunction +7 -0
  182. package/dist/data/gcd2/function/gcd/loop_check_0.mcfunction +5 -0
  183. package/dist/data/gcd2/function/gcd/loop_exit_2.mcfunction +3 -0
  184. package/dist/data/gcd2/function/gcd.mcfunction +14 -0
  185. package/dist/data/gcd3/function/__load.mcfunction +3 -0
  186. package/dist/data/gcd3/function/abs/merge_2.mcfunction +3 -0
  187. package/dist/data/gcd3/function/abs/then_0.mcfunction +5 -0
  188. package/dist/data/gcd3/function/abs.mcfunction +7 -0
  189. package/dist/data/gcd3/function/gcd/loop_body_1.mcfunction +7 -0
  190. package/dist/data/gcd3/function/gcd/loop_check_0.mcfunction +5 -0
  191. package/dist/data/gcd3/function/gcd/loop_exit_2.mcfunction +3 -0
  192. package/dist/data/gcd3/function/gcd.mcfunction +14 -0
  193. package/dist/data/gcd3/function/test.mcfunction +7 -0
  194. package/dist/data/gcd3nm/function/__load.mcfunction +3 -0
  195. package/dist/data/gcd3nm/function/abs/merge_2.mcfunction +3 -0
  196. package/dist/data/gcd3nm/function/abs/then_0.mcfunction +5 -0
  197. package/dist/data/gcd3nm/function/abs.mcfunction +7 -0
  198. package/dist/data/gcd3nm/function/gcd/loop_body_1.mcfunction +7 -0
  199. package/dist/data/gcd3nm/function/gcd/loop_check_0.mcfunction +5 -0
  200. package/dist/data/gcd3nm/function/gcd/loop_exit_2.mcfunction +3 -0
  201. package/dist/data/gcd3nm/function/gcd.mcfunction +14 -0
  202. package/dist/data/gcd3nm/function/test.mcfunction +7 -0
  203. package/dist/data/gcd_test/function/__load.mcfunction +3 -0
  204. package/dist/data/gcd_test/function/abs/merge_2.mcfunction +3 -0
  205. package/dist/data/gcd_test/function/abs/then_0.mcfunction +5 -0
  206. package/dist/data/gcd_test/function/abs.mcfunction +7 -0
  207. package/dist/data/gcd_test/function/gcd/loop_body_1.mcfunction +7 -0
  208. package/dist/data/gcd_test/function/gcd/loop_check_0.mcfunction +5 -0
  209. package/dist/data/gcd_test/function/gcd/loop_exit_2.mcfunction +3 -0
  210. package/dist/data/gcd_test/function/gcd.mcfunction +14 -0
  211. package/dist/data/hunger_games/function/angry_at.mcfunction +1 -0
  212. package/dist/data/hunger_games/function/barrier_wall.mcfunction +1 -0
  213. package/dist/data/hunger_games/function/buff_all.mcfunction +22 -0
  214. package/dist/data/hunger_games/function/check_alive.mcfunction +3 -0
  215. package/dist/data/hunger_games/function/check_alive__foreach_t3.mcfunction +10 -0
  216. package/dist/data/hunger_games/function/check_alive__foreach_t3__merge_1.mcfunction +1 -0
  217. package/dist/data/hunger_games/function/check_alive__foreach_t3__then_0.mcfunction +5 -0
  218. package/dist/data/hunger_games/function/check_border_damage.mcfunction +1 -0
  219. package/dist/data/hunger_games/function/check_border_damage__foreach_t0.mcfunction +1 -0
  220. package/dist/data/hunger_games/function/clear_area.mcfunction +1 -0
  221. package/dist/data/hunger_games/function/clear_effect.mcfunction +1 -0
  222. package/dist/data/hunger_games/function/clear_effects.mcfunction +1 -0
  223. package/dist/data/hunger_games/function/countdown_tick.mcfunction +1 -0
  224. package/dist/data/hunger_games/function/create_health_bar.mcfunction +24 -0
  225. package/dist/data/hunger_games/function/create_progress_bar.mcfunction +24 -0
  226. package/dist/data/hunger_games/function/create_progress_bar__const_0_0_0.mcfunction +21 -0
  227. package/dist/data/hunger_games/function/create_timer_bar.mcfunction +30 -0
  228. package/dist/data/hunger_games/function/declare_winner.mcfunction +13 -0
  229. package/dist/data/hunger_games/function/disable_fire_spread.mcfunction +1 -0
  230. package/dist/data/hunger_games/function/disable_keep_inventory.mcfunction +1 -0
  231. package/dist/data/hunger_games/function/disable_mob_griefing.mcfunction +1 -0
  232. package/dist/data/hunger_games/function/enable_keep_inventory.mcfunction +1 -0
  233. package/dist/data/hunger_games/function/end_game_no_winner.mcfunction +3 -0
  234. package/dist/data/hunger_games/function/end_sparkles_at.mcfunction +1 -0
  235. package/dist/data/hunger_games/function/explosion_effect.mcfunction +1 -0
  236. package/dist/data/hunger_games/function/flames.mcfunction +1 -0
  237. package/dist/data/hunger_games/function/game_tick.mcfunction +1 -0
  238. package/dist/data/hunger_games/function/glass_box.mcfunction +2 -0
  239. package/dist/data/hunger_games/function/glow.mcfunction +1 -0
  240. package/dist/data/hunger_games/function/happy_at.mcfunction +1 -0
  241. package/dist/data/hunger_games/function/hearts_at.mcfunction +1 -0
  242. package/dist/data/hunger_games/function/hide_bar.mcfunction +4 -0
  243. package/dist/data/hunger_games/function/init.mcfunction +7 -0
  244. package/dist/data/hunger_games/function/invisible.mcfunction +1 -0
  245. package/dist/data/hunger_games/function/jump.mcfunction +1 -0
  246. package/dist/data/hunger_games/function/load.mcfunction +1 -0
  247. package/dist/data/hunger_games/function/main_game_tick.mcfunction +4 -0
  248. package/dist/data/hunger_games/function/night_vision.mcfunction +1 -0
  249. package/dist/data/hunger_games/function/on_player_death.mcfunction +14 -0
  250. package/dist/data/hunger_games/function/portal_effect.mcfunction +1 -0
  251. package/dist/data/hunger_games/function/regen.mcfunction +1 -0
  252. package/dist/data/hunger_games/function/remove_bar.mcfunction +3 -0
  253. package/dist/data/hunger_games/function/remove_bar__const_0.mcfunction +2 -0
  254. package/dist/data/hunger_games/function/reset_game.mcfunction +3 -0
  255. package/dist/data/hunger_games/function/reset_game__foreach_t0.mcfunction +9 -0
  256. package/dist/data/hunger_games/function/resistance.mcfunction +1 -0
  257. package/dist/data/hunger_games/function/set_day.mcfunction +1 -0
  258. package/dist/data/hunger_games/function/set_easy.mcfunction +1 -0
  259. package/dist/data/hunger_games/function/set_hard.mcfunction +1 -0
  260. package/dist/data/hunger_games/function/set_midnight.mcfunction +1 -0
  261. package/dist/data/hunger_games/function/set_night.mcfunction +1 -0
  262. package/dist/data/hunger_games/function/set_noon.mcfunction +1 -0
  263. package/dist/data/hunger_games/function/set_normal.mcfunction +1 -0
  264. package/dist/data/hunger_games/function/set_peaceful.mcfunction +1 -0
  265. package/dist/data/hunger_games/function/show_bar.mcfunction +4 -0
  266. package/dist/data/hunger_games/function/shrink_border.mcfunction +1 -0
  267. package/dist/data/hunger_games/function/slow_fall.mcfunction +1 -0
  268. package/dist/data/hunger_games/function/smoke.mcfunction +1 -0
  269. package/dist/data/hunger_games/function/sparkles_at.mcfunction +1 -0
  270. package/dist/data/hunger_games/function/speed.mcfunction +1 -0
  271. package/dist/data/hunger_games/function/start_countdown.mcfunction +3 -0
  272. package/dist/data/hunger_games/function/start_countdown__foreach_t0.mcfunction +16 -0
  273. package/dist/data/hunger_games/function/start_game.mcfunction +4 -0
  274. package/dist/data/hunger_games/function/start_game__foreach_t3.mcfunction +4 -0
  275. package/dist/data/hunger_games/function/strength.mcfunction +1 -0
  276. package/dist/data/hunger_games/function/totem_at.mcfunction +1 -0
  277. package/dist/data/hunger_games/function/update_bar.mcfunction +5 -0
  278. package/dist/data/hunger_games/function/update_bar__const_0_0.mcfunction +3 -0
  279. package/dist/data/hunger_games/function/update_bar_color.mcfunction +7 -0
  280. package/dist/data/hunger_games/function/update_bar_color__else_2.mcfunction +5 -0
  281. package/dist/data/hunger_games/function/update_bar_color__else_5.mcfunction +4 -0
  282. package/dist/data/hunger_games/function/update_bar_color__merge_1.mcfunction +1 -0
  283. package/dist/data/hunger_games/function/update_bar_color__merge_4.mcfunction +1 -0
  284. package/dist/data/hunger_games/function/update_bar_color__then_0.mcfunction +4 -0
  285. package/dist/data/hunger_games/function/update_bar_color__then_3.mcfunction +4 -0
  286. package/dist/data/hunger_games/function/weather_clear.mcfunction +1 -0
  287. package/dist/data/hunger_games/function/weather_rain.mcfunction +1 -0
  288. package/dist/data/hunger_games/function/weather_thunder.mcfunction +1 -0
  289. package/dist/data/isqrttest/function/__load.mcfunction +6 -0
  290. package/dist/data/isqrttest/function/isqrt/loop_body_4.mcfunction +12 -0
  291. package/dist/data/isqrttest/function/isqrt/loop_check_3.mcfunction +5 -0
  292. package/dist/data/isqrttest/function/isqrt/loop_exit_5.mcfunction +3 -0
  293. package/dist/data/isqrttest/function/isqrt/merge_2.mcfunction +4 -0
  294. package/dist/data/isqrttest/function/isqrt/merge_8.mcfunction +6 -0
  295. package/dist/data/isqrttest/function/isqrt/then_0.mcfunction +3 -0
  296. package/dist/data/isqrttest/function/isqrt/then_6.mcfunction +3 -0
  297. package/dist/data/isqrttest/function/isqrt.mcfunction +7 -0
  298. package/dist/data/isqrttest/function/test.mcfunction +6 -0
  299. package/dist/data/macrotest/function/get_element.mcfunction +2 -0
  300. package/dist/data/macrotest/function/load.mcfunction +1 -0
  301. package/dist/data/macrotest/function/test_dynamic_index.mcfunction +2 -0
  302. package/dist/data/mathtest/function/__load.mcfunction +3 -0
  303. package/dist/data/mathtest/function/abs/merge_2.mcfunction +3 -0
  304. package/dist/data/mathtest/function/abs/then_0.mcfunction +5 -0
  305. package/dist/data/mathtest/function/abs.mcfunction +6 -0
  306. package/dist/data/mathtest/function/test.mcfunction +5 -0
  307. package/dist/data/minecraft/tags/function/load.json +5 -0
  308. package/dist/data/minecraft/tags/function/tick.json +5 -0
  309. package/dist/data/mypack/function/__load.mcfunction +13 -0
  310. package/dist/data/mypack/function/_atan_init.mcfunction +2 -0
  311. package/dist/data/mypack/function/abs/merge_2.mcfunction +3 -0
  312. package/dist/data/mypack/function/abs/then_0.mcfunction +5 -0
  313. package/dist/data/mypack/function/abs.mcfunction +6 -0
  314. package/dist/data/mypack/function/atan2_fixed/__sgi_1.mcfunction +2 -0
  315. package/dist/data/mypack/function/atan2_fixed/else_34.mcfunction +3 -0
  316. package/dist/data/mypack/function/atan2_fixed/loop_body_31.mcfunction +19 -0
  317. package/dist/data/mypack/function/atan2_fixed/loop_check_30.mcfunction +5 -0
  318. package/dist/data/mypack/function/atan2_fixed/loop_exit_32.mcfunction +6 -0
  319. package/dist/data/mypack/function/atan2_fixed/merge_11.mcfunction +6 -0
  320. package/dist/data/mypack/function/atan2_fixed/merge_14.mcfunction +3 -0
  321. package/dist/data/mypack/function/atan2_fixed/merge_17.mcfunction +6 -0
  322. package/dist/data/mypack/function/atan2_fixed/merge_2.mcfunction +5 -0
  323. package/dist/data/mypack/function/atan2_fixed/merge_20.mcfunction +5 -0
  324. package/dist/data/mypack/function/atan2_fixed/merge_23.mcfunction +5 -0
  325. package/dist/data/mypack/function/atan2_fixed/merge_26.mcfunction +6 -0
  326. package/dist/data/mypack/function/atan2_fixed/merge_29.mcfunction +4 -0
  327. package/dist/data/mypack/function/atan2_fixed/merge_38.mcfunction +5 -0
  328. package/dist/data/mypack/function/atan2_fixed/merge_41.mcfunction +5 -0
  329. package/dist/data/mypack/function/atan2_fixed/merge_44.mcfunction +5 -0
  330. package/dist/data/mypack/function/atan2_fixed/merge_47.mcfunction +5 -0
  331. package/dist/data/mypack/function/atan2_fixed/merge_5.mcfunction +5 -0
  332. package/dist/data/mypack/function/atan2_fixed/merge_8.mcfunction +3 -0
  333. package/dist/data/mypack/function/atan2_fixed/then_0.mcfunction +5 -0
  334. package/dist/data/mypack/function/atan2_fixed/then_12.mcfunction +3 -0
  335. package/dist/data/mypack/function/atan2_fixed/then_15.mcfunction +5 -0
  336. package/dist/data/mypack/function/atan2_fixed/then_18.mcfunction +5 -0
  337. package/dist/data/mypack/function/atan2_fixed/then_21.mcfunction +3 -0
  338. package/dist/data/mypack/function/atan2_fixed/then_24.mcfunction +3 -0
  339. package/dist/data/mypack/function/atan2_fixed/then_27.mcfunction +6 -0
  340. package/dist/data/mypack/function/atan2_fixed/then_3.mcfunction +3 -0
  341. package/dist/data/mypack/function/atan2_fixed/then_33.mcfunction +5 -0
  342. package/dist/data/mypack/function/atan2_fixed/then_36.mcfunction +5 -0
  343. package/dist/data/mypack/function/atan2_fixed/then_39.mcfunction +5 -0
  344. package/dist/data/mypack/function/atan2_fixed/then_42.mcfunction +3 -0
  345. package/dist/data/mypack/function/atan2_fixed/then_45.mcfunction +5 -0
  346. package/dist/data/mypack/function/atan2_fixed/then_6.mcfunction +3 -0
  347. package/dist/data/mypack/function/atan2_fixed/then_9.mcfunction +5 -0
  348. package/dist/data/mypack/function/atan2_fixed.mcfunction +7 -0
  349. package/dist/data/mypack/function/my_game.mcfunction +10 -0
  350. package/dist/data/parkour_race/function/angry_at.mcfunction +1 -0
  351. package/dist/data/parkour_race/function/barrier_wall.mcfunction +1 -0
  352. package/dist/data/parkour_race/function/buff_all.mcfunction +22 -0
  353. package/dist/data/parkour_race/function/check_checkpoints.mcfunction +11 -0
  354. package/dist/data/parkour_race/function/check_checkpoints__exec_t11.mcfunction +4 -0
  355. package/dist/data/parkour_race/function/check_checkpoints__exec_t13.mcfunction +3 -0
  356. package/dist/data/parkour_race/function/check_checkpoints__exec_t5.mcfunction +4 -0
  357. package/dist/data/parkour_race/function/check_checkpoints__exec_t7.mcfunction +4 -0
  358. package/dist/data/parkour_race/function/check_checkpoints__exec_t9.mcfunction +4 -0
  359. package/dist/data/parkour_race/function/check_checkpoints__merge_1.mcfunction +5 -0
  360. package/dist/data/parkour_race/function/check_checkpoints__merge_3.mcfunction +5 -0
  361. package/dist/data/parkour_race/function/check_checkpoints__merge_5.mcfunction +5 -0
  362. package/dist/data/parkour_race/function/check_checkpoints__merge_7.mcfunction +5 -0
  363. package/dist/data/parkour_race/function/check_checkpoints__merge_9.mcfunction +1 -0
  364. package/dist/data/parkour_race/function/check_checkpoints__then_0.mcfunction +2 -0
  365. package/dist/data/parkour_race/function/check_checkpoints__then_2.mcfunction +2 -0
  366. package/dist/data/parkour_race/function/check_checkpoints__then_4.mcfunction +2 -0
  367. package/dist/data/parkour_race/function/check_checkpoints__then_6.mcfunction +2 -0
  368. package/dist/data/parkour_race/function/check_checkpoints__then_8.mcfunction +2 -0
  369. package/dist/data/parkour_race/function/check_fall.mcfunction +1 -0
  370. package/dist/data/parkour_race/function/check_fall__exec_t1.mcfunction +10 -0
  371. package/dist/data/parkour_race/function/clear_area.mcfunction +1 -0
  372. package/dist/data/parkour_race/function/clear_effect.mcfunction +1 -0
  373. package/dist/data/parkour_race/function/clear_effects.mcfunction +1 -0
  374. package/dist/data/parkour_race/function/create_health_bar.mcfunction +24 -0
  375. package/dist/data/parkour_race/function/create_progress_bar.mcfunction +24 -0
  376. package/dist/data/parkour_race/function/create_timer_bar.mcfunction +30 -0
  377. package/dist/data/parkour_race/function/disable_fire_spread.mcfunction +1 -0
  378. package/dist/data/parkour_race/function/disable_keep_inventory.mcfunction +1 -0
  379. package/dist/data/parkour_race/function/disable_mob_griefing.mcfunction +1 -0
  380. package/dist/data/parkour_race/function/enable_keep_inventory.mcfunction +1 -0
  381. package/dist/data/parkour_race/function/end_sparkles_at.mcfunction +1 -0
  382. package/dist/data/parkour_race/function/explosion_effect.mcfunction +1 -0
  383. package/dist/data/parkour_race/function/finish_race.mcfunction +20 -0
  384. package/dist/data/parkour_race/function/finish_race__else_2.mcfunction +4 -0
  385. package/dist/data/parkour_race/function/finish_race__else_5.mcfunction +3 -0
  386. package/dist/data/parkour_race/function/finish_race__merge_1.mcfunction +3 -0
  387. package/dist/data/parkour_race/function/finish_race__merge_4.mcfunction +1 -0
  388. package/dist/data/parkour_race/function/finish_race__then_0.mcfunction +8 -0
  389. package/dist/data/parkour_race/function/finish_race__then_3.mcfunction +10 -0
  390. package/dist/data/parkour_race/function/flames.mcfunction +1 -0
  391. package/dist/data/parkour_race/function/glass_box.mcfunction +2 -0
  392. package/dist/data/parkour_race/function/glow.mcfunction +1 -0
  393. package/dist/data/parkour_race/function/happy_at.mcfunction +1 -0
  394. package/dist/data/parkour_race/function/hearts_at.mcfunction +1 -0
  395. package/dist/data/parkour_race/function/hide_bar.mcfunction +4 -0
  396. package/dist/data/parkour_race/function/init.mcfunction +18 -0
  397. package/dist/data/parkour_race/function/invisible.mcfunction +1 -0
  398. package/dist/data/parkour_race/function/jump.mcfunction +1 -0
  399. package/dist/data/parkour_race/function/load.mcfunction +1 -0
  400. package/dist/data/parkour_race/function/night_vision.mcfunction +1 -0
  401. package/dist/data/parkour_race/function/portal_effect.mcfunction +1 -0
  402. package/dist/data/parkour_race/function/quit_race.mcfunction +10 -0
  403. package/dist/data/parkour_race/function/quit_race__merge_1.mcfunction +1 -0
  404. package/dist/data/parkour_race/function/quit_race__then_0.mcfunction +11 -0
  405. package/dist/data/parkour_race/function/race_tick.mcfunction +1 -0
  406. package/dist/data/parkour_race/function/race_tick__foreach_t0.mcfunction +10 -0
  407. package/dist/data/parkour_race/function/race_tick__foreach_t0__merge_1.mcfunction +1 -0
  408. package/dist/data/parkour_race/function/race_tick__foreach_t0__then_0.mcfunction +13 -0
  409. package/dist/data/parkour_race/function/reach_checkpoint.mcfunction +11 -0
  410. package/dist/data/parkour_race/function/regen.mcfunction +1 -0
  411. package/dist/data/parkour_race/function/remove_bar.mcfunction +3 -0
  412. package/dist/data/parkour_race/function/resistance.mcfunction +1 -0
  413. package/dist/data/parkour_race/function/respawn_at_checkpoint.mcfunction +7 -0
  414. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_1.mcfunction +5 -0
  415. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_3.mcfunction +5 -0
  416. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_5.mcfunction +5 -0
  417. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_7.mcfunction +5 -0
  418. package/dist/data/parkour_race/function/respawn_at_checkpoint__merge_9.mcfunction +1 -0
  419. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_0.mcfunction +6 -0
  420. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_2.mcfunction +6 -0
  421. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_4.mcfunction +6 -0
  422. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_6.mcfunction +6 -0
  423. package/dist/data/parkour_race/function/respawn_at_checkpoint__then_8.mcfunction +6 -0
  424. package/dist/data/parkour_race/function/set_day.mcfunction +1 -0
  425. package/dist/data/parkour_race/function/set_easy.mcfunction +1 -0
  426. package/dist/data/parkour_race/function/set_hard.mcfunction +1 -0
  427. package/dist/data/parkour_race/function/set_midnight.mcfunction +1 -0
  428. package/dist/data/parkour_race/function/set_night.mcfunction +1 -0
  429. package/dist/data/parkour_race/function/set_noon.mcfunction +1 -0
  430. package/dist/data/parkour_race/function/set_normal.mcfunction +1 -0
  431. package/dist/data/parkour_race/function/set_peaceful.mcfunction +1 -0
  432. package/dist/data/parkour_race/function/show_bar.mcfunction +4 -0
  433. package/dist/data/parkour_race/function/show_leaderboard.mcfunction +4 -0
  434. package/dist/data/parkour_race/function/slow_fall.mcfunction +1 -0
  435. package/dist/data/parkour_race/function/smoke.mcfunction +1 -0
  436. package/dist/data/parkour_race/function/sparkles_at.mcfunction +1 -0
  437. package/dist/data/parkour_race/function/speed.mcfunction +1 -0
  438. package/dist/data/parkour_race/function/start_race.mcfunction +10 -0
  439. package/dist/data/parkour_race/function/start_race__merge_1.mcfunction +23 -0
  440. package/dist/data/parkour_race/function/start_race__then_0.mcfunction +1 -0
  441. package/dist/data/parkour_race/function/strength.mcfunction +1 -0
  442. package/dist/data/parkour_race/function/totem_at.mcfunction +1 -0
  443. package/dist/data/parkour_race/function/update_bar.mcfunction +5 -0
  444. package/dist/data/parkour_race/function/update_bar_color.mcfunction +7 -0
  445. package/dist/data/parkour_race/function/update_bar_color__else_2.mcfunction +5 -0
  446. package/dist/data/parkour_race/function/update_bar_color__else_5.mcfunction +4 -0
  447. package/dist/data/parkour_race/function/update_bar_color__merge_1.mcfunction +1 -0
  448. package/dist/data/parkour_race/function/update_bar_color__merge_4.mcfunction +1 -0
  449. package/dist/data/parkour_race/function/update_bar_color__then_0.mcfunction +4 -0
  450. package/dist/data/parkour_race/function/update_bar_color__then_3.mcfunction +4 -0
  451. package/dist/data/parkour_race/function/weather_clear.mcfunction +1 -0
  452. package/dist/data/parkour_race/function/weather_rain.mcfunction +1 -0
  453. package/dist/data/parkour_race/function/weather_thunder.mcfunction +1 -0
  454. package/dist/data/quiz/function/__load.mcfunction +16 -0
  455. package/dist/data/quiz/function/__tick.mcfunction +6 -0
  456. package/dist/data/quiz/function/__trigger_quiz_a_dispatch.mcfunction +4 -0
  457. package/dist/data/quiz/function/__trigger_quiz_b_dispatch.mcfunction +4 -0
  458. package/dist/data/quiz/function/__trigger_quiz_c_dispatch.mcfunction +4 -0
  459. package/dist/data/quiz/function/__trigger_quiz_start_dispatch.mcfunction +4 -0
  460. package/dist/data/quiz/function/answer_a.mcfunction +4 -0
  461. package/dist/data/quiz/function/answer_b.mcfunction +4 -0
  462. package/dist/data/quiz/function/answer_c.mcfunction +4 -0
  463. package/dist/data/quiz/function/ask_question/else_1.mcfunction +5 -0
  464. package/dist/data/quiz/function/ask_question/else_4.mcfunction +5 -0
  465. package/dist/data/quiz/function/ask_question/else_7.mcfunction +4 -0
  466. package/dist/data/quiz/function/ask_question/merge_2.mcfunction +1 -0
  467. package/dist/data/quiz/function/ask_question/merge_5.mcfunction +2 -0
  468. package/dist/data/quiz/function/ask_question/merge_8.mcfunction +2 -0
  469. package/dist/data/quiz/function/ask_question/then_0.mcfunction +4 -0
  470. package/dist/data/quiz/function/ask_question/then_3.mcfunction +4 -0
  471. package/dist/data/quiz/function/ask_question/then_6.mcfunction +4 -0
  472. package/dist/data/quiz/function/ask_question.mcfunction +7 -0
  473. package/dist/data/quiz/function/finish_quiz.mcfunction +6 -0
  474. package/dist/data/quiz/function/handle_answer/else_1.mcfunction +5 -0
  475. package/dist/data/quiz/function/handle_answer/else_10.mcfunction +3 -0
  476. package/dist/data/quiz/function/handle_answer/else_16.mcfunction +3 -0
  477. package/dist/data/quiz/function/handle_answer/else_4.mcfunction +3 -0
  478. package/dist/data/quiz/function/handle_answer/else_7.mcfunction +5 -0
  479. package/dist/data/quiz/function/handle_answer/merge_11.mcfunction +2 -0
  480. package/dist/data/quiz/function/handle_answer/merge_14.mcfunction +2 -0
  481. package/dist/data/quiz/function/handle_answer/merge_17.mcfunction +2 -0
  482. package/dist/data/quiz/function/handle_answer/merge_2.mcfunction +8 -0
  483. package/dist/data/quiz/function/handle_answer/merge_5.mcfunction +2 -0
  484. package/dist/data/quiz/function/handle_answer/merge_8.mcfunction +2 -0
  485. package/dist/data/quiz/function/handle_answer/then_0.mcfunction +5 -0
  486. package/dist/data/quiz/function/handle_answer/then_12.mcfunction +5 -0
  487. package/dist/data/quiz/function/handle_answer/then_15.mcfunction +6 -0
  488. package/dist/data/quiz/function/handle_answer/then_3.mcfunction +6 -0
  489. package/dist/data/quiz/function/handle_answer/then_6.mcfunction +5 -0
  490. package/dist/data/quiz/function/handle_answer/then_9.mcfunction +6 -0
  491. package/dist/data/quiz/function/handle_answer.mcfunction +11 -0
  492. package/dist/data/quiz/function/start_quiz.mcfunction +5 -0
  493. package/dist/data/rawtest/function/load.mcfunction +1 -0
  494. package/dist/data/rawtest/function/test.mcfunction +2 -0
  495. package/dist/data/reqtest/function/__load.mcfunction +4 -0
  496. package/dist/data/reqtest/function/_table_init.mcfunction +2 -0
  497. package/dist/data/reqtest/function/no_trig.mcfunction +3 -0
  498. package/dist/data/reqtest/function/use_table.mcfunction +4 -0
  499. package/dist/data/reqtest2/function/__load.mcfunction +3 -0
  500. package/dist/data/reqtest2/function/no_trig.mcfunction +3 -0
  501. package/dist/data/runtime/function/__load.mcfunction +5 -0
  502. package/dist/data/runtime/function/__tick.mcfunction +2 -0
  503. package/dist/data/runtime/function/counter_tick/then_0.mcfunction +3 -0
  504. package/dist/data/runtime/function/counter_tick.mcfunction +13 -0
  505. package/dist/data/shop/function/__load.mcfunction +7 -0
  506. package/dist/data/shop/function/__tick.mcfunction +3 -0
  507. package/dist/data/shop/function/__trigger_shop_buy_dispatch.mcfunction +4 -0
  508. package/dist/data/shop/function/complete_purchase/else_1.mcfunction +5 -0
  509. package/dist/data/shop/function/complete_purchase/else_4.mcfunction +5 -0
  510. package/dist/data/shop/function/complete_purchase/else_7.mcfunction +3 -0
  511. package/dist/data/shop/function/complete_purchase/merge_2.mcfunction +2 -0
  512. package/dist/data/shop/function/complete_purchase/merge_5.mcfunction +2 -0
  513. package/dist/data/shop/function/complete_purchase/merge_8.mcfunction +2 -0
  514. package/dist/data/shop/function/complete_purchase/then_0.mcfunction +4 -0
  515. package/dist/data/shop/function/complete_purchase/then_3.mcfunction +4 -0
  516. package/dist/data/shop/function/complete_purchase/then_6.mcfunction +4 -0
  517. package/dist/data/shop/function/complete_purchase.mcfunction +7 -0
  518. package/dist/data/shop/function/handle_shop_trigger.mcfunction +3 -0
  519. package/dist/data/swap_test/function/__load.mcfunction +3 -0
  520. package/dist/data/swap_test/function/gcd_old/loop_body_1.mcfunction +7 -0
  521. package/dist/data/swap_test/function/gcd_old/loop_check_0.mcfunction +5 -0
  522. package/dist/data/swap_test/function/gcd_old/loop_exit_2.mcfunction +3 -0
  523. package/dist/data/swap_test/function/gcd_old.mcfunction +8 -0
  524. package/dist/data/test/function/_atan_init.mcfunction +4 -0
  525. package/dist/data/test/function/_hsl_chroma_x.mcfunction +11 -0
  526. package/dist/data/test/function/_hsl_chroma_x__merge_1.mcfunction +6 -0
  527. package/dist/data/test/function/_hsl_chroma_x__then_0.mcfunction +4 -0
  528. package/dist/data/test/function/_math_init.mcfunction +4 -0
  529. package/dist/data/test/function/aabb_contains.mcfunction +13 -0
  530. package/dist/data/test/function/aabb_contains__merge_1.mcfunction +4 -0
  531. package/dist/data/test/function/aabb_contains__merge_10.mcfunction +4 -0
  532. package/dist/data/test/function/aabb_contains__merge_13.mcfunction +4 -0
  533. package/dist/data/test/function/aabb_contains__merge_16.mcfunction +2 -0
  534. package/dist/data/test/function/aabb_contains__merge_4.mcfunction +4 -0
  535. package/dist/data/test/function/aabb_contains__merge_7.mcfunction +4 -0
  536. package/dist/data/test/function/aabb_contains__then_0.mcfunction +2 -0
  537. package/dist/data/test/function/aabb_contains__then_12.mcfunction +2 -0
  538. package/dist/data/test/function/aabb_contains__then_15.mcfunction +2 -0
  539. package/dist/data/test/function/aabb_contains__then_3.mcfunction +2 -0
  540. package/dist/data/test/function/aabb_contains__then_6.mcfunction +2 -0
  541. package/dist/data/test/function/aabb_contains__then_9.mcfunction +2 -0
  542. package/dist/data/test/function/add2d_x.mcfunction +5 -0
  543. package/dist/data/test/function/add2d_y.mcfunction +5 -0
  544. package/dist/data/test/function/add3d_x.mcfunction +5 -0
  545. package/dist/data/test/function/add3d_y.mcfunction +5 -0
  546. package/dist/data/test/function/add3d_z.mcfunction +5 -0
  547. package/dist/data/test/function/angle_diff.mcfunction +13 -0
  548. package/dist/data/test/function/angle_diff__merge_1.mcfunction +1 -0
  549. package/dist/data/test/function/angle_diff__then_0.mcfunction +4 -0
  550. package/dist/data/test/function/angle_normalize.mcfunction +3 -0
  551. package/dist/data/test/function/angle_normalize__loop_body_1.mcfunction +4 -0
  552. package/dist/data/test/function/angle_normalize__loop_body_4.mcfunction +4 -0
  553. package/dist/data/test/function/angle_normalize__loop_exit_2.mcfunction +1 -0
  554. package/dist/data/test/function/angle_normalize__loop_exit_5.mcfunction +1 -0
  555. package/dist/data/test/function/angle_normalize__loop_header_0.mcfunction +5 -0
  556. package/dist/data/test/function/angle_normalize__loop_header_3.mcfunction +5 -0
  557. package/dist/data/test/function/approx_eq.mcfunction +11 -0
  558. package/dist/data/test/function/approx_eq__merge_1.mcfunction +4 -0
  559. package/dist/data/test/function/approx_eq__merge_3.mcfunction +2 -0
  560. package/dist/data/test/function/approx_eq__then_0.mcfunction +4 -0
  561. package/dist/data/test/function/approx_eq__then_2.mcfunction +2 -0
  562. package/dist/data/test/function/atan2_fixed.mcfunction +7 -0
  563. package/dist/data/test/function/atan2_fixed__else_30.mcfunction +2 -0
  564. package/dist/data/test/function/atan2_fixed__loop_body_26.mcfunction +22 -0
  565. package/dist/data/test/function/atan2_fixed__loop_exit_27.mcfunction +6 -0
  566. package/dist/data/test/function/atan2_fixed__loop_header_25.mcfunction +4 -0
  567. package/dist/data/test/function/atan2_fixed__merge_1.mcfunction +5 -0
  568. package/dist/data/test/function/atan2_fixed__merge_10.mcfunction +6 -0
  569. package/dist/data/test/function/atan2_fixed__merge_12.mcfunction +2 -0
  570. package/dist/data/test/function/atan2_fixed__merge_16.mcfunction +6 -0
  571. package/dist/data/test/function/atan2_fixed__merge_18.mcfunction +5 -0
  572. package/dist/data/test/function/atan2_fixed__merge_20.mcfunction +5 -0
  573. package/dist/data/test/function/atan2_fixed__merge_22.mcfunction +5 -0
  574. package/dist/data/test/function/atan2_fixed__merge_24.mcfunction +3 -0
  575. package/dist/data/test/function/atan2_fixed__merge_29.mcfunction +1 -0
  576. package/dist/data/test/function/atan2_fixed__merge_3.mcfunction +5 -0
  577. package/dist/data/test/function/atan2_fixed__merge_32.mcfunction +5 -0
  578. package/dist/data/test/function/atan2_fixed__merge_34.mcfunction +5 -0
  579. package/dist/data/test/function/atan2_fixed__merge_36.mcfunction +3 -0
  580. package/dist/data/test/function/atan2_fixed__merge_40.mcfunction +3 -0
  581. package/dist/data/test/function/atan2_fixed__merge_6.mcfunction +2 -0
  582. package/dist/data/test/function/atan2_fixed__then_0.mcfunction +5 -0
  583. package/dist/data/test/function/atan2_fixed__then_11.mcfunction +2 -0
  584. package/dist/data/test/function/atan2_fixed__then_15.mcfunction +4 -0
  585. package/dist/data/test/function/atan2_fixed__then_17.mcfunction +4 -0
  586. package/dist/data/test/function/atan2_fixed__then_19.mcfunction +2 -0
  587. package/dist/data/test/function/atan2_fixed__then_2.mcfunction +2 -0
  588. package/dist/data/test/function/atan2_fixed__then_21.mcfunction +2 -0
  589. package/dist/data/test/function/atan2_fixed__then_23.mcfunction +5 -0
  590. package/dist/data/test/function/atan2_fixed__then_28.mcfunction +4 -0
  591. package/dist/data/test/function/atan2_fixed__then_31.mcfunction +4 -0
  592. package/dist/data/test/function/atan2_fixed__then_33.mcfunction +5 -0
  593. package/dist/data/test/function/atan2_fixed__then_35.mcfunction +1 -0
  594. package/dist/data/test/function/atan2_fixed__then_39.mcfunction +3 -0
  595. package/dist/data/test/function/atan2_fixed__then_5.mcfunction +2 -0
  596. package/dist/data/test/function/atan2_fixed__then_9.mcfunction +5 -0
  597. package/dist/data/test/function/avg3.mcfunction +11 -0
  598. package/dist/data/test/function/avg5.mcfunction +17 -0
  599. package/dist/data/test/function/bernoulli.mcfunction +13 -0
  600. package/dist/data/test/function/bernoulli__merge_1.mcfunction +7 -0
  601. package/dist/data/test/function/bernoulli__merge_3.mcfunction +2 -0
  602. package/dist/data/test/function/bernoulli__then_0.mcfunction +4 -0
  603. package/dist/data/test/function/bernoulli__then_2.mcfunction +2 -0
  604. package/dist/data/test/function/bigint3_add_hi.mcfunction +11 -0
  605. package/dist/data/test/function/bigint3_add_lo.mcfunction +8 -0
  606. package/dist/data/test/function/bigint3_add_mid.mcfunction +11 -0
  607. package/dist/data/test/function/bigint3_borrow_lo.mcfunction +6 -0
  608. package/dist/data/test/function/bigint3_borrow_lo__merge_1.mcfunction +2 -0
  609. package/dist/data/test/function/bigint3_borrow_lo__then_0.mcfunction +2 -0
  610. package/dist/data/test/function/bigint3_borrow_mid.mcfunction +9 -0
  611. package/dist/data/test/function/bigint3_borrow_mid__merge_1.mcfunction +2 -0
  612. package/dist/data/test/function/bigint3_borrow_mid__then_0.mcfunction +2 -0
  613. package/dist/data/test/function/bigint3_carry_lo.mcfunction +8 -0
  614. package/dist/data/test/function/bigint3_carry_mid.mcfunction +11 -0
  615. package/dist/data/test/function/bigint3_cmp.mcfunction +10 -0
  616. package/dist/data/test/function/bigint3_cmp__merge_1.mcfunction +4 -0
  617. package/dist/data/test/function/bigint3_cmp__merge_10.mcfunction +4 -0
  618. package/dist/data/test/function/bigint3_cmp__merge_13.mcfunction +4 -0
  619. package/dist/data/test/function/bigint3_cmp__merge_16.mcfunction +2 -0
  620. package/dist/data/test/function/bigint3_cmp__merge_4.mcfunction +4 -0
  621. package/dist/data/test/function/bigint3_cmp__merge_7.mcfunction +4 -0
  622. package/dist/data/test/function/bigint3_cmp__then_0.mcfunction +2 -0
  623. package/dist/data/test/function/bigint3_cmp__then_12.mcfunction +2 -0
  624. package/dist/data/test/function/bigint3_cmp__then_15.mcfunction +2 -0
  625. package/dist/data/test/function/bigint3_cmp__then_3.mcfunction +2 -0
  626. package/dist/data/test/function/bigint3_cmp__then_6.mcfunction +2 -0
  627. package/dist/data/test/function/bigint3_cmp__then_9.mcfunction +2 -0
  628. package/dist/data/test/function/bigint3_div_chunk.mcfunction +11 -0
  629. package/dist/data/test/function/bigint3_mul1_hi.mcfunction +8 -0
  630. package/dist/data/test/function/bigint3_mul1_lo.mcfunction +8 -0
  631. package/dist/data/test/function/bigint3_mul1_mid.mcfunction +2 -0
  632. package/dist/data/test/function/bigint3_rem_chunk.mcfunction +11 -0
  633. package/dist/data/test/function/bigint3_sub_hi.mcfunction +8 -0
  634. package/dist/data/test/function/bigint3_sub_lo.mcfunction +6 -0
  635. package/dist/data/test/function/bigint3_sub_lo__merge_1.mcfunction +5 -0
  636. package/dist/data/test/function/bigint3_sub_lo__then_0.mcfunction +3 -0
  637. package/dist/data/test/function/bigint3_sub_mid.mcfunction +13 -0
  638. package/dist/data/test/function/bigint3_sub_mid__merge_1.mcfunction +1 -0
  639. package/dist/data/test/function/bigint3_sub_mid__then_0.mcfunction +4 -0
  640. package/dist/data/test/function/bigint3_to_int32.mcfunction +14 -0
  641. package/dist/data/test/function/bigint_base.mcfunction +2 -0
  642. package/dist/data/test/function/bit_and.mcfunction +6 -0
  643. package/dist/data/test/function/bit_and__loop_body_1.mcfunction +10 -0
  644. package/dist/data/test/function/bit_and__loop_exit_2.mcfunction +1 -0
  645. package/dist/data/test/function/bit_and__loop_header_0.mcfunction +5 -0
  646. package/dist/data/test/function/bit_and__merge_4.mcfunction +8 -0
  647. package/dist/data/test/function/bit_and__merge_6.mcfunction +1 -0
  648. package/dist/data/test/function/bit_and__then_3.mcfunction +10 -0
  649. package/dist/data/test/function/bit_and__then_5.mcfunction +4 -0
  650. package/dist/data/test/function/bit_clear.mcfunction +5 -0
  651. package/dist/data/test/function/bit_clear__loop_body_1.mcfunction +8 -0
  652. package/dist/data/test/function/bit_clear__loop_exit_2.mcfunction +10 -0
  653. package/dist/data/test/function/bit_clear__loop_header_0.mcfunction +4 -0
  654. package/dist/data/test/function/bit_clear__merge_4.mcfunction +1 -0
  655. package/dist/data/test/function/bit_clear__then_3.mcfunction +3 -0
  656. package/dist/data/test/function/bit_get.mcfunction +5 -0
  657. package/dist/data/test/function/bit_get__loop_body_1.mcfunction +8 -0
  658. package/dist/data/test/function/bit_get__loop_exit_2.mcfunction +6 -0
  659. package/dist/data/test/function/bit_get__loop_header_0.mcfunction +4 -0
  660. package/dist/data/test/function/bit_not.mcfunction +5 -0
  661. package/dist/data/test/function/bit_not__loop_body_1.mcfunction +10 -0
  662. package/dist/data/test/function/bit_not__loop_exit_2.mcfunction +1 -0
  663. package/dist/data/test/function/bit_not__loop_header_0.mcfunction +5 -0
  664. package/dist/data/test/function/bit_not__merge_4.mcfunction +8 -0
  665. package/dist/data/test/function/bit_not__then_3.mcfunction +4 -0
  666. package/dist/data/test/function/bit_or.mcfunction +6 -0
  667. package/dist/data/test/function/bit_or__loop_body_1.mcfunction +10 -0
  668. package/dist/data/test/function/bit_or__loop_exit_2.mcfunction +1 -0
  669. package/dist/data/test/function/bit_or__loop_header_0.mcfunction +5 -0
  670. package/dist/data/test/function/bit_or__merge_4.mcfunction +10 -0
  671. package/dist/data/test/function/bit_or__merge_6.mcfunction +8 -0
  672. package/dist/data/test/function/bit_or__merge_8.mcfunction +1 -0
  673. package/dist/data/test/function/bit_or__then_3.mcfunction +4 -0
  674. package/dist/data/test/function/bit_or__then_5.mcfunction +10 -0
  675. package/dist/data/test/function/bit_or__then_7.mcfunction +4 -0
  676. package/dist/data/test/function/bit_set.mcfunction +5 -0
  677. package/dist/data/test/function/bit_set__loop_body_1.mcfunction +8 -0
  678. package/dist/data/test/function/bit_set__loop_exit_2.mcfunction +10 -0
  679. package/dist/data/test/function/bit_set__loop_header_0.mcfunction +4 -0
  680. package/dist/data/test/function/bit_set__merge_4.mcfunction +1 -0
  681. package/dist/data/test/function/bit_set__then_3.mcfunction +3 -0
  682. package/dist/data/test/function/bit_shl.mcfunction +5 -0
  683. package/dist/data/test/function/bit_shl__loop_body_1.mcfunction +8 -0
  684. package/dist/data/test/function/bit_shl__loop_exit_2.mcfunction +1 -0
  685. package/dist/data/test/function/bit_shl__loop_header_0.mcfunction +4 -0
  686. package/dist/data/test/function/bit_shr.mcfunction +5 -0
  687. package/dist/data/test/function/bit_shr__loop_body_1.mcfunction +8 -0
  688. package/dist/data/test/function/bit_shr__loop_exit_2.mcfunction +1 -0
  689. package/dist/data/test/function/bit_shr__loop_header_0.mcfunction +4 -0
  690. package/dist/data/test/function/bit_toggle.mcfunction +5 -0
  691. package/dist/data/test/function/bit_toggle__loop_body_1.mcfunction +8 -0
  692. package/dist/data/test/function/bit_toggle__loop_exit_2.mcfunction +10 -0
  693. package/dist/data/test/function/bit_toggle__loop_header_0.mcfunction +4 -0
  694. package/dist/data/test/function/bit_toggle__merge_4.mcfunction +3 -0
  695. package/dist/data/test/function/bit_toggle__then_3.mcfunction +3 -0
  696. package/dist/data/test/function/bit_xor.mcfunction +6 -0
  697. package/dist/data/test/function/bit_xor__loop_body_1.mcfunction +14 -0
  698. package/dist/data/test/function/bit_xor__loop_exit_2.mcfunction +1 -0
  699. package/dist/data/test/function/bit_xor__loop_header_0.mcfunction +5 -0
  700. package/dist/data/test/function/bit_xor__merge_4.mcfunction +8 -0
  701. package/dist/data/test/function/bit_xor__then_3.mcfunction +4 -0
  702. package/dist/data/test/function/cbrt_fx.mcfunction +6 -0
  703. package/dist/data/test/function/cbrt_fx__loop_body_6.mcfunction +8 -0
  704. package/dist/data/test/function/cbrt_fx__loop_exit_7.mcfunction +1 -0
  705. package/dist/data/test/function/cbrt_fx__loop_header_5.mcfunction +5 -0
  706. package/dist/data/test/function/cbrt_fx__merge_1.mcfunction +9 -0
  707. package/dist/data/test/function/cbrt_fx__merge_11.mcfunction +6 -0
  708. package/dist/data/test/function/cbrt_fx__merge_13.mcfunction +4 -0
  709. package/dist/data/test/function/cbrt_fx__merge_4.mcfunction +2 -0
  710. package/dist/data/test/function/cbrt_fx__merge_9.mcfunction +14 -0
  711. package/dist/data/test/function/cbrt_fx__then_0.mcfunction +2 -0
  712. package/dist/data/test/function/cbrt_fx__then_10.mcfunction +2 -0
  713. package/dist/data/test/function/cbrt_fx__then_12.mcfunction +2 -0
  714. package/dist/data/test/function/cbrt_fx__then_3.mcfunction +2 -0
  715. package/dist/data/test/function/cbrt_fx__then_8.mcfunction +2 -0
  716. package/dist/data/test/function/ceil_div.mcfunction +9 -0
  717. package/dist/data/test/function/chebyshev.mcfunction +15 -0
  718. package/dist/data/test/function/chebyshev3d.mcfunction +20 -0
  719. package/dist/data/test/function/chebyshev3d__merge_1.mcfunction +5 -0
  720. package/dist/data/test/function/chebyshev3d__merge_3.mcfunction +5 -0
  721. package/dist/data/test/function/chebyshev3d__merge_5.mcfunction +5 -0
  722. package/dist/data/test/function/chebyshev3d__merge_7.mcfunction +4 -0
  723. package/dist/data/test/function/chebyshev3d__merge_9.mcfunction +1 -0
  724. package/dist/data/test/function/chebyshev3d__then_0.mcfunction +4 -0
  725. package/dist/data/test/function/chebyshev3d__then_2.mcfunction +4 -0
  726. package/dist/data/test/function/chebyshev3d__then_4.mcfunction +4 -0
  727. package/dist/data/test/function/chebyshev3d__then_6.mcfunction +2 -0
  728. package/dist/data/test/function/chebyshev3d__then_8.mcfunction +2 -0
  729. package/dist/data/test/function/chebyshev__merge_1.mcfunction +5 -0
  730. package/dist/data/test/function/chebyshev__merge_3.mcfunction +4 -0
  731. package/dist/data/test/function/chebyshev__merge_5.mcfunction +1 -0
  732. package/dist/data/test/function/chebyshev__then_0.mcfunction +4 -0
  733. package/dist/data/test/function/chebyshev__then_2.mcfunction +4 -0
  734. package/dist/data/test/function/chebyshev__then_4.mcfunction +1 -0
  735. package/dist/data/test/function/chunk_hi.mcfunction +5 -0
  736. package/dist/data/test/function/chunk_lo.mcfunction +5 -0
  737. package/dist/data/test/function/clamp3.mcfunction +7 -0
  738. package/dist/data/test/function/clamp3__merge_1.mcfunction +4 -0
  739. package/dist/data/test/function/clamp3__merge_4.mcfunction +1 -0
  740. package/dist/data/test/function/clamp3__then_0.mcfunction +1 -0
  741. package/dist/data/test/function/clamp3__then_3.mcfunction +1 -0
  742. package/dist/data/test/function/combinations.mcfunction +7 -0
  743. package/dist/data/test/function/combinations__loop_body_9.mcfunction +15 -0
  744. package/dist/data/test/function/combinations__loop_exit_10.mcfunction +1 -0
  745. package/dist/data/test/function/combinations__loop_header_8.mcfunction +4 -0
  746. package/dist/data/test/function/combinations__merge_1.mcfunction +4 -0
  747. package/dist/data/test/function/combinations__merge_4.mcfunction +7 -0
  748. package/dist/data/test/function/combinations__merge_7.mcfunction +3 -0
  749. package/dist/data/test/function/combinations__then_0.mcfunction +2 -0
  750. package/dist/data/test/function/combinations__then_3.mcfunction +2 -0
  751. package/dist/data/test/function/combinations__then_6.mcfunction +4 -0
  752. package/dist/data/test/function/cos_fixed.mcfunction +7 -0
  753. package/dist/data/test/function/cos_hp.mcfunction +6 -0
  754. package/dist/data/test/function/cross2d.mcfunction +11 -0
  755. package/dist/data/test/function/cross3d_x.mcfunction +11 -0
  756. package/dist/data/test/function/cross3d_y.mcfunction +11 -0
  757. package/dist/data/test/function/cross3d_z.mcfunction +11 -0
  758. package/dist/data/test/function/cylinder_contains.mcfunction +21 -0
  759. package/dist/data/test/function/cylinder_contains__merge_1.mcfunction +2 -0
  760. package/dist/data/test/function/cylinder_contains__then_0.mcfunction +2 -0
  761. package/dist/data/test/function/distance2d_fixed.mcfunction +13 -0
  762. package/dist/data/test/function/distance3d_fixed.mcfunction +18 -0
  763. package/dist/data/test/function/divfix.mcfunction +7 -0
  764. package/dist/data/test/function/divfix__merge_1.mcfunction +6 -0
  765. package/dist/data/test/function/divfix__then_0.mcfunction +2 -0
  766. package/dist/data/test/function/dot2d.mcfunction +11 -0
  767. package/dist/data/test/function/dot3d.mcfunction +17 -0
  768. package/dist/data/test/function/exp_dist_approx.mcfunction +13 -0
  769. package/dist/data/test/function/exp_dist_approx__merge_1.mcfunction +16 -0
  770. package/dist/data/test/function/exp_dist_approx__merge_3.mcfunction +11 -0
  771. package/dist/data/test/function/exp_dist_approx__merge_5.mcfunction +1 -0
  772. package/dist/data/test/function/exp_dist_approx__then_0.mcfunction +4 -0
  773. package/dist/data/test/function/exp_dist_approx__then_2.mcfunction +2 -0
  774. package/dist/data/test/function/exp_dist_approx__then_4.mcfunction +2 -0
  775. package/dist/data/test/function/exp_fx.mcfunction +17 -0
  776. package/dist/data/test/function/exp_fx__loop_body_10.mcfunction +8 -0
  777. package/dist/data/test/function/exp_fx__loop_body_5.mcfunction +8 -0
  778. package/dist/data/test/function/exp_fx__loop_exit_11.mcfunction +1 -0
  779. package/dist/data/test/function/exp_fx__loop_exit_6.mcfunction +1 -0
  780. package/dist/data/test/function/exp_fx__loop_header_4.mcfunction +4 -0
  781. package/dist/data/test/function/exp_fx__loop_header_9.mcfunction +4 -0
  782. package/dist/data/test/function/exp_fx__merge_1.mcfunction +48 -0
  783. package/dist/data/test/function/exp_fx__merge_3.mcfunction +5 -0
  784. package/dist/data/test/function/exp_fx__merge_8.mcfunction +1 -0
  785. package/dist/data/test/function/exp_fx__then_0.mcfunction +7 -0
  786. package/dist/data/test/function/exp_fx__then_2.mcfunction +2 -0
  787. package/dist/data/test/function/exp_fx__then_7.mcfunction +5 -0
  788. package/dist/data/test/function/factorial.mcfunction +6 -0
  789. package/dist/data/test/function/factorial__loop_body_4.mcfunction +7 -0
  790. package/dist/data/test/function/factorial__loop_exit_5.mcfunction +1 -0
  791. package/dist/data/test/function/factorial__loop_header_3.mcfunction +4 -0
  792. package/dist/data/test/function/factorial__merge_1.mcfunction +3 -0
  793. package/dist/data/test/function/factorial__then_0.mcfunction +2 -0
  794. package/dist/data/test/function/format_time_h.mcfunction +5 -0
  795. package/dist/data/test/function/format_time_m.mcfunction +8 -0
  796. package/dist/data/test/function/format_time_s.mcfunction +8 -0
  797. package/dist/data/test/function/gamma_int.mcfunction +6 -0
  798. package/dist/data/test/function/gamma_int__merge_1.mcfunction +6 -0
  799. package/dist/data/test/function/gamma_int__then_0.mcfunction +2 -0
  800. package/dist/data/test/function/gcd.mcfunction +8 -0
  801. package/dist/data/test/function/gcd__loop_body_5.mcfunction +5 -0
  802. package/dist/data/test/function/gcd__loop_exit_6.mcfunction +1 -0
  803. package/dist/data/test/function/gcd__loop_header_4.mcfunction +5 -0
  804. package/dist/data/test/function/gcd__merge_1.mcfunction +6 -0
  805. package/dist/data/test/function/gcd__merge_3.mcfunction +1 -0
  806. package/dist/data/test/function/gcd__then_0.mcfunction +4 -0
  807. package/dist/data/test/function/gcd__then_2.mcfunction +4 -0
  808. package/dist/data/test/function/hsl_to_b.mcfunction +24 -0
  809. package/dist/data/test/function/hsl_to_b__merge_1.mcfunction +30 -0
  810. package/dist/data/test/function/hsl_to_b__merge_12.mcfunction +5 -0
  811. package/dist/data/test/function/hsl_to_b__merge_15.mcfunction +3 -0
  812. package/dist/data/test/function/hsl_to_b__merge_3.mcfunction +5 -0
  813. package/dist/data/test/function/hsl_to_b__merge_6.mcfunction +5 -0
  814. package/dist/data/test/function/hsl_to_b__merge_9.mcfunction +5 -0
  815. package/dist/data/test/function/hsl_to_b__then_0.mcfunction +4 -0
  816. package/dist/data/test/function/hsl_to_b__then_11.mcfunction +3 -0
  817. package/dist/data/test/function/hsl_to_b__then_14.mcfunction +3 -0
  818. package/dist/data/test/function/hsl_to_b__then_2.mcfunction +1 -0
  819. package/dist/data/test/function/hsl_to_b__then_5.mcfunction +1 -0
  820. package/dist/data/test/function/hsl_to_b__then_8.mcfunction +3 -0
  821. package/dist/data/test/function/hsl_to_g.mcfunction +24 -0
  822. package/dist/data/test/function/hsl_to_g__merge_1.mcfunction +30 -0
  823. package/dist/data/test/function/hsl_to_g__merge_12.mcfunction +5 -0
  824. package/dist/data/test/function/hsl_to_g__merge_15.mcfunction +1 -0
  825. package/dist/data/test/function/hsl_to_g__merge_3.mcfunction +5 -0
  826. package/dist/data/test/function/hsl_to_g__merge_6.mcfunction +5 -0
  827. package/dist/data/test/function/hsl_to_g__merge_9.mcfunction +5 -0
  828. package/dist/data/test/function/hsl_to_g__then_0.mcfunction +4 -0
  829. package/dist/data/test/function/hsl_to_g__then_11.mcfunction +3 -0
  830. package/dist/data/test/function/hsl_to_g__then_14.mcfunction +1 -0
  831. package/dist/data/test/function/hsl_to_g__then_2.mcfunction +3 -0
  832. package/dist/data/test/function/hsl_to_g__then_5.mcfunction +3 -0
  833. package/dist/data/test/function/hsl_to_g__then_8.mcfunction +3 -0
  834. package/dist/data/test/function/hsl_to_packed.mcfunction +24 -0
  835. package/dist/data/test/function/hsl_to_r.mcfunction +24 -0
  836. package/dist/data/test/function/hsl_to_r__merge_1.mcfunction +30 -0
  837. package/dist/data/test/function/hsl_to_r__merge_12.mcfunction +5 -0
  838. package/dist/data/test/function/hsl_to_r__merge_15.mcfunction +3 -0
  839. package/dist/data/test/function/hsl_to_r__merge_3.mcfunction +5 -0
  840. package/dist/data/test/function/hsl_to_r__merge_6.mcfunction +5 -0
  841. package/dist/data/test/function/hsl_to_r__merge_9.mcfunction +5 -0
  842. package/dist/data/test/function/hsl_to_r__then_0.mcfunction +4 -0
  843. package/dist/data/test/function/hsl_to_r__then_11.mcfunction +1 -0
  844. package/dist/data/test/function/hsl_to_r__then_14.mcfunction +3 -0
  845. package/dist/data/test/function/hsl_to_r__then_2.mcfunction +3 -0
  846. package/dist/data/test/function/hsl_to_r__then_5.mcfunction +3 -0
  847. package/dist/data/test/function/hsl_to_r__then_8.mcfunction +1 -0
  848. package/dist/data/test/function/init_trig.mcfunction +1 -0
  849. package/dist/data/test/function/int32_to_bigint3_hi.mcfunction +6 -0
  850. package/dist/data/test/function/int32_to_bigint3_hi__merge_1.mcfunction +4 -0
  851. package/dist/data/test/function/int32_to_bigint3_hi__then_0.mcfunction +4 -0
  852. package/dist/data/test/function/int32_to_bigint3_lo.mcfunction +6 -0
  853. package/dist/data/test/function/int32_to_bigint3_lo__merge_1.mcfunction +4 -0
  854. package/dist/data/test/function/int32_to_bigint3_lo__then_0.mcfunction +4 -0
  855. package/dist/data/test/function/int32_to_bigint3_mid.mcfunction +6 -0
  856. package/dist/data/test/function/int32_to_bigint3_mid__merge_1.mcfunction +7 -0
  857. package/dist/data/test/function/int32_to_bigint3_mid__then_0.mcfunction +4 -0
  858. package/dist/data/test/function/isqrt.mcfunction +6 -0
  859. package/dist/data/test/function/isqrt__loop_body_10.mcfunction +8 -0
  860. package/dist/data/test/function/isqrt__loop_body_13.mcfunction +12 -0
  861. package/dist/data/test/function/isqrt__loop_body_7.mcfunction +8 -0
  862. package/dist/data/test/function/isqrt__loop_exit_11.mcfunction +2 -0
  863. package/dist/data/test/function/isqrt__loop_exit_14.mcfunction +1 -0
  864. package/dist/data/test/function/isqrt__loop_exit_8.mcfunction +9 -0
  865. package/dist/data/test/function/isqrt__loop_header_12.mcfunction +5 -0
  866. package/dist/data/test/function/isqrt__loop_header_6.mcfunction +5 -0
  867. package/dist/data/test/function/isqrt__loop_header_9.mcfunction +4 -0
  868. package/dist/data/test/function/isqrt__merge_1.mcfunction +5 -0
  869. package/dist/data/test/function/isqrt__merge_16.mcfunction +5 -0
  870. package/dist/data/test/function/isqrt__merge_4.mcfunction +3 -0
  871. package/dist/data/test/function/isqrt__then_0.mcfunction +2 -0
  872. package/dist/data/test/function/isqrt__then_15.mcfunction +1 -0
  873. package/dist/data/test/function/isqrt__then_3.mcfunction +2 -0
  874. package/dist/data/test/function/lcm.mcfunction +12 -0
  875. package/dist/data/test/function/lcm__merge_1.mcfunction +5 -0
  876. package/dist/data/test/function/lcm__then_0.mcfunction +2 -0
  877. package/dist/data/test/function/length2d_fixed.mcfunction +15 -0
  878. package/dist/data/test/function/length3d_fixed.mcfunction +20 -0
  879. package/dist/data/test/function/lerp.mcfunction +13 -0
  880. package/dist/data/test/function/lerp2d_x.mcfunction +13 -0
  881. package/dist/data/test/function/lerp2d_y.mcfunction +13 -0
  882. package/dist/data/test/function/list_avg.mcfunction +9 -0
  883. package/dist/data/test/function/list_clamp_all.mcfunction +6 -0
  884. package/dist/data/test/function/list_clamp_all__loop_body_1.mcfunction +4 -0
  885. package/dist/data/test/function/list_clamp_all__loop_exit_2.mcfunction +1 -0
  886. package/dist/data/test/function/list_clamp_all__loop_header_0.mcfunction +4 -0
  887. package/dist/data/test/function/list_clamp_all__merge_4.mcfunction +4 -0
  888. package/dist/data/test/function/list_clamp_all__merge_6.mcfunction +4 -0
  889. package/dist/data/test/function/list_clamp_all__then_3.mcfunction +1 -0
  890. package/dist/data/test/function/list_clamp_all__then_5.mcfunction +1 -0
  891. package/dist/data/test/function/list_contains.mcfunction +5 -0
  892. package/dist/data/test/function/list_contains__loop_body_1.mcfunction +4 -0
  893. package/dist/data/test/function/list_contains__loop_exit_2.mcfunction +2 -0
  894. package/dist/data/test/function/list_contains__loop_header_0.mcfunction +4 -0
  895. package/dist/data/test/function/list_contains__merge_4.mcfunction +4 -0
  896. package/dist/data/test/function/list_contains__then_3.mcfunction +2 -0
  897. package/dist/data/test/function/list_count_if_gt.mcfunction +6 -0
  898. package/dist/data/test/function/list_count_if_gt__loop_body_1.mcfunction +4 -0
  899. package/dist/data/test/function/list_count_if_gt__loop_exit_2.mcfunction +1 -0
  900. package/dist/data/test/function/list_count_if_gt__loop_header_0.mcfunction +4 -0
  901. package/dist/data/test/function/list_count_if_gt__merge_4.mcfunction +4 -0
  902. package/dist/data/test/function/list_count_if_gt__then_3.mcfunction +4 -0
  903. package/dist/data/test/function/list_fill.mcfunction +3 -0
  904. package/dist/data/test/function/list_fill__loop_body_1.mcfunction +4 -0
  905. package/dist/data/test/function/list_fill__loop_exit_2.mcfunction +1 -0
  906. package/dist/data/test/function/list_fill__loop_header_0.mcfunction +4 -0
  907. package/dist/data/test/function/list_index_of.mcfunction +5 -0
  908. package/dist/data/test/function/list_index_of__loop_body_1.mcfunction +4 -0
  909. package/dist/data/test/function/list_index_of__loop_exit_2.mcfunction +2 -0
  910. package/dist/data/test/function/list_index_of__loop_header_0.mcfunction +4 -0
  911. package/dist/data/test/function/list_index_of__merge_4.mcfunction +4 -0
  912. package/dist/data/test/function/list_index_of__then_3.mcfunction +1 -0
  913. package/dist/data/test/function/list_max.mcfunction +5 -0
  914. package/dist/data/test/function/list_max3.mcfunction +8 -0
  915. package/dist/data/test/function/list_max3__merge_1.mcfunction +4 -0
  916. package/dist/data/test/function/list_max3__merge_3.mcfunction +1 -0
  917. package/dist/data/test/function/list_max3__then_0.mcfunction +2 -0
  918. package/dist/data/test/function/list_max3__then_2.mcfunction +2 -0
  919. package/dist/data/test/function/list_max5.mcfunction +10 -0
  920. package/dist/data/test/function/list_max5__merge_1.mcfunction +4 -0
  921. package/dist/data/test/function/list_max5__merge_3.mcfunction +4 -0
  922. package/dist/data/test/function/list_max5__merge_5.mcfunction +4 -0
  923. package/dist/data/test/function/list_max5__merge_7.mcfunction +1 -0
  924. package/dist/data/test/function/list_max5__then_0.mcfunction +2 -0
  925. package/dist/data/test/function/list_max5__then_2.mcfunction +2 -0
  926. package/dist/data/test/function/list_max5__then_4.mcfunction +2 -0
  927. package/dist/data/test/function/list_max5__then_6.mcfunction +2 -0
  928. package/dist/data/test/function/list_max__loop_body_1.mcfunction +4 -0
  929. package/dist/data/test/function/list_max__loop_exit_2.mcfunction +1 -0
  930. package/dist/data/test/function/list_max__loop_header_0.mcfunction +4 -0
  931. package/dist/data/test/function/list_max__merge_4.mcfunction +4 -0
  932. package/dist/data/test/function/list_max__then_3.mcfunction +2 -0
  933. package/dist/data/test/function/list_min.mcfunction +5 -0
  934. package/dist/data/test/function/list_min3.mcfunction +8 -0
  935. package/dist/data/test/function/list_min3__merge_1.mcfunction +4 -0
  936. package/dist/data/test/function/list_min3__merge_3.mcfunction +1 -0
  937. package/dist/data/test/function/list_min3__then_0.mcfunction +2 -0
  938. package/dist/data/test/function/list_min3__then_2.mcfunction +2 -0
  939. package/dist/data/test/function/list_min5.mcfunction +10 -0
  940. package/dist/data/test/function/list_min5__merge_1.mcfunction +4 -0
  941. package/dist/data/test/function/list_min5__merge_3.mcfunction +4 -0
  942. package/dist/data/test/function/list_min5__merge_5.mcfunction +4 -0
  943. package/dist/data/test/function/list_min5__merge_7.mcfunction +1 -0
  944. package/dist/data/test/function/list_min5__then_0.mcfunction +2 -0
  945. package/dist/data/test/function/list_min5__then_2.mcfunction +2 -0
  946. package/dist/data/test/function/list_min5__then_4.mcfunction +2 -0
  947. package/dist/data/test/function/list_min5__then_6.mcfunction +2 -0
  948. package/dist/data/test/function/list_min__loop_body_1.mcfunction +4 -0
  949. package/dist/data/test/function/list_min__loop_exit_2.mcfunction +1 -0
  950. package/dist/data/test/function/list_min__loop_header_0.mcfunction +4 -0
  951. package/dist/data/test/function/list_min__merge_4.mcfunction +4 -0
  952. package/dist/data/test/function/list_min__then_3.mcfunction +2 -0
  953. package/dist/data/test/function/list_reverse.mcfunction +6 -0
  954. package/dist/data/test/function/list_reverse__loop_body_1.mcfunction +9 -0
  955. package/dist/data/test/function/list_reverse__loop_exit_2.mcfunction +1 -0
  956. package/dist/data/test/function/list_reverse__loop_header_0.mcfunction +4 -0
  957. package/dist/data/test/function/list_sort_asc.mcfunction +4 -0
  958. package/dist/data/test/function/list_sort_asc__loop_body_1.mcfunction +2 -0
  959. package/dist/data/test/function/list_sort_asc__loop_body_4.mcfunction +4 -0
  960. package/dist/data/test/function/list_sort_asc__loop_exit_2.mcfunction +1 -0
  961. package/dist/data/test/function/list_sort_asc__loop_exit_5.mcfunction +4 -0
  962. package/dist/data/test/function/list_sort_asc__loop_header_0.mcfunction +6 -0
  963. package/dist/data/test/function/list_sort_asc__loop_header_3.mcfunction +8 -0
  964. package/dist/data/test/function/list_sort_asc__merge_7.mcfunction +4 -0
  965. package/dist/data/test/function/list_sort_asc__then_6.mcfunction +1 -0
  966. package/dist/data/test/function/list_sort_desc.mcfunction +4 -0
  967. package/dist/data/test/function/list_sort_desc__loop_body_1.mcfunction +2 -0
  968. package/dist/data/test/function/list_sort_desc__loop_body_4.mcfunction +4 -0
  969. package/dist/data/test/function/list_sort_desc__loop_exit_2.mcfunction +1 -0
  970. package/dist/data/test/function/list_sort_desc__loop_exit_5.mcfunction +4 -0
  971. package/dist/data/test/function/list_sort_desc__loop_header_0.mcfunction +6 -0
  972. package/dist/data/test/function/list_sort_desc__loop_header_3.mcfunction +8 -0
  973. package/dist/data/test/function/list_sort_desc__merge_7.mcfunction +4 -0
  974. package/dist/data/test/function/list_sort_desc__then_6.mcfunction +1 -0
  975. package/dist/data/test/function/list_sum.mcfunction +5 -0
  976. package/dist/data/test/function/list_sum3.mcfunction +8 -0
  977. package/dist/data/test/function/list_sum4.mcfunction +11 -0
  978. package/dist/data/test/function/list_sum5.mcfunction +14 -0
  979. package/dist/data/test/function/list_sum__loop_body_1.mcfunction +7 -0
  980. package/dist/data/test/function/list_sum__loop_exit_2.mcfunction +1 -0
  981. package/dist/data/test/function/list_sum__loop_header_0.mcfunction +4 -0
  982. package/dist/data/test/function/ln.mcfunction +9 -0
  983. package/dist/data/test/function/ln__loop_body_1.mcfunction +8 -0
  984. package/dist/data/test/function/ln__loop_body_4.mcfunction +8 -0
  985. package/dist/data/test/function/ln__loop_exit_2.mcfunction +1 -0
  986. package/dist/data/test/function/ln__loop_exit_5.mcfunction +37 -0
  987. package/dist/data/test/function/ln__loop_header_0.mcfunction +4 -0
  988. package/dist/data/test/function/ln__loop_header_3.mcfunction +7 -0
  989. package/dist/data/test/function/load.mcfunction +1 -0
  990. package/dist/data/test/function/log10_fx.mcfunction +11 -0
  991. package/dist/data/test/function/log2_fx.mcfunction +11 -0
  992. package/dist/data/test/function/log2_int.mcfunction +6 -0
  993. package/dist/data/test/function/log2_int__loop_body_4.mcfunction +8 -0
  994. package/dist/data/test/function/log2_int__loop_exit_5.mcfunction +1 -0
  995. package/dist/data/test/function/log2_int__loop_header_3.mcfunction +5 -0
  996. package/dist/data/test/function/log2_int__merge_1.mcfunction +3 -0
  997. package/dist/data/test/function/log2_int__then_0.mcfunction +2 -0
  998. package/dist/data/test/function/loga_fx.mcfunction +11 -0
  999. package/dist/data/test/function/loga_fx__merge_1.mcfunction +9 -0
  1000. package/dist/data/test/function/loga_fx__then_0.mcfunction +2 -0
  1001. package/dist/data/test/function/manhattan.mcfunction +15 -0
  1002. package/dist/data/test/function/manhattan3d.mcfunction +20 -0
  1003. package/dist/data/test/function/manhattan3d__merge_1.mcfunction +5 -0
  1004. package/dist/data/test/function/manhattan3d__merge_3.mcfunction +5 -0
  1005. package/dist/data/test/function/manhattan3d__merge_5.mcfunction +5 -0
  1006. package/dist/data/test/function/manhattan3d__then_0.mcfunction +4 -0
  1007. package/dist/data/test/function/manhattan3d__then_2.mcfunction +4 -0
  1008. package/dist/data/test/function/manhattan3d__then_4.mcfunction +4 -0
  1009. package/dist/data/test/function/manhattan__merge_1.mcfunction +5 -0
  1010. package/dist/data/test/function/manhattan__merge_3.mcfunction +3 -0
  1011. package/dist/data/test/function/manhattan__then_0.mcfunction +4 -0
  1012. package/dist/data/test/function/manhattan__then_2.mcfunction +4 -0
  1013. package/dist/data/test/function/map.mcfunction +13 -0
  1014. package/dist/data/test/function/map__merge_1.mcfunction +11 -0
  1015. package/dist/data/test/function/map__then_0.mcfunction +1 -0
  1016. package/dist/data/test/function/mc_day_angle.mcfunction +16 -0
  1017. package/dist/data/test/function/midpoint.mcfunction +8 -0
  1018. package/dist/data/test/function/mulfix.mcfunction +8 -0
  1019. package/dist/data/test/function/neg2d_x.mcfunction +4 -0
  1020. package/dist/data/test/function/neg2d_y.mcfunction +4 -0
  1021. package/dist/data/test/function/neg3d_x.mcfunction +4 -0
  1022. package/dist/data/test/function/neg3d_y.mcfunction +4 -0
  1023. package/dist/data/test/function/neg3d_z.mcfunction +4 -0
  1024. package/dist/data/test/function/next_lcg.mcfunction +7 -0
  1025. package/dist/data/test/function/normal_approx12.mcfunction +16 -0
  1026. package/dist/data/test/function/normal_approx12__merge_1.mcfunction +18 -0
  1027. package/dist/data/test/function/normal_approx12__merge_11.mcfunction +18 -0
  1028. package/dist/data/test/function/normal_approx12__merge_13.mcfunction +18 -0
  1029. package/dist/data/test/function/normal_approx12__merge_15.mcfunction +18 -0
  1030. package/dist/data/test/function/normal_approx12__merge_17.mcfunction +18 -0
  1031. package/dist/data/test/function/normal_approx12__merge_19.mcfunction +18 -0
  1032. package/dist/data/test/function/normal_approx12__merge_21.mcfunction +18 -0
  1033. package/dist/data/test/function/normal_approx12__merge_23.mcfunction +9 -0
  1034. package/dist/data/test/function/normal_approx12__merge_3.mcfunction +18 -0
  1035. package/dist/data/test/function/normal_approx12__merge_5.mcfunction +18 -0
  1036. package/dist/data/test/function/normal_approx12__merge_7.mcfunction +18 -0
  1037. package/dist/data/test/function/normal_approx12__merge_9.mcfunction +18 -0
  1038. package/dist/data/test/function/normal_approx12__then_0.mcfunction +4 -0
  1039. package/dist/data/test/function/normal_approx12__then_10.mcfunction +4 -0
  1040. package/dist/data/test/function/normal_approx12__then_12.mcfunction +4 -0
  1041. package/dist/data/test/function/normal_approx12__then_14.mcfunction +4 -0
  1042. package/dist/data/test/function/normal_approx12__then_16.mcfunction +4 -0
  1043. package/dist/data/test/function/normal_approx12__then_18.mcfunction +4 -0
  1044. package/dist/data/test/function/normal_approx12__then_2.mcfunction +4 -0
  1045. package/dist/data/test/function/normal_approx12__then_20.mcfunction +4 -0
  1046. package/dist/data/test/function/normal_approx12__then_22.mcfunction +4 -0
  1047. package/dist/data/test/function/normal_approx12__then_4.mcfunction +4 -0
  1048. package/dist/data/test/function/normal_approx12__then_6.mcfunction +4 -0
  1049. package/dist/data/test/function/normal_approx12__then_8.mcfunction +4 -0
  1050. package/dist/data/test/function/normalize2d_x.mcfunction +12 -0
  1051. package/dist/data/test/function/normalize2d_x__merge_1.mcfunction +6 -0
  1052. package/dist/data/test/function/normalize2d_x__then_0.mcfunction +2 -0
  1053. package/dist/data/test/function/normalize2d_y.mcfunction +12 -0
  1054. package/dist/data/test/function/normalize2d_y__merge_1.mcfunction +6 -0
  1055. package/dist/data/test/function/normalize2d_y__then_0.mcfunction +2 -0
  1056. package/dist/data/test/function/parabola_land_t.mcfunction +7 -0
  1057. package/dist/data/test/function/parabola_x.mcfunction +8 -0
  1058. package/dist/data/test/function/parabola_y.mcfunction +17 -0
  1059. package/dist/data/test/function/pcg_next_hi.mcfunction +8 -0
  1060. package/dist/data/test/function/pcg_next_lo.mcfunction +7 -0
  1061. package/dist/data/test/function/pcg_output.mcfunction +15 -0
  1062. package/dist/data/test/function/pcg_output__merge_1.mcfunction +1 -0
  1063. package/dist/data/test/function/pcg_output__then_0.mcfunction +4 -0
  1064. package/dist/data/test/function/popcount.mcfunction +5 -0
  1065. package/dist/data/test/function/popcount__loop_body_1.mcfunction +8 -0
  1066. package/dist/data/test/function/popcount__loop_exit_2.mcfunction +1 -0
  1067. package/dist/data/test/function/popcount__loop_header_0.mcfunction +5 -0
  1068. package/dist/data/test/function/popcount__merge_4.mcfunction +8 -0
  1069. package/dist/data/test/function/popcount__then_3.mcfunction +4 -0
  1070. package/dist/data/test/function/pow_int.mcfunction +7 -0
  1071. package/dist/data/test/function/pow_int__loop_body_4.mcfunction +8 -0
  1072. package/dist/data/test/function/pow_int__loop_exit_5.mcfunction +1 -0
  1073. package/dist/data/test/function/pow_int__loop_header_3.mcfunction +5 -0
  1074. package/dist/data/test/function/pow_int__merge_1.mcfunction +4 -0
  1075. package/dist/data/test/function/pow_int__merge_7.mcfunction +8 -0
  1076. package/dist/data/test/function/pow_int__then_0.mcfunction +2 -0
  1077. package/dist/data/test/function/pow_int__then_6.mcfunction +4 -0
  1078. package/dist/data/test/function/quadratic_disc.mcfunction +12 -0
  1079. package/dist/data/test/function/quadratic_x1.mcfunction +8 -0
  1080. package/dist/data/test/function/quadratic_x1__merge_1.mcfunction +14 -0
  1081. package/dist/data/test/function/quadratic_x1__merge_4.mcfunction +15 -0
  1082. package/dist/data/test/function/quadratic_x1__then_0.mcfunction +2 -0
  1083. package/dist/data/test/function/quadratic_x1__then_3.mcfunction +2 -0
  1084. package/dist/data/test/function/quadratic_x2.mcfunction +8 -0
  1085. package/dist/data/test/function/quadratic_x2__merge_1.mcfunction +14 -0
  1086. package/dist/data/test/function/quadratic_x2__merge_4.mcfunction +15 -0
  1087. package/dist/data/test/function/quadratic_x2__then_0.mcfunction +2 -0
  1088. package/dist/data/test/function/quadratic_x2__then_3.mcfunction +2 -0
  1089. package/dist/data/test/function/random_bool.mcfunction +7 -0
  1090. package/dist/data/test/function/random_bool__merge_1.mcfunction +4 -0
  1091. package/dist/data/test/function/random_bool__then_0.mcfunction +4 -0
  1092. package/dist/data/test/function/random_range.mcfunction +9 -0
  1093. package/dist/data/test/function/random_range__merge_1.mcfunction +7 -0
  1094. package/dist/data/test/function/random_range__then_0.mcfunction +4 -0
  1095. package/dist/data/test/function/rgb_b.mcfunction +5 -0
  1096. package/dist/data/test/function/rgb_g.mcfunction +8 -0
  1097. package/dist/data/test/function/rgb_lerp.mcfunction +71 -0
  1098. package/dist/data/test/function/rgb_pack.mcfunction +14 -0
  1099. package/dist/data/test/function/rgb_r.mcfunction +8 -0
  1100. package/dist/data/test/function/rgb_to_h.mcfunction +8 -0
  1101. package/dist/data/test/function/rgb_to_h__merge_1.mcfunction +4 -0
  1102. package/dist/data/test/function/rgb_to_h__merge_12.mcfunction +4 -0
  1103. package/dist/data/test/function/rgb_to_h__merge_14.mcfunction +1 -0
  1104. package/dist/data/test/function/rgb_to_h__merge_17.mcfunction +9 -0
  1105. package/dist/data/test/function/rgb_to_h__merge_3.mcfunction +5 -0
  1106. package/dist/data/test/function/rgb_to_h__merge_5.mcfunction +4 -0
  1107. package/dist/data/test/function/rgb_to_h__merge_7.mcfunction +8 -0
  1108. package/dist/data/test/function/rgb_to_h__merge_9.mcfunction +4 -0
  1109. package/dist/data/test/function/rgb_to_h__then_0.mcfunction +2 -0
  1110. package/dist/data/test/function/rgb_to_h__then_11.mcfunction +12 -0
  1111. package/dist/data/test/function/rgb_to_h__then_13.mcfunction +4 -0
  1112. package/dist/data/test/function/rgb_to_h__then_16.mcfunction +9 -0
  1113. package/dist/data/test/function/rgb_to_h__then_2.mcfunction +2 -0
  1114. package/dist/data/test/function/rgb_to_h__then_4.mcfunction +2 -0
  1115. package/dist/data/test/function/rgb_to_h__then_6.mcfunction +2 -0
  1116. package/dist/data/test/function/rgb_to_h__then_8.mcfunction +2 -0
  1117. package/dist/data/test/function/rgb_to_l.mcfunction +8 -0
  1118. package/dist/data/test/function/rgb_to_l__merge_1.mcfunction +4 -0
  1119. package/dist/data/test/function/rgb_to_l__merge_3.mcfunction +5 -0
  1120. package/dist/data/test/function/rgb_to_l__merge_5.mcfunction +4 -0
  1121. package/dist/data/test/function/rgb_to_l__merge_7.mcfunction +9 -0
  1122. package/dist/data/test/function/rgb_to_l__then_0.mcfunction +2 -0
  1123. package/dist/data/test/function/rgb_to_l__then_2.mcfunction +2 -0
  1124. package/dist/data/test/function/rgb_to_l__then_4.mcfunction +2 -0
  1125. package/dist/data/test/function/rgb_to_l__then_6.mcfunction +2 -0
  1126. package/dist/data/test/function/rgb_to_s.mcfunction +8 -0
  1127. package/dist/data/test/function/rgb_to_s__merge_1.mcfunction +4 -0
  1128. package/dist/data/test/function/rgb_to_s__merge_12.mcfunction +10 -0
  1129. package/dist/data/test/function/rgb_to_s__merge_3.mcfunction +5 -0
  1130. package/dist/data/test/function/rgb_to_s__merge_5.mcfunction +4 -0
  1131. package/dist/data/test/function/rgb_to_s__merge_7.mcfunction +8 -0
  1132. package/dist/data/test/function/rgb_to_s__merge_9.mcfunction +13 -0
  1133. package/dist/data/test/function/rgb_to_s__then_0.mcfunction +2 -0
  1134. package/dist/data/test/function/rgb_to_s__then_11.mcfunction +8 -0
  1135. package/dist/data/test/function/rgb_to_s__then_2.mcfunction +2 -0
  1136. package/dist/data/test/function/rgb_to_s__then_4.mcfunction +2 -0
  1137. package/dist/data/test/function/rgb_to_s__then_6.mcfunction +2 -0
  1138. package/dist/data/test/function/rgb_to_s__then_8.mcfunction +2 -0
  1139. package/dist/data/test/function/rotate2d_x.mcfunction +20 -0
  1140. package/dist/data/test/function/rotate2d_y.mcfunction +20 -0
  1141. package/dist/data/test/function/scale2d_x.mcfunction +8 -0
  1142. package/dist/data/test/function/scale2d_y.mcfunction +8 -0
  1143. package/dist/data/test/function/scale3d_x.mcfunction +8 -0
  1144. package/dist/data/test/function/scale3d_y.mcfunction +8 -0
  1145. package/dist/data/test/function/scale3d_z.mcfunction +8 -0
  1146. package/dist/data/test/function/seconds_to_ticks.mcfunction +5 -0
  1147. package/dist/data/test/function/sign.mcfunction +6 -0
  1148. package/dist/data/test/function/sign__merge_1.mcfunction +5 -0
  1149. package/dist/data/test/function/sign__merge_4.mcfunction +2 -0
  1150. package/dist/data/test/function/sign__then_0.mcfunction +2 -0
  1151. package/dist/data/test/function/sign__then_3.mcfunction +2 -0
  1152. package/dist/data/test/function/sin_fixed.mcfunction +10 -0
  1153. package/dist/data/test/function/sin_fixed__merge_1.mcfunction +5 -0
  1154. package/dist/data/test/function/sin_fixed__merge_3.mcfunction +5 -0
  1155. package/dist/data/test/function/sin_fixed__merge_6.mcfunction +5 -0
  1156. package/dist/data/test/function/sin_fixed__merge_9.mcfunction +10 -0
  1157. package/dist/data/test/function/sin_fixed__then_0.mcfunction +4 -0
  1158. package/dist/data/test/function/sin_fixed__then_2.mcfunction +6 -0
  1159. package/dist/data/test/function/sin_fixed__then_5.mcfunction +8 -0
  1160. package/dist/data/test/function/sin_fixed__then_8.mcfunction +10 -0
  1161. package/dist/data/test/function/sin_hp.mcfunction +6 -0
  1162. package/dist/data/test/function/smootherstep.mcfunction +11 -0
  1163. package/dist/data/test/function/smootherstep__merge_1.mcfunction +13 -0
  1164. package/dist/data/test/function/smootherstep__merge_4.mcfunction +5 -0
  1165. package/dist/data/test/function/smootherstep__merge_6.mcfunction +27 -0
  1166. package/dist/data/test/function/smootherstep__then_0.mcfunction +2 -0
  1167. package/dist/data/test/function/smootherstep__then_3.mcfunction +2 -0
  1168. package/dist/data/test/function/smootherstep__then_5.mcfunction +2 -0
  1169. package/dist/data/test/function/smoothstep.mcfunction +11 -0
  1170. package/dist/data/test/function/smoothstep__merge_1.mcfunction +13 -0
  1171. package/dist/data/test/function/smoothstep__merge_4.mcfunction +5 -0
  1172. package/dist/data/test/function/smoothstep__merge_6.mcfunction +15 -0
  1173. package/dist/data/test/function/smoothstep__then_0.mcfunction +2 -0
  1174. package/dist/data/test/function/smoothstep__then_3.mcfunction +2 -0
  1175. package/dist/data/test/function/smoothstep__then_5.mcfunction +2 -0
  1176. package/dist/data/test/function/solve2x2_x.mcfunction +18 -0
  1177. package/dist/data/test/function/solve2x2_x__merge_1.mcfunction +12 -0
  1178. package/dist/data/test/function/solve2x2_x__then_0.mcfunction +2 -0
  1179. package/dist/data/test/function/solve2x2_y.mcfunction +18 -0
  1180. package/dist/data/test/function/solve2x2_y__merge_1.mcfunction +12 -0
  1181. package/dist/data/test/function/solve2x2_y__then_0.mcfunction +2 -0
  1182. package/dist/data/test/function/sort2_max.mcfunction +6 -0
  1183. package/dist/data/test/function/sort2_max__merge_1.mcfunction +1 -0
  1184. package/dist/data/test/function/sort2_max__then_0.mcfunction +1 -0
  1185. package/dist/data/test/function/sort2_min.mcfunction +6 -0
  1186. package/dist/data/test/function/sort2_min__merge_1.mcfunction +1 -0
  1187. package/dist/data/test/function/sort2_min__then_0.mcfunction +1 -0
  1188. package/dist/data/test/function/sort3.mcfunction +11 -0
  1189. package/dist/data/test/function/sort3__merge_1.mcfunction +4 -0
  1190. package/dist/data/test/function/sort3__merge_10.mcfunction +1 -0
  1191. package/dist/data/test/function/sort3__merge_3.mcfunction +4 -0
  1192. package/dist/data/test/function/sort3__merge_5.mcfunction +5 -0
  1193. package/dist/data/test/function/sort3__merge_7.mcfunction +5 -0
  1194. package/dist/data/test/function/sort3__then_0.mcfunction +4 -0
  1195. package/dist/data/test/function/sort3__then_2.mcfunction +4 -0
  1196. package/dist/data/test/function/sort3__then_4.mcfunction +4 -0
  1197. package/dist/data/test/function/sort3__then_6.mcfunction +1 -0
  1198. package/dist/data/test/function/sort3__then_9.mcfunction +1 -0
  1199. package/dist/data/test/function/sort4.mcfunction +13 -0
  1200. package/dist/data/test/function/sort4__merge_1.mcfunction +4 -0
  1201. package/dist/data/test/function/sort4__merge_11.mcfunction +5 -0
  1202. package/dist/data/test/function/sort4__merge_14.mcfunction +5 -0
  1203. package/dist/data/test/function/sort4__merge_17.mcfunction +1 -0
  1204. package/dist/data/test/function/sort4__merge_3.mcfunction +4 -0
  1205. package/dist/data/test/function/sort4__merge_5.mcfunction +4 -0
  1206. package/dist/data/test/function/sort4__merge_7.mcfunction +4 -0
  1207. package/dist/data/test/function/sort4__merge_9.mcfunction +5 -0
  1208. package/dist/data/test/function/sort4__then_0.mcfunction +4 -0
  1209. package/dist/data/test/function/sort4__then_10.mcfunction +1 -0
  1210. package/dist/data/test/function/sort4__then_13.mcfunction +1 -0
  1211. package/dist/data/test/function/sort4__then_16.mcfunction +1 -0
  1212. package/dist/data/test/function/sort4__then_2.mcfunction +4 -0
  1213. package/dist/data/test/function/sort4__then_4.mcfunction +4 -0
  1214. package/dist/data/test/function/sort4__then_6.mcfunction +4 -0
  1215. package/dist/data/test/function/sort4__then_8.mcfunction +4 -0
  1216. package/dist/data/test/function/sort5.mcfunction +15 -0
  1217. package/dist/data/test/function/sort5__merge_1.mcfunction +4 -0
  1218. package/dist/data/test/function/sort5__merge_11.mcfunction +4 -0
  1219. package/dist/data/test/function/sort5__merge_13.mcfunction +4 -0
  1220. package/dist/data/test/function/sort5__merge_15.mcfunction +4 -0
  1221. package/dist/data/test/function/sort5__merge_17.mcfunction +5 -0
  1222. package/dist/data/test/function/sort5__merge_19.mcfunction +5 -0
  1223. package/dist/data/test/function/sort5__merge_22.mcfunction +5 -0
  1224. package/dist/data/test/function/sort5__merge_25.mcfunction +5 -0
  1225. package/dist/data/test/function/sort5__merge_28.mcfunction +1 -0
  1226. package/dist/data/test/function/sort5__merge_3.mcfunction +4 -0
  1227. package/dist/data/test/function/sort5__merge_5.mcfunction +4 -0
  1228. package/dist/data/test/function/sort5__merge_7.mcfunction +4 -0
  1229. package/dist/data/test/function/sort5__merge_9.mcfunction +4 -0
  1230. package/dist/data/test/function/sort5__then_0.mcfunction +4 -0
  1231. package/dist/data/test/function/sort5__then_10.mcfunction +4 -0
  1232. package/dist/data/test/function/sort5__then_12.mcfunction +4 -0
  1233. package/dist/data/test/function/sort5__then_14.mcfunction +4 -0
  1234. package/dist/data/test/function/sort5__then_16.mcfunction +4 -0
  1235. package/dist/data/test/function/sort5__then_18.mcfunction +1 -0
  1236. package/dist/data/test/function/sort5__then_2.mcfunction +4 -0
  1237. package/dist/data/test/function/sort5__then_21.mcfunction +1 -0
  1238. package/dist/data/test/function/sort5__then_24.mcfunction +1 -0
  1239. package/dist/data/test/function/sort5__then_27.mcfunction +1 -0
  1240. package/dist/data/test/function/sort5__then_4.mcfunction +4 -0
  1241. package/dist/data/test/function/sort5__then_6.mcfunction +4 -0
  1242. package/dist/data/test/function/sort5__then_8.mcfunction +4 -0
  1243. package/dist/data/test/function/sphere_contains.mcfunction +29 -0
  1244. package/dist/data/test/function/sphere_contains__merge_1.mcfunction +2 -0
  1245. package/dist/data/test/function/sphere_contains__then_0.mcfunction +2 -0
  1246. package/dist/data/test/function/sqrt_fixed.mcfunction +8 -0
  1247. package/dist/data/test/function/sqrt_fx.mcfunction +11 -0
  1248. package/dist/data/test/function/sub2d_x.mcfunction +5 -0
  1249. package/dist/data/test/function/sub2d_y.mcfunction +5 -0
  1250. package/dist/data/test/function/sub3d_x.mcfunction +5 -0
  1251. package/dist/data/test/function/sub3d_y.mcfunction +5 -0
  1252. package/dist/data/test/function/sub3d_z.mcfunction +5 -0
  1253. package/dist/data/test/function/tick_to_ms.mcfunction +5 -0
  1254. package/dist/data/test/function/tick_to_seconds.mcfunction +5 -0
  1255. package/dist/data/test/function/tile_center.mcfunction +10 -0
  1256. package/dist/data/test/function/tile_of.mcfunction +7 -0
  1257. package/dist/data/test/function/tile_of__merge_1.mcfunction +7 -0
  1258. package/dist/data/test/function/tile_of__then_0.mcfunction +3 -0
  1259. package/dist/data/test/function/timer/done.mcfunction +5 -0
  1260. package/dist/data/test/function/timer/elapsed.mcfunction +2 -0
  1261. package/dist/data/test/function/timer/new.mcfunction +5 -0
  1262. package/dist/data/test/function/timer/pause.mcfunction +1 -0
  1263. package/dist/data/test/function/timer/remaining.mcfunction +10 -0
  1264. package/dist/data/test/function/timer/remaining__merge_1.mcfunction +2 -0
  1265. package/dist/data/test/function/timer/remaining__then_0.mcfunction +1 -0
  1266. package/dist/data/test/function/timer/reset.mcfunction +1 -0
  1267. package/dist/data/test/function/timer/start.mcfunction +1 -0
  1268. package/dist/data/test/function/timer/tick.mcfunction +9 -0
  1269. package/dist/data/test/function/timer/tick__merge_1.mcfunction +1 -0
  1270. package/dist/data/test/function/timer/tick__merge_3.mcfunction +1 -0
  1271. package/dist/data/test/function/timer/tick__then_0.mcfunction +4 -0
  1272. package/dist/data/test/function/timer/tick__then_2.mcfunction +4 -0
  1273. package/dist/data/test/function/uniform_frac.mcfunction +12 -0
  1274. package/dist/data/test/function/uniform_frac__merge_1.mcfunction +4 -0
  1275. package/dist/data/test/function/uniform_frac__then_0.mcfunction +4 -0
  1276. package/dist/data/test/function/uniform_int.mcfunction +14 -0
  1277. package/dist/data/test/function/uniform_int__merge_1.mcfunction +9 -0
  1278. package/dist/data/test/function/uniform_int__then_0.mcfunction +4 -0
  1279. package/dist/data/test/function/weighted2.mcfunction +17 -0
  1280. package/dist/data/test/function/weighted2__merge_1.mcfunction +6 -0
  1281. package/dist/data/test/function/weighted2__merge_3.mcfunction +2 -0
  1282. package/dist/data/test/function/weighted2__then_0.mcfunction +4 -0
  1283. package/dist/data/test/function/weighted2__then_2.mcfunction +2 -0
  1284. package/dist/data/test/function/weighted3.mcfunction +20 -0
  1285. package/dist/data/test/function/weighted3__merge_1.mcfunction +7 -0
  1286. package/dist/data/test/function/weighted3__merge_3.mcfunction +6 -0
  1287. package/dist/data/test/function/weighted3__merge_6.mcfunction +2 -0
  1288. package/dist/data/test/function/weighted3__then_0.mcfunction +4 -0
  1289. package/dist/data/test/function/weighted3__then_2.mcfunction +2 -0
  1290. package/dist/data/test/function/weighted3__then_5.mcfunction +2 -0
  1291. package/dist/data/turret/function/__load.mcfunction +5 -0
  1292. package/dist/data/turret/function/__tick.mcfunction +4 -0
  1293. package/dist/data/turret/function/__trigger_deploy_turret_dispatch.mcfunction +4 -0
  1294. package/dist/data/turret/function/deploy_turret.mcfunction +8 -0
  1295. package/dist/data/turret/function/turret_tick/at_1.mcfunction +2 -0
  1296. package/dist/data/turret/function/turret_tick/foreach_0.mcfunction +2 -0
  1297. package/dist/data/turret/function/turret_tick/foreach_2.mcfunction +2 -0
  1298. package/dist/data/turret/function/turret_tick/tick_body.mcfunction +3 -0
  1299. package/dist/data/turret/function/turret_tick/tick_skip.mcfunction +1 -0
  1300. package/dist/data/turret/function/turret_tick.mcfunction +5 -0
  1301. package/dist/diagnostics/index.d.ts +44 -0
  1302. package/dist/diagnostics/index.js +140 -0
  1303. package/dist/events/types.d.ts +35 -0
  1304. package/dist/events/types.js +59 -0
  1305. package/dist/formatter/index.d.ts +1 -0
  1306. package/dist/formatter/index.js +26 -0
  1307. package/dist/gcd2.map.json +15 -0
  1308. package/dist/gcd3.map.json +17 -0
  1309. package/dist/gcd_test.map.json +15 -0
  1310. package/dist/index.d.ts +62 -0
  1311. package/dist/ir/builder.d.ts +33 -0
  1312. package/dist/ir/builder.js +99 -0
  1313. package/dist/ir/types.d.ts +132 -0
  1314. package/dist/ir/types.js +15 -0
  1315. package/dist/isqrttest.map.json +15 -0
  1316. package/dist/lexer/index.d.ts +37 -0
  1317. package/dist/lexer/index.js +569 -0
  1318. package/dist/lowering/index.d.ts +188 -0
  1319. package/dist/lowering/index.js +3405 -0
  1320. package/dist/mathtest.map.json +6 -0
  1321. package/dist/mc-test/client.d.ts +128 -0
  1322. package/dist/mc-test/client.js +174 -0
  1323. package/dist/mc-test/runner.d.ts +28 -0
  1324. package/dist/mc-test/runner.js +150 -0
  1325. package/dist/mc-test/setup.d.ts +11 -0
  1326. package/dist/mc-test/setup.js +98 -0
  1327. package/dist/mc-validator/index.d.ts +17 -0
  1328. package/dist/mc-validator/index.js +322 -0
  1329. package/dist/mypack.map.json +27 -0
  1330. package/dist/nbt/index.d.ts +86 -0
  1331. package/dist/nbt/index.js +250 -0
  1332. package/dist/optimizer/commands.d.ts +38 -0
  1333. package/dist/optimizer/commands.js +451 -0
  1334. package/dist/optimizer/dce.d.ts +34 -0
  1335. package/dist/optimizer/dce.js +639 -0
  1336. package/dist/optimizer/passes.d.ts +34 -0
  1337. package/dist/optimizer/passes.js +243 -0
  1338. package/dist/optimizer/structure.d.ts +9 -0
  1339. package/dist/optimizer/structure.js +356 -0
  1340. package/dist/pack.mcmeta +6 -0
  1341. package/dist/parser/index.d.ts +93 -0
  1342. package/dist/parser/index.js +1687 -0
  1343. package/dist/repl.d.ts +16 -0
  1344. package/dist/repl.js +165 -0
  1345. package/dist/reqtest.map.json +4 -0
  1346. package/dist/reqtest2.map.json +4 -0
  1347. package/dist/runtime/index.d.ts +107 -0
  1348. package/dist/runtime/index.js +1409 -0
  1349. package/dist/runtime.map.json +7 -0
  1350. package/dist/src/__tests__/array-param.test.d.ts +9 -0
  1351. package/dist/src/__tests__/array-param.test.js +69 -0
  1352. package/dist/src/__tests__/codegen.test.d.ts +1 -0
  1353. package/dist/src/__tests__/codegen.test.js +152 -0
  1354. package/dist/src/__tests__/debug-compile.test.d.ts +1 -0
  1355. package/dist/src/__tests__/debug-compile.test.js +24 -0
  1356. package/dist/src/__tests__/debug-compile2.test.d.ts +1 -0
  1357. package/dist/src/__tests__/debug-compile2.test.js +19 -0
  1358. package/dist/src/__tests__/debug-compile3.test.d.ts +1 -0
  1359. package/dist/src/__tests__/debug-compile3.test.js +22 -0
  1360. package/dist/src/__tests__/debug-wm.test.d.ts +1 -0
  1361. package/dist/src/__tests__/debug-wm.test.js +50 -0
  1362. package/dist/src/__tests__/debug_gen.d.ts +1 -0
  1363. package/dist/src/__tests__/debug_gen.js +24 -0
  1364. package/dist/src/__tests__/debug_scoreboard.test.d.ts +1 -0
  1365. package/dist/src/__tests__/debug_scoreboard.test.js +19 -0
  1366. package/dist/src/__tests__/debug_scoreboard2.test.d.ts +1 -0
  1367. package/dist/src/__tests__/debug_scoreboard2.test.js +27 -0
  1368. package/dist/src/__tests__/debug_scoreboard3.test.d.ts +1 -0
  1369. package/dist/src/__tests__/debug_scoreboard3.test.js +37 -0
  1370. package/dist/src/__tests__/e2e.test.d.ts +6 -0
  1371. package/dist/src/__tests__/e2e.test.js +1789 -0
  1372. package/dist/src/__tests__/entity-types.test.d.ts +1 -0
  1373. package/dist/src/__tests__/entity-types.test.js +203 -0
  1374. package/dist/src/__tests__/lowering.test.d.ts +1 -0
  1375. package/dist/src/__tests__/lowering.test.js +1015 -0
  1376. package/dist/src/__tests__/macro.test.d.ts +8 -0
  1377. package/dist/src/__tests__/macro.test.js +306 -0
  1378. package/dist/src/__tests__/nbt.test.d.ts +1 -0
  1379. package/dist/src/__tests__/nbt.test.js +82 -0
  1380. package/dist/src/__tests__/optimizer-advanced.test.d.ts +1 -0
  1381. package/dist/src/__tests__/optimizer-advanced.test.js +124 -0
  1382. package/dist/src/__tests__/optimizer.test.d.ts +1 -0
  1383. package/dist/src/__tests__/optimizer.test.js +149 -0
  1384. package/dist/src/__tests__/runtime.test.d.ts +1 -0
  1385. package/dist/src/__tests__/runtime.test.js +289 -0
  1386. package/dist/src/__tests__/stdlib/math.test.d.ts +5 -0
  1387. package/dist/src/__tests__/stdlib/math.test.js +121 -0
  1388. package/dist/src/__tests__/stdlib-advanced.test.d.ts +4 -0
  1389. package/dist/src/__tests__/stdlib-advanced.test.js +374 -0
  1390. package/dist/src/__tests__/stdlib-bigint.test.d.ts +7 -0
  1391. package/dist/src/__tests__/stdlib-bigint.test.js +426 -0
  1392. package/dist/src/__tests__/stdlib-math.test.d.ts +7 -0
  1393. package/dist/src/__tests__/stdlib-math.test.js +351 -0
  1394. package/dist/src/__tests__/stdlib-vec.test.d.ts +4 -0
  1395. package/dist/src/__tests__/stdlib-vec.test.js +263 -0
  1396. package/dist/src/__tests__/structure-optimizer.test.d.ts +1 -0
  1397. package/dist/src/__tests__/structure-optimizer.test.js +33 -0
  1398. package/dist/src/__tests__/timer-debug.test.d.ts +1 -0
  1399. package/dist/src/__tests__/timer-debug.test.js +33 -0
  1400. package/dist/src/__tests__/var-allocator.test.d.ts +1 -0
  1401. package/dist/src/__tests__/var-allocator.test.js +69 -0
  1402. package/dist/src/codegen/cmdblock/index.d.ts +26 -0
  1403. package/dist/src/codegen/cmdblock/index.js +45 -0
  1404. package/dist/src/codegen/mcfunction/index.d.ts +40 -0
  1405. package/dist/src/codegen/mcfunction/index.js +606 -0
  1406. package/dist/src/codegen/structure/index.d.ts +24 -0
  1407. package/dist/src/codegen/structure/index.js +279 -0
  1408. package/dist/src/codegen/var-allocator.d.ts +45 -0
  1409. package/dist/src/codegen/var-allocator.js +104 -0
  1410. package/dist/src/ir/builder.d.ts +33 -0
  1411. package/dist/src/ir/builder.js +99 -0
  1412. package/dist/src/ir/types.d.ts +132 -0
  1413. package/dist/src/ir/types.js +15 -0
  1414. package/dist/src/lowering/index.d.ts +188 -0
  1415. package/dist/src/lowering/index.js +3405 -0
  1416. package/dist/src/lsp/main.js +0 -0
  1417. package/dist/src/mir/lower.js +93 -12
  1418. package/dist/src/optimizer/commands.d.ts +38 -0
  1419. package/dist/src/optimizer/commands.js +451 -0
  1420. package/dist/src/optimizer/passes.d.ts +34 -0
  1421. package/dist/src/optimizer/passes.js +243 -0
  1422. package/dist/src/optimizer/structure.d.ts +9 -0
  1423. package/dist/src/optimizer/structure.js +356 -0
  1424. package/dist/src2/__tests__/e2e/basic.test.d.ts +8 -0
  1425. package/dist/src2/__tests__/e2e/basic.test.js +140 -0
  1426. package/dist/src2/__tests__/e2e/macros.test.d.ts +9 -0
  1427. package/dist/src2/__tests__/e2e/macros.test.js +182 -0
  1428. package/dist/src2/__tests__/e2e/migrate.test.d.ts +13 -0
  1429. package/dist/src2/__tests__/e2e/migrate.test.js +2739 -0
  1430. package/dist/src2/__tests__/hir/desugar.test.d.ts +1 -0
  1431. package/dist/src2/__tests__/hir/desugar.test.js +234 -0
  1432. package/dist/src2/__tests__/lir/lower.test.d.ts +1 -0
  1433. package/dist/src2/__tests__/lir/lower.test.js +559 -0
  1434. package/dist/src2/__tests__/lir/types.test.d.ts +1 -0
  1435. package/dist/src2/__tests__/lir/types.test.js +185 -0
  1436. package/dist/src2/__tests__/lir/verify.test.d.ts +1 -0
  1437. package/dist/src2/__tests__/lir/verify.test.js +221 -0
  1438. package/dist/src2/__tests__/mir/arithmetic.test.d.ts +1 -0
  1439. package/dist/src2/__tests__/mir/arithmetic.test.js +130 -0
  1440. package/dist/src2/__tests__/mir/control-flow.test.d.ts +1 -0
  1441. package/dist/src2/__tests__/mir/control-flow.test.js +205 -0
  1442. package/dist/src2/__tests__/mir/verify.test.d.ts +1 -0
  1443. package/dist/src2/__tests__/mir/verify.test.js +223 -0
  1444. package/dist/src2/__tests__/optimizer/block_merge.test.d.ts +1 -0
  1445. package/dist/src2/__tests__/optimizer/block_merge.test.js +78 -0
  1446. package/dist/src2/__tests__/optimizer/branch_simplify.test.d.ts +1 -0
  1447. package/dist/src2/__tests__/optimizer/branch_simplify.test.js +58 -0
  1448. package/dist/src2/__tests__/optimizer/constant_fold.test.d.ts +1 -0
  1449. package/dist/src2/__tests__/optimizer/constant_fold.test.js +131 -0
  1450. package/dist/src2/__tests__/optimizer/copy_prop.test.d.ts +1 -0
  1451. package/dist/src2/__tests__/optimizer/copy_prop.test.js +91 -0
  1452. package/dist/src2/__tests__/optimizer/dce.test.d.ts +1 -0
  1453. package/dist/src2/__tests__/optimizer/dce.test.js +76 -0
  1454. package/dist/src2/__tests__/optimizer/pipeline.test.d.ts +1 -0
  1455. package/dist/src2/__tests__/optimizer/pipeline.test.js +102 -0
  1456. package/dist/src2/emit/compile.d.ts +19 -0
  1457. package/dist/src2/emit/compile.js +80 -0
  1458. package/dist/src2/emit/index.d.ts +17 -0
  1459. package/dist/src2/emit/index.js +172 -0
  1460. package/dist/src2/hir/lower.d.ts +15 -0
  1461. package/dist/src2/hir/lower.js +378 -0
  1462. package/dist/src2/hir/types.d.ts +373 -0
  1463. package/dist/src2/hir/types.js +16 -0
  1464. package/dist/src2/lir/lower.d.ts +15 -0
  1465. package/dist/src2/lir/lower.js +453 -0
  1466. package/dist/src2/lir/types.d.ts +136 -0
  1467. package/dist/src2/lir/types.js +11 -0
  1468. package/dist/src2/lir/verify.d.ts +14 -0
  1469. package/dist/src2/lir/verify.js +113 -0
  1470. package/dist/src2/mir/lower.d.ts +9 -0
  1471. package/dist/src2/mir/lower.js +1030 -0
  1472. package/dist/src2/mir/macro.d.ts +22 -0
  1473. package/dist/src2/mir/macro.js +168 -0
  1474. package/dist/src2/mir/types.d.ts +183 -0
  1475. package/dist/src2/mir/types.js +11 -0
  1476. package/dist/src2/mir/verify.d.ts +16 -0
  1477. package/dist/src2/mir/verify.js +216 -0
  1478. package/dist/src2/optimizer/block_merge.d.ts +12 -0
  1479. package/dist/src2/optimizer/block_merge.js +84 -0
  1480. package/dist/src2/optimizer/branch_simplify.d.ts +9 -0
  1481. package/dist/src2/optimizer/branch_simplify.js +28 -0
  1482. package/dist/src2/optimizer/constant_fold.d.ts +10 -0
  1483. package/dist/src2/optimizer/constant_fold.js +85 -0
  1484. package/dist/src2/optimizer/copy_prop.d.ts +9 -0
  1485. package/dist/src2/optimizer/copy_prop.js +113 -0
  1486. package/dist/src2/optimizer/dce.d.ts +8 -0
  1487. package/dist/src2/optimizer/dce.js +155 -0
  1488. package/dist/src2/optimizer/pipeline.d.ts +10 -0
  1489. package/dist/src2/optimizer/pipeline.js +42 -0
  1490. package/dist/swap_test.map.json +14 -0
  1491. package/dist/tsconfig.tsbuildinfo +1 -0
  1492. package/dist/typechecker/index.d.ts +61 -0
  1493. package/dist/typechecker/index.js +1034 -0
  1494. package/dist/types/entity-hierarchy.d.ts +29 -0
  1495. package/dist/types/entity-hierarchy.js +107 -0
  1496. package/editors/vscode/package-lock.json +2 -2
  1497. package/editors/vscode/package.json +1 -1
  1498. package/package.json +1 -1
  1499. package/src/__tests__/array-param.test.ts +77 -0
  1500. package/src/__tests__/stdlib/math.test.ts +102 -0
  1501. package/src/mir/lower.ts +109 -11
  1502. package/src/stdlib/list.mcrs +76 -0
@@ -0,0 +1,2739 @@
1
+ "use strict";
2
+ /**
3
+ * Migration tests — representative cases from the existing 920-test suite
4
+ * run through the NEW v2 compiler pipeline.
5
+ *
6
+ * Pattern:
7
+ * 1. Compile source with src2/emit/compile.ts
8
+ * 2. Load .mcfunction files into MCRuntime
9
+ * 3. Execute functions and assert scoreboard state
10
+ *
11
+ * NOTE: v2 uses objective `__<ns>` (not `rs`), load function is `ns:load`
12
+ * (not `ns:__load`), and return values go to `$ret` on the objective.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const compile_1 = require("../../emit/compile");
16
+ const runtime_1 = require("../../../src/runtime");
17
+ // ---------------------------------------------------------------------------
18
+ // Helpers
19
+ // ---------------------------------------------------------------------------
20
+ const NS = 'test';
21
+ const OBJ = `__${NS}`;
22
+ function getFile(files, pathSubstr) {
23
+ return files.find(f => f.path.includes(pathSubstr))?.content;
24
+ }
25
+ /** Compile source, load all .mcfunction files into MCRuntime, init objective */
26
+ function makeRuntime(source, namespace = NS) {
27
+ const result = (0, compile_1.compile)(source, { namespace });
28
+ const rt = new runtime_1.MCRuntime(namespace);
29
+ for (const file of result.files) {
30
+ if (!file.path.endsWith('.mcfunction'))
31
+ continue;
32
+ const m = file.path.match(/data\/([^/]+)\/function\/(.+)\.mcfunction$/);
33
+ if (!m)
34
+ continue;
35
+ rt.loadFunction(`${m[1]}:${m[2]}`, file.content.split('\n'));
36
+ }
37
+ // Init the objective (v2 load function creates it)
38
+ rt.execFunction(`${namespace}:load`);
39
+ return rt;
40
+ }
41
+ /** Execute a function and return the $ret value on the v2 objective */
42
+ function callAndGetRet(rt, fnName, namespace = NS) {
43
+ rt.execFunction(`${namespace}:${fnName}`);
44
+ return rt.getScore('$ret', `__${namespace}`);
45
+ }
46
+ // ===========================================================================
47
+ // 1. Compilation smoke tests — does the compiler not crash?
48
+ // ===========================================================================
49
+ describe('v2 migration: compilation smoke', () => {
50
+ const cases = [
51
+ ['empty function', 'fn noop(): void {}'],
52
+ ['return constant', 'fn f(): int { return 42; }'],
53
+ ['arithmetic', 'fn f(): int { return 1 + 2; }'],
54
+ ['variable', 'fn f(): int { let x: int = 10; return x; }'],
55
+ ['negation', 'fn f(): int { return -5; }'],
56
+ ['comparison', 'fn f(): bool { return 3 > 2; }'],
57
+ ['if/else', 'fn f(x: int): int { if (x > 0) { return 1; } else { return 0; } }'],
58
+ ['while loop', 'fn f(): void { let i: int = 0; while (i < 10) { i = i + 1; } }'],
59
+ ['multiple functions', 'fn a(): int { return 1; }\nfn b(): int { return 2; }'],
60
+ ['function call', 'fn add(a: int, b: int): int { return a + b; }\nfn main(): int { return add(3, 4); }'],
61
+ ['boolean AND', 'fn f(): bool { return true && false; }'],
62
+ ['boolean OR', 'fn f(): bool { return true || false; }'],
63
+ ['boolean NOT', 'fn f(): bool { return !true; }'],
64
+ ['nested arithmetic', 'fn f(): int { return (1 + 2) * (3 - 4); }'],
65
+ ['modulo', 'fn f(): int { return 10 % 3; }'],
66
+ ['@tick decorator', '@tick fn game_tick(): void { let x: int = 1; }'],
67
+ ['@load decorator', '@load fn setup(): void { let x: int = 0; }'],
68
+ ['chained comparison', 'fn f(x: int): bool { return x >= 0 && x <= 100; }'],
69
+ ];
70
+ test.each(cases)('%s compiles without error', (_name, source) => {
71
+ expect(() => (0, compile_1.compile)(source, { namespace: NS })).not.toThrow();
72
+ });
73
+ });
74
+ // ===========================================================================
75
+ // 2. Structural tests — output shape
76
+ // ===========================================================================
77
+ describe('v2 migration: output structure', () => {
78
+ test('pack.mcmeta present with pack_format 26', () => {
79
+ const result = (0, compile_1.compile)('fn noop(): void {}', { namespace: NS });
80
+ const meta = getFile(result.files, 'pack.mcmeta');
81
+ expect(meta).toBeDefined();
82
+ expect(JSON.parse(meta).pack.pack_format).toBe(26);
83
+ });
84
+ test('load.mcfunction creates scoreboard objective', () => {
85
+ const result = (0, compile_1.compile)('fn noop(): void {}', { namespace: NS });
86
+ const load = getFile(result.files, 'load.mcfunction');
87
+ expect(load).toBeDefined();
88
+ expect(load).toContain(`scoreboard objectives add ${OBJ} dummy`);
89
+ });
90
+ test('load.json always includes namespace:load', () => {
91
+ const result = (0, compile_1.compile)('fn noop(): void {}', { namespace: NS });
92
+ const loadJson = getFile(result.files, 'load.json');
93
+ expect(loadJson).toBeDefined();
94
+ expect(JSON.parse(loadJson).values).toContain(`${NS}:load`);
95
+ });
96
+ test('@tick function appears in tick.json', () => {
97
+ const result = (0, compile_1.compile)('@tick fn game_tick(): void { let x: int = 1; }', { namespace: NS });
98
+ const tickJson = getFile(result.files, 'tick.json');
99
+ expect(tickJson).toBeDefined();
100
+ expect(JSON.parse(tickJson).values).toContain(`${NS}:game_tick`);
101
+ });
102
+ test('@load function appears in load.json', () => {
103
+ const result = (0, compile_1.compile)('@load fn setup(): void { let x: int = 0; }', { namespace: NS });
104
+ const loadJson = getFile(result.files, 'load.json');
105
+ expect(loadJson).toBeDefined();
106
+ expect(JSON.parse(loadJson).values).toContain(`${NS}:setup`);
107
+ });
108
+ test('no tick.json when no @tick functions', () => {
109
+ const result = (0, compile_1.compile)('fn noop(): void {}', { namespace: NS });
110
+ const tickJson = getFile(result.files, 'tick.json');
111
+ expect(tickJson).toBeUndefined();
112
+ });
113
+ test('function names are lowercased in output paths', () => {
114
+ const result = (0, compile_1.compile)('fn MyFunc(): void {}', { namespace: NS });
115
+ const fn = result.files.find(f => f.path.includes('myfunc.mcfunction'));
116
+ expect(fn).toBeDefined();
117
+ });
118
+ test('simple function produces scoreboard commands', () => {
119
+ const result = (0, compile_1.compile)('fn add(a: int, b: int): int { return a + b; }', { namespace: NS });
120
+ const fn = getFile(result.files, 'add.mcfunction');
121
+ expect(fn).toBeDefined();
122
+ expect(fn).toContain('scoreboard players operation');
123
+ expect(fn).toContain(OBJ);
124
+ });
125
+ test('constant assignment produces score_set', () => {
126
+ const result = (0, compile_1.compile)('fn init(): int { let x: int = 42; return x; }', { namespace: NS });
127
+ const fn = getFile(result.files, 'init.mcfunction');
128
+ expect(fn).toBeDefined();
129
+ expect(fn).toContain('scoreboard players set');
130
+ expect(fn).toContain('42');
131
+ });
132
+ test('if/else produces conditional call pattern', () => {
133
+ const source = `
134
+ fn check(x: int): int {
135
+ if (x > 0) { return 1; } else { return 0; }
136
+ }
137
+ `;
138
+ const result = (0, compile_1.compile)(source, { namespace: NS });
139
+ const fn = getFile(result.files, 'check.mcfunction');
140
+ expect(fn).toBeDefined();
141
+ expect(fn).toContain('execute if score');
142
+ expect(fn).toContain('matches');
143
+ expect(fn).toContain('run function');
144
+ });
145
+ test('while loop produces loop structure with function calls', () => {
146
+ const source = `
147
+ fn count(): void {
148
+ let i: int = 0;
149
+ while (i < 10) { i = i + 1; }
150
+ }
151
+ `;
152
+ const result = (0, compile_1.compile)(source, { namespace: NS });
153
+ const fnFiles = result.files.filter(f => f.path.endsWith('.mcfunction'));
154
+ expect(fnFiles.length).toBeGreaterThan(1); // main + loop blocks
155
+ const allContent = fnFiles.map(f => f.content).join('\n');
156
+ expect(allContent).toContain('execute if score');
157
+ expect(allContent).toContain('run function');
158
+ });
159
+ });
160
+ // ===========================================================================
161
+ // 3. Runtime behavioural tests — execute and check scoreboard values
162
+ // ===========================================================================
163
+ describe('v2 migration: return values', () => {
164
+ test('return constant 42', () => {
165
+ const rt = makeRuntime('fn f(): int { return 42; }');
166
+ expect(callAndGetRet(rt, 'f')).toBe(42);
167
+ });
168
+ test('return zero', () => {
169
+ const rt = makeRuntime('fn f(): int { return 0; }');
170
+ expect(callAndGetRet(rt, 'f')).toBe(0);
171
+ });
172
+ test('return negative', () => {
173
+ const rt = makeRuntime('fn f(): int { return -10; }');
174
+ expect(callAndGetRet(rt, 'f')).toBe(-10);
175
+ });
176
+ });
177
+ describe('v2 migration: arithmetic', () => {
178
+ test('1 + 2 = 3', () => {
179
+ const rt = makeRuntime('fn f(): int { return 1 + 2; }');
180
+ expect(callAndGetRet(rt, 'f')).toBe(3);
181
+ });
182
+ test('10 - 3 = 7', () => {
183
+ const rt = makeRuntime('fn f(): int { return 10 - 3; }');
184
+ expect(callAndGetRet(rt, 'f')).toBe(7);
185
+ });
186
+ test('4 * 5 = 20', () => {
187
+ const rt = makeRuntime('fn f(): int { return 4 * 5; }');
188
+ expect(callAndGetRet(rt, 'f')).toBe(20);
189
+ });
190
+ test('20 / 4 = 5', () => {
191
+ const rt = makeRuntime('fn f(): int { return 20 / 4; }');
192
+ expect(callAndGetRet(rt, 'f')).toBe(5);
193
+ });
194
+ test('10 % 3 = 1', () => {
195
+ const rt = makeRuntime('fn f(): int { return 10 % 3; }');
196
+ expect(callAndGetRet(rt, 'f')).toBe(1);
197
+ });
198
+ test('chained: (2 + 3) * 4 = 20', () => {
199
+ const rt = makeRuntime('fn f(): int { return (2 + 3) * 4; }');
200
+ expect(callAndGetRet(rt, 'f')).toBe(20);
201
+ });
202
+ test('negation: -(5) = -5', () => {
203
+ const rt = makeRuntime('fn f(): int { return -(5); }');
204
+ expect(callAndGetRet(rt, 'f')).toBe(-5);
205
+ });
206
+ });
207
+ describe('v2 migration: variables', () => {
208
+ test('let and return', () => {
209
+ const rt = makeRuntime('fn f(): int { let x: int = 42; return x; }');
210
+ expect(callAndGetRet(rt, 'f')).toBe(42);
211
+ });
212
+ test('variable reassignment', () => {
213
+ const rt = makeRuntime(`
214
+ fn f(): int {
215
+ let x: int = 1;
216
+ x = 10;
217
+ return x;
218
+ }
219
+ `);
220
+ expect(callAndGetRet(rt, 'f')).toBe(10);
221
+ });
222
+ test('multiple variables', () => {
223
+ const rt = makeRuntime(`
224
+ fn f(): int {
225
+ let a: int = 3;
226
+ let b: int = 7;
227
+ return a + b;
228
+ }
229
+ `);
230
+ expect(callAndGetRet(rt, 'f')).toBe(10);
231
+ });
232
+ test('variable used in expression', () => {
233
+ const rt = makeRuntime(`
234
+ fn f(): int {
235
+ let x: int = 5;
236
+ let y: int = x * 2 + 1;
237
+ return y;
238
+ }
239
+ `);
240
+ expect(callAndGetRet(rt, 'f')).toBe(11);
241
+ });
242
+ });
243
+ describe('v2 migration: comparisons', () => {
244
+ test('3 > 2 is true (1)', () => {
245
+ const rt = makeRuntime('fn f(): int { if (3 > 2) { return 1; } else { return 0; } }');
246
+ expect(callAndGetRet(rt, 'f')).toBe(1);
247
+ });
248
+ test('2 > 3 is false (0)', () => {
249
+ const rt = makeRuntime('fn f(): int { if (2 > 3) { return 1; } else { return 0; } }');
250
+ expect(callAndGetRet(rt, 'f')).toBe(0);
251
+ });
252
+ test('5 == 5 is true', () => {
253
+ const rt = makeRuntime('fn f(): int { if (5 == 5) { return 1; } else { return 0; } }');
254
+ expect(callAndGetRet(rt, 'f')).toBe(1);
255
+ });
256
+ test('5 != 3 is true', () => {
257
+ const rt = makeRuntime('fn f(): int { if (5 != 3) { return 1; } else { return 0; } }');
258
+ expect(callAndGetRet(rt, 'f')).toBe(1);
259
+ });
260
+ test('3 <= 3 is true', () => {
261
+ const rt = makeRuntime('fn f(): int { if (3 <= 3) { return 1; } else { return 0; } }');
262
+ expect(callAndGetRet(rt, 'f')).toBe(1);
263
+ });
264
+ test('4 >= 5 is false', () => {
265
+ const rt = makeRuntime('fn f(): int { if (4 >= 5) { return 1; } else { return 0; } }');
266
+ expect(callAndGetRet(rt, 'f')).toBe(0);
267
+ });
268
+ });
269
+ describe('v2 migration: if/else control flow', () => {
270
+ test('if-true branch taken', () => {
271
+ const rt = makeRuntime(`
272
+ fn f(): int {
273
+ let x: int = 10;
274
+ if (x > 5) { return 1; } else { return 0; }
275
+ }
276
+ `);
277
+ expect(callAndGetRet(rt, 'f')).toBe(1);
278
+ });
279
+ test('if-false branch taken', () => {
280
+ const rt = makeRuntime(`
281
+ fn f(): int {
282
+ let x: int = 2;
283
+ if (x > 5) { return 1; } else { return 0; }
284
+ }
285
+ `);
286
+ expect(callAndGetRet(rt, 'f')).toBe(0);
287
+ });
288
+ test('if without else — falls through', () => {
289
+ const rt = makeRuntime(`
290
+ fn f(): int {
291
+ let x: int = 0;
292
+ if (true) { x = 42; }
293
+ return x;
294
+ }
295
+ `);
296
+ expect(callAndGetRet(rt, 'f')).toBe(42);
297
+ });
298
+ test('nested if/else', () => {
299
+ const rt = makeRuntime(`
300
+ fn f(): int {
301
+ let x: int = 15;
302
+ if (x > 20) {
303
+ return 3;
304
+ } else {
305
+ if (x > 10) {
306
+ return 2;
307
+ } else {
308
+ return 1;
309
+ }
310
+ }
311
+ }
312
+ `);
313
+ expect(callAndGetRet(rt, 'f')).toBe(2);
314
+ });
315
+ });
316
+ describe('v2 migration: while loops', () => {
317
+ test('simple countdown', () => {
318
+ const rt = makeRuntime(`
319
+ fn f(): int {
320
+ let i: int = 10;
321
+ while (i > 0) { i = i - 1; }
322
+ return i;
323
+ }
324
+ `);
325
+ expect(callAndGetRet(rt, 'f')).toBe(0);
326
+ });
327
+ test('sum 1 to 5', () => {
328
+ const rt = makeRuntime(`
329
+ fn f(): int {
330
+ let sum: int = 0;
331
+ let i: int = 1;
332
+ while (i <= 5) {
333
+ sum = sum + i;
334
+ i = i + 1;
335
+ }
336
+ return sum;
337
+ }
338
+ `);
339
+ expect(callAndGetRet(rt, 'f')).toBe(15);
340
+ });
341
+ test('while false — never executes', () => {
342
+ const rt = makeRuntime(`
343
+ fn f(): int {
344
+ let x: int = 99;
345
+ while (false) { x = 0; }
346
+ return x;
347
+ }
348
+ `);
349
+ expect(callAndGetRet(rt, 'f')).toBe(99);
350
+ });
351
+ });
352
+ describe('v2 migration: function calls', () => {
353
+ test('call simple function', () => {
354
+ const rt = makeRuntime(`
355
+ fn double(x: int): int { return x * 2; }
356
+ fn f(): int { return double(21); }
357
+ `);
358
+ expect(callAndGetRet(rt, 'f')).toBe(42);
359
+ });
360
+ test('call with two params', () => {
361
+ const rt = makeRuntime(`
362
+ fn add(a: int, b: int): int { return a + b; }
363
+ fn f(): int { return add(17, 25); }
364
+ `);
365
+ expect(callAndGetRet(rt, 'f')).toBe(42);
366
+ });
367
+ test('chain of calls', () => {
368
+ const rt = makeRuntime(`
369
+ fn inc(x: int): int { return x + 1; }
370
+ fn f(): int { return inc(inc(inc(0))); }
371
+ `);
372
+ expect(callAndGetRet(rt, 'f')).toBe(3);
373
+ });
374
+ test('call function with no return used in expression', () => {
375
+ const rt = makeRuntime(`
376
+ fn five(): int { return 5; }
377
+ fn f(): int {
378
+ let x: int = five() + five();
379
+ return x;
380
+ }
381
+ `);
382
+ expect(callAndGetRet(rt, 'f')).toBe(10);
383
+ });
384
+ });
385
+ describe('v2 migration: boolean logic', () => {
386
+ test('true AND true = 1', () => {
387
+ const rt = makeRuntime(`
388
+ fn f(): int {
389
+ if (true && true) { return 1; } else { return 0; }
390
+ }
391
+ `);
392
+ expect(callAndGetRet(rt, 'f')).toBe(1);
393
+ });
394
+ test('true AND false = 0', () => {
395
+ const rt = makeRuntime(`
396
+ fn f(): int {
397
+ if (true && false) { return 1; } else { return 0; }
398
+ }
399
+ `);
400
+ expect(callAndGetRet(rt, 'f')).toBe(0);
401
+ });
402
+ test('false OR true = 1', () => {
403
+ const rt = makeRuntime(`
404
+ fn f(): int {
405
+ if (false || true) { return 1; } else { return 0; }
406
+ }
407
+ `);
408
+ expect(callAndGetRet(rt, 'f')).toBe(1);
409
+ });
410
+ test('NOT true = 0', () => {
411
+ const rt = makeRuntime(`
412
+ fn f(): int {
413
+ if (!true) { return 1; } else { return 0; }
414
+ }
415
+ `);
416
+ expect(callAndGetRet(rt, 'f')).toBe(0);
417
+ });
418
+ });
419
+ // ===========================================================================
420
+ // 4. More complex patterns from the original test suite
421
+ // ===========================================================================
422
+ describe('v2 migration: compound expressions', () => {
423
+ test('abs via if/else', () => {
424
+ const rt = makeRuntime(`
425
+ fn abs(x: int): int {
426
+ if (x < 0) { return -x; } else { return x; }
427
+ }
428
+ fn f(): int { return abs(-7); }
429
+ `);
430
+ expect(callAndGetRet(rt, 'f')).toBe(7);
431
+ });
432
+ test('max of two', () => {
433
+ const rt = makeRuntime(`
434
+ fn max(a: int, b: int): int {
435
+ if (a > b) { return a; } else { return b; }
436
+ }
437
+ fn f(): int { return max(3, 7); }
438
+ `);
439
+ expect(callAndGetRet(rt, 'f')).toBe(7);
440
+ });
441
+ test('factorial iterative', () => {
442
+ const rt = makeRuntime(`
443
+ fn fact(n: int): int {
444
+ let result: int = 1;
445
+ let i: int = 1;
446
+ while (i <= n) {
447
+ result = result * i;
448
+ i = i + 1;
449
+ }
450
+ return result;
451
+ }
452
+ fn f(): int { return fact(5); }
453
+ `);
454
+ expect(callAndGetRet(rt, 'f')).toBe(120);
455
+ });
456
+ test('fibonacci iterative', () => {
457
+ const rt = makeRuntime(`
458
+ fn fib(n: int): int {
459
+ let a: int = 0;
460
+ let b: int = 1;
461
+ let i: int = 0;
462
+ while (i < n) {
463
+ let tmp: int = b;
464
+ b = a + b;
465
+ a = tmp;
466
+ i = i + 1;
467
+ }
468
+ return a;
469
+ }
470
+ fn f(): int { return fib(10); }
471
+ `);
472
+ expect(callAndGetRet(rt, 'f')).toBe(55);
473
+ });
474
+ });
475
+ // ===========================================================================
476
+ // 5. Break / continue
477
+ // ===========================================================================
478
+ describe('v2 migration: break and continue', () => {
479
+ test('break exits loop early', () => {
480
+ const rt = makeRuntime(`
481
+ fn f(): int {
482
+ let i: int = 0;
483
+ while (true) {
484
+ if (i == 5) { break; }
485
+ i = i + 1;
486
+ }
487
+ return i;
488
+ }
489
+ `);
490
+ expect(callAndGetRet(rt, 'f')).toBe(5);
491
+ });
492
+ test('continue skips iteration', () => {
493
+ const rt = makeRuntime(`
494
+ fn f(): int {
495
+ let sum: int = 0;
496
+ let i: int = 0;
497
+ while (i < 10) {
498
+ i = i + 1;
499
+ if (i % 2 == 0) { continue; }
500
+ sum = sum + i;
501
+ }
502
+ return sum;
503
+ }
504
+ `);
505
+ // sum of odd numbers 1..9 = 1+3+5+7+9 = 25
506
+ expect(callAndGetRet(rt, 'f')).toBe(25);
507
+ });
508
+ });
509
+ // ===========================================================================
510
+ // 6. Compound assignment operators (desugared in HIR)
511
+ // ===========================================================================
512
+ describe('v2 migration: compound assignment', () => {
513
+ test('+= operator', () => {
514
+ const rt = makeRuntime(`
515
+ fn f(): int { let x: int = 10; x += 5; return x; }
516
+ `);
517
+ expect(callAndGetRet(rt, 'f')).toBe(15);
518
+ });
519
+ test('-= operator', () => {
520
+ const rt = makeRuntime(`
521
+ fn f(): int { let x: int = 10; x -= 3; return x; }
522
+ `);
523
+ expect(callAndGetRet(rt, 'f')).toBe(7);
524
+ });
525
+ test('*= operator', () => {
526
+ const rt = makeRuntime(`
527
+ fn f(): int { let x: int = 4; x *= 5; return x; }
528
+ `);
529
+ expect(callAndGetRet(rt, 'f')).toBe(20);
530
+ });
531
+ });
532
+ // ===========================================================================
533
+ // 7. Multiple return paths
534
+ // ===========================================================================
535
+ describe('v2 migration: multiple return paths', () => {
536
+ test('early return from if', () => {
537
+ const rt = makeRuntime(`
538
+ fn f(): int {
539
+ let x: int = 42;
540
+ if (x > 10) { return x; }
541
+ return 0;
542
+ }
543
+ `);
544
+ expect(callAndGetRet(rt, 'f')).toBe(42);
545
+ });
546
+ test('return from else path', () => {
547
+ const rt = makeRuntime(`
548
+ fn f(): int {
549
+ let x: int = 5;
550
+ if (x > 10) { return 1; }
551
+ return 2;
552
+ }
553
+ `);
554
+ expect(callAndGetRet(rt, 'f')).toBe(2);
555
+ });
556
+ test('return from nested if chains', () => {
557
+ const rt = makeRuntime(`
558
+ fn classify(x: int): int {
559
+ if (x < 0) { return -1; }
560
+ if (x == 0) { return 0; }
561
+ return 1;
562
+ }
563
+ fn f(): int {
564
+ return classify(-5) + classify(0) + classify(7);
565
+ }
566
+ `);
567
+ // -1 + 0 + 1 = 0
568
+ expect(callAndGetRet(rt, 'f')).toBe(0);
569
+ });
570
+ });
571
+ // ===========================================================================
572
+ // 8. Mutual function calls
573
+ // ===========================================================================
574
+ describe('v2 migration: mutual calls and recursion-like patterns', () => {
575
+ test('function calling function calling function', () => {
576
+ const rt = makeRuntime(`
577
+ fn a(): int { return 1; }
578
+ fn b(): int { return a() + 2; }
579
+ fn c(): int { return b() + 3; }
580
+ fn f(): int { return c(); }
581
+ `);
582
+ expect(callAndGetRet(rt, 'f')).toBe(6);
583
+ });
584
+ test('iterative power function', () => {
585
+ const rt = makeRuntime(`
586
+ fn pow(base: int, exp: int): int {
587
+ let result: int = 1;
588
+ let i: int = 0;
589
+ while (i < exp) {
590
+ result = result * base;
591
+ i = i + 1;
592
+ }
593
+ return result;
594
+ }
595
+ fn f(): int { return pow(2, 10); }
596
+ `);
597
+ expect(callAndGetRet(rt, 'f')).toBe(1024);
598
+ });
599
+ });
600
+ // ===========================================================================
601
+ // 9. Edge cases
602
+ // ===========================================================================
603
+ describe('v2 migration: edge cases', () => {
604
+ test('zero division (MC truncates to 0)', () => {
605
+ // MC scoreboard division by zero returns 0
606
+ const rt = makeRuntime('fn f(): int { return 10 / 0; }');
607
+ // This may throw or return 0 depending on MCRuntime behavior
608
+ try {
609
+ const val = callAndGetRet(rt, 'f');
610
+ expect(val).toBe(0);
611
+ }
612
+ catch {
613
+ // Division by zero is undefined in MC — just ensure no crash
614
+ }
615
+ });
616
+ test('deeply nested arithmetic', () => {
617
+ const rt = makeRuntime(`
618
+ fn f(): int {
619
+ return ((1 + 2) * (3 + 4)) - ((5 - 6) * (7 + 8));
620
+ }
621
+ `);
622
+ // (3 * 7) - ((-1) * 15) = 21 - (-15) = 36
623
+ expect(callAndGetRet(rt, 'f')).toBe(36);
624
+ });
625
+ test('many variables', () => {
626
+ const rt = makeRuntime(`
627
+ fn f(): int {
628
+ let a: int = 1;
629
+ let b: int = 2;
630
+ let c: int = 3;
631
+ let d: int = 4;
632
+ let e: int = 5;
633
+ return a + b + c + d + e;
634
+ }
635
+ `);
636
+ expect(callAndGetRet(rt, 'f')).toBe(15);
637
+ });
638
+ test('nested while loops', () => {
639
+ const rt = makeRuntime(`
640
+ fn f(): int {
641
+ let sum: int = 0;
642
+ let i: int = 0;
643
+ while (i < 3) {
644
+ let j: int = 0;
645
+ while (j < 3) {
646
+ sum = sum + 1;
647
+ j = j + 1;
648
+ }
649
+ i = i + 1;
650
+ }
651
+ return sum;
652
+ }
653
+ `);
654
+ expect(callAndGetRet(rt, 'f')).toBe(9);
655
+ });
656
+ test('if inside while', () => {
657
+ const rt = makeRuntime(`
658
+ fn f(): int {
659
+ let count: int = 0;
660
+ let i: int = 0;
661
+ while (i < 10) {
662
+ if (i % 3 == 0) {
663
+ count = count + 1;
664
+ }
665
+ i = i + 1;
666
+ }
667
+ return count;
668
+ }
669
+ `);
670
+ // 0, 3, 6, 9 are divisible by 3 → count = 4
671
+ expect(callAndGetRet(rt, 'f')).toBe(4);
672
+ });
673
+ test('while inside if', () => {
674
+ const rt = makeRuntime(`
675
+ fn f(): int {
676
+ let x: int = 1;
677
+ if (x > 0) {
678
+ let sum: int = 0;
679
+ let i: int = 0;
680
+ while (i < 5) {
681
+ sum = sum + i;
682
+ i = i + 1;
683
+ }
684
+ return sum;
685
+ }
686
+ return -1;
687
+ }
688
+ `);
689
+ expect(callAndGetRet(rt, 'f')).toBe(10);
690
+ });
691
+ });
692
+ // ===========================================================================
693
+ // 10. Function calls with 3+ parameters
694
+ // ===========================================================================
695
+ describe('v2 migration: multi-param functions', () => {
696
+ test('function with 3 parameters', () => {
697
+ const rt = makeRuntime(`
698
+ fn add3(a: int, b: int, c: int): int { return a + b + c; }
699
+ fn f(): int { return add3(10, 20, 30); }
700
+ `);
701
+ expect(callAndGetRet(rt, 'f')).toBe(60);
702
+ });
703
+ test('function with 4 parameters', () => {
704
+ const rt = makeRuntime(`
705
+ fn sum4(a: int, b: int, c: int, d: int): int { return a + b + c + d; }
706
+ fn f(): int { return sum4(1, 2, 3, 4); }
707
+ `);
708
+ expect(callAndGetRet(rt, 'f')).toBe(10);
709
+ });
710
+ test('function with 5 parameters', () => {
711
+ const rt = makeRuntime(`
712
+ fn sum5(a: int, b: int, c: int, d: int, e: int): int {
713
+ return a + b + c + d + e;
714
+ }
715
+ fn f(): int { return sum5(2, 4, 6, 8, 10); }
716
+ `);
717
+ expect(callAndGetRet(rt, 'f')).toBe(30);
718
+ });
719
+ test('3-param function with mixed operations', () => {
720
+ const rt = makeRuntime(`
721
+ fn weighted(a: int, b: int, w: int): int {
722
+ return a * w + b * (100 - w);
723
+ }
724
+ fn f(): int { return weighted(10, 5, 60); }
725
+ `);
726
+ // 10 * 60 + 5 * 40 = 600 + 200 = 800
727
+ expect(callAndGetRet(rt, 'f')).toBe(800);
728
+ });
729
+ });
730
+ // ===========================================================================
731
+ // 11. Call chains and nested calls
732
+ // ===========================================================================
733
+ describe('v2 migration: call chains', () => {
734
+ test('4-deep call chain', () => {
735
+ const rt = makeRuntime(`
736
+ fn a(): int { return 1; }
737
+ fn b(): int { return a() + 10; }
738
+ fn c(): int { return b() + 100; }
739
+ fn d(): int { return c() + 1000; }
740
+ fn f(): int { return d(); }
741
+ `);
742
+ expect(callAndGetRet(rt, 'f')).toBe(1111);
743
+ });
744
+ test('function calling same function multiple times', () => {
745
+ const rt = makeRuntime(`
746
+ fn square(x: int): int { return x * x; }
747
+ fn f(): int { return square(3) + square(4); }
748
+ `);
749
+ // 9 + 16 = 25
750
+ expect(callAndGetRet(rt, 'f')).toBe(25);
751
+ });
752
+ test('function result used as argument', () => {
753
+ const rt = makeRuntime(`
754
+ fn add(a: int, b: int): int { return a + b; }
755
+ fn f(): int { return add(add(1, 2), add(3, 4)); }
756
+ `);
757
+ // add(3, 7) = 10
758
+ expect(callAndGetRet(rt, 'f')).toBe(10);
759
+ });
760
+ test('mutual helper functions', () => {
761
+ const rt = makeRuntime(`
762
+ fn double(x: int): int { return x * 2; }
763
+ fn triple(x: int): int { return x * 3; }
764
+ fn f(): int { return double(5) + triple(5); }
765
+ `);
766
+ expect(callAndGetRet(rt, 'f')).toBe(25);
767
+ });
768
+ });
769
+ // ===========================================================================
770
+ // 12. Math-style patterns (inline, no stdlib import)
771
+ // ===========================================================================
772
+ describe('v2 migration: math patterns', () => {
773
+ test('min of two numbers', () => {
774
+ const rt = makeRuntime(`
775
+ fn min(a: int, b: int): int {
776
+ if (a < b) { return a; } else { return b; }
777
+ }
778
+ fn f(): int { return min(7, 3); }
779
+ `);
780
+ expect(callAndGetRet(rt, 'f')).toBe(3);
781
+ });
782
+ test('min returns first when equal', () => {
783
+ const rt = makeRuntime(`
784
+ fn min(a: int, b: int): int {
785
+ if (a < b) { return a; } else { return b; }
786
+ }
787
+ fn f(): int { return min(5, 5); }
788
+ `);
789
+ expect(callAndGetRet(rt, 'f')).toBe(5);
790
+ });
791
+ test('abs of positive stays positive', () => {
792
+ const rt = makeRuntime(`
793
+ fn abs(x: int): int {
794
+ if (x < 0) { return -x; } else { return x; }
795
+ }
796
+ fn f(): int { return abs(42); }
797
+ `);
798
+ expect(callAndGetRet(rt, 'f')).toBe(42);
799
+ });
800
+ test('abs of zero is zero', () => {
801
+ const rt = makeRuntime(`
802
+ fn abs(x: int): int {
803
+ if (x < 0) { return -x; } else { return x; }
804
+ }
805
+ fn f(): int { return abs(0); }
806
+ `);
807
+ expect(callAndGetRet(rt, 'f')).toBe(0);
808
+ });
809
+ test('clamp value in range', () => {
810
+ const rt = makeRuntime(`
811
+ fn clamp(val: int, lo: int, hi: int): int {
812
+ if (val < lo) { return lo; }
813
+ if (val > hi) { return hi; }
814
+ return val;
815
+ }
816
+ fn f(): int { return clamp(50, 0, 100); }
817
+ `);
818
+ expect(callAndGetRet(rt, 'f')).toBe(50);
819
+ });
820
+ test('clamp below minimum', () => {
821
+ const rt = makeRuntime(`
822
+ fn clamp(val: int, lo: int, hi: int): int {
823
+ if (val < lo) { return lo; }
824
+ if (val > hi) { return hi; }
825
+ return val;
826
+ }
827
+ fn f(): int { return clamp(-5, 0, 100); }
828
+ `);
829
+ expect(callAndGetRet(rt, 'f')).toBe(0);
830
+ });
831
+ test('clamp above maximum', () => {
832
+ const rt = makeRuntime(`
833
+ fn clamp(val: int, lo: int, hi: int): int {
834
+ if (val < lo) { return lo; }
835
+ if (val > hi) { return hi; }
836
+ return val;
837
+ }
838
+ fn f(): int { return clamp(200, 0, 100); }
839
+ `);
840
+ expect(callAndGetRet(rt, 'f')).toBe(100);
841
+ });
842
+ test('sign function', () => {
843
+ const rt = makeRuntime(`
844
+ fn sign(x: int): int {
845
+ if (x > 0) { return 1; }
846
+ if (x < 0) { return -1; }
847
+ return 0;
848
+ }
849
+ fn f(): int { return sign(-42) + sign(0) + sign(99); }
850
+ `);
851
+ // -1 + 0 + 1 = 0
852
+ expect(callAndGetRet(rt, 'f')).toBe(0);
853
+ });
854
+ });
855
+ // ===========================================================================
856
+ // 13. More break/continue patterns
857
+ // ===========================================================================
858
+ describe('v2 migration: advanced break/continue', () => {
859
+ test('break in nested if inside loop', () => {
860
+ const rt = makeRuntime(`
861
+ fn f(): int {
862
+ let sum: int = 0;
863
+ let i: int = 0;
864
+ while (i < 100) {
865
+ sum = sum + i;
866
+ i = i + 1;
867
+ if (sum > 10) { break; }
868
+ }
869
+ return sum;
870
+ }
871
+ `);
872
+ // 0+1+2+3+4+5 = 15 > 10, breaks at i=6
873
+ expect(callAndGetRet(rt, 'f')).toBe(15);
874
+ });
875
+ test('continue with counter (using == pattern)', () => {
876
+ const rt = makeRuntime(`
877
+ fn f(): int {
878
+ let count: int = 0;
879
+ let i: int = 0;
880
+ while (i < 10) {
881
+ i = i + 1;
882
+ if (i % 3 == 0) { continue; }
883
+ count = count + 1;
884
+ }
885
+ return count;
886
+ }
887
+ `);
888
+ // i=1..10, skip 3,6,9 → count = 7
889
+ expect(callAndGetRet(rt, 'f')).toBe(7);
890
+ });
891
+ test('break from while(true) with accumulator', () => {
892
+ const rt = makeRuntime(`
893
+ fn f(): int {
894
+ let n: int = 1;
895
+ while (true) {
896
+ n = n * 2;
897
+ if (n >= 64) { break; }
898
+ }
899
+ return n;
900
+ }
901
+ `);
902
+ expect(callAndGetRet(rt, 'f')).toBe(64);
903
+ });
904
+ test('continue and break in same loop', () => {
905
+ const rt = makeRuntime(`
906
+ fn f(): int {
907
+ let sum: int = 0;
908
+ let i: int = 0;
909
+ while (true) {
910
+ i = i + 1;
911
+ if (i > 10) { break; }
912
+ if (i % 2 == 0) { continue; }
913
+ sum = sum + i;
914
+ }
915
+ return sum;
916
+ }
917
+ `);
918
+ // odd numbers 1..10: 1+3+5+7+9 = 25
919
+ expect(callAndGetRet(rt, 'f')).toBe(25);
920
+ });
921
+ });
922
+ // ===========================================================================
923
+ // 14. for loops (desugared to while in HIR)
924
+ // ===========================================================================
925
+ describe('v2 migration: for loops', () => {
926
+ test('simple for loop sum', () => {
927
+ const rt = makeRuntime(`
928
+ fn f(): int {
929
+ let sum: int = 0;
930
+ for (let i: int = 1; i <= 10; i = i + 1) {
931
+ sum = sum + i;
932
+ }
933
+ return sum;
934
+ }
935
+ `);
936
+ expect(callAndGetRet(rt, 'f')).toBe(55);
937
+ });
938
+ test('for loop with multiplication', () => {
939
+ const rt = makeRuntime(`
940
+ fn f(): int {
941
+ let product: int = 1;
942
+ for (let i: int = 1; i <= 6; i = i + 1) {
943
+ product = product * i;
944
+ }
945
+ return product;
946
+ }
947
+ `);
948
+ // 6! = 720
949
+ expect(callAndGetRet(rt, 'f')).toBe(720);
950
+ });
951
+ test('for loop counting down', () => {
952
+ const rt = makeRuntime(`
953
+ fn f(): int {
954
+ let last: int = 0;
955
+ for (let i: int = 10; i > 0; i = i - 1) {
956
+ last = i;
957
+ }
958
+ return last;
959
+ }
960
+ `);
961
+ expect(callAndGetRet(rt, 'f')).toBe(1);
962
+ });
963
+ test('nested for loops', () => {
964
+ const rt = makeRuntime(`
965
+ fn f(): int {
966
+ let count: int = 0;
967
+ for (let i: int = 0; i < 4; i = i + 1) {
968
+ for (let j: int = 0; j < 3; j = j + 1) {
969
+ count = count + 1;
970
+ }
971
+ }
972
+ return count;
973
+ }
974
+ `);
975
+ expect(callAndGetRet(rt, 'f')).toBe(12);
976
+ });
977
+ test('for loop with break', () => {
978
+ const rt = makeRuntime(`
979
+ fn f(): int {
980
+ let result: int = 0;
981
+ for (let i: int = 0; i < 100; i = i + 1) {
982
+ if (i == 7) {
983
+ result = i;
984
+ break;
985
+ }
986
+ }
987
+ return result;
988
+ }
989
+ `);
990
+ expect(callAndGetRet(rt, 'f')).toBe(7);
991
+ });
992
+ });
993
+ // ===========================================================================
994
+ // 15. @tick and @load runtime behavior
995
+ // ===========================================================================
996
+ describe('v2 migration: @tick/@load runtime', () => {
997
+ test('@tick function executes and modifies state', () => {
998
+ const source = `
999
+ let counter: int = 0;
1000
+ @tick fn game_tick(): void {
1001
+ counter = counter + 1;
1002
+ }
1003
+ fn get_counter(): int { return counter; }
1004
+ `;
1005
+ // @tick functions should compile and be callable
1006
+ expect(() => (0, compile_1.compile)(source, { namespace: NS })).not.toThrow();
1007
+ });
1008
+ test('@load function runs on load', () => {
1009
+ const source = `
1010
+ @load fn setup(): void {
1011
+ let x: int = 42;
1012
+ }
1013
+ `;
1014
+ const result = (0, compile_1.compile)(source, { namespace: NS });
1015
+ const loadJson = getFile(result.files, 'load.json');
1016
+ expect(loadJson).toBeDefined();
1017
+ const values = JSON.parse(loadJson).values;
1018
+ expect(values).toContain(`${NS}:setup`);
1019
+ expect(values).toContain(`${NS}:load`);
1020
+ });
1021
+ test('@tick and @load on different functions', () => {
1022
+ const source = `
1023
+ @tick fn on_tick(): void { let x: int = 1; }
1024
+ @load fn on_load(): void { let y: int = 2; }
1025
+ `;
1026
+ const result = (0, compile_1.compile)(source, { namespace: NS });
1027
+ const tickJson = getFile(result.files, 'tick.json');
1028
+ const loadJson = getFile(result.files, 'load.json');
1029
+ expect(tickJson).toBeDefined();
1030
+ expect(JSON.parse(tickJson).values).toContain(`${NS}:on_tick`);
1031
+ expect(loadJson).toBeDefined();
1032
+ expect(JSON.parse(loadJson).values).toContain(`${NS}:on_load`);
1033
+ });
1034
+ test('multiple @tick functions all appear in tick.json', () => {
1035
+ const source = `
1036
+ @tick fn tick1(): void { let x: int = 1; }
1037
+ @tick fn tick2(): void { let y: int = 2; }
1038
+ `;
1039
+ const result = (0, compile_1.compile)(source, { namespace: NS });
1040
+ const tickJson = getFile(result.files, 'tick.json');
1041
+ expect(tickJson).toBeDefined();
1042
+ const values = JSON.parse(tickJson).values;
1043
+ expect(values).toContain(`${NS}:tick1`);
1044
+ expect(values).toContain(`${NS}:tick2`);
1045
+ });
1046
+ test('@tick function with logic compiles and runs', () => {
1047
+ const rt = makeRuntime(`
1048
+ @tick fn game_tick(): void {
1049
+ let x: int = 5;
1050
+ let y: int = x + 10;
1051
+ }
1052
+ fn f(): int { return 1; }
1053
+ `);
1054
+ // Tick function should be callable without crashing
1055
+ rt.execFunction(`${NS}:game_tick`);
1056
+ expect(callAndGetRet(rt, 'f')).toBe(1);
1057
+ });
1058
+ test('@load function body executes correctly in runtime', () => {
1059
+ const rt = makeRuntime(`
1060
+ @load fn init(): void {
1061
+ let x: int = 100;
1062
+ }
1063
+ fn f(): int { return 42; }
1064
+ `);
1065
+ expect(callAndGetRet(rt, 'f')).toBe(42);
1066
+ });
1067
+ });
1068
+ // ===========================================================================
1069
+ // 16. Struct declaration and field access (smoke + structural)
1070
+ // ===========================================================================
1071
+ describe('v2 migration: struct smoke tests', () => {
1072
+ test('struct declaration compiles', () => {
1073
+ expect(() => (0, compile_1.compile)(`
1074
+ struct Point { x: int, y: int }
1075
+ fn f(): int { return 1; }
1076
+ `, { namespace: NS })).not.toThrow();
1077
+ });
1078
+ test('struct literal compiles', () => {
1079
+ expect(() => (0, compile_1.compile)(`
1080
+ struct Vec2 { x: int, y: int }
1081
+ fn f(): int {
1082
+ let p: Vec2 = { x: 10, y: 20 };
1083
+ return 1;
1084
+ }
1085
+ `, { namespace: NS })).not.toThrow();
1086
+ });
1087
+ test('struct with impl compiles', () => {
1088
+ expect(() => (0, compile_1.compile)(`
1089
+ struct Counter { value: int }
1090
+ impl Counter {
1091
+ fn new(): Counter {
1092
+ return { value: 0 };
1093
+ }
1094
+ }
1095
+ fn f(): int { return 1; }
1096
+ `, { namespace: NS })).not.toThrow();
1097
+ });
1098
+ test('struct field access compiles', () => {
1099
+ expect(() => (0, compile_1.compile)(`
1100
+ struct Point { x: int, y: int }
1101
+ fn f(): int {
1102
+ let p: Point = { x: 5, y: 10 };
1103
+ let val: int = p.x;
1104
+ return val;
1105
+ }
1106
+ `, { namespace: NS })).not.toThrow();
1107
+ });
1108
+ test('struct field assignment compiles', () => {
1109
+ expect(() => (0, compile_1.compile)(`
1110
+ struct Point { x: int, y: int }
1111
+ fn f(): void {
1112
+ let p: Point = { x: 5, y: 10 };
1113
+ p.x = 20;
1114
+ }
1115
+ `, { namespace: NS })).not.toThrow();
1116
+ });
1117
+ test('struct method call via static_call compiles', () => {
1118
+ expect(() => (0, compile_1.compile)(`
1119
+ struct Vec2 { x: int, y: int }
1120
+ impl Vec2 {
1121
+ fn new(x: int, y: int): Vec2 {
1122
+ return { x: x, y: y };
1123
+ }
1124
+ }
1125
+ fn f(): void {
1126
+ let v: Vec2 = Vec2::new(1, 2);
1127
+ }
1128
+ `, { namespace: NS })).not.toThrow();
1129
+ });
1130
+ test('struct static method generates function file', () => {
1131
+ const result = (0, compile_1.compile)(`
1132
+ struct Vec2 { x: int, y: int }
1133
+ impl Vec2 {
1134
+ fn new(x: int, y: int): Vec2 {
1135
+ return { x: x, y: y };
1136
+ }
1137
+ }
1138
+ fn f(): void {
1139
+ let v: Vec2 = Vec2::new(1, 2);
1140
+ }
1141
+ `, { namespace: NS });
1142
+ // impl methods are named Type::method in LIR → type/method in path
1143
+ const fnFiles = result.files.filter(f => f.path.endsWith('.mcfunction'));
1144
+ expect(fnFiles.length).toBeGreaterThanOrEqual(2); // at least f + Vec2::new
1145
+ });
1146
+ test('multiple struct declarations compile', () => {
1147
+ expect(() => (0, compile_1.compile)(`
1148
+ struct Point { x: int, y: int }
1149
+ struct Color { r: int, g: int, b: int }
1150
+ fn f(): int { return 1; }
1151
+ `, { namespace: NS })).not.toThrow();
1152
+ });
1153
+ });
1154
+ // ===========================================================================
1155
+ // 17. Execute context blocks (structural)
1156
+ // ===========================================================================
1157
+ describe('v2 migration: execute blocks', () => {
1158
+ test('as @a block compiles', () => {
1159
+ expect(() => (0, compile_1.compile)(`
1160
+ fn f(): void {
1161
+ as @a {
1162
+ let x: int = 1;
1163
+ }
1164
+ }
1165
+ `, { namespace: NS })).not.toThrow();
1166
+ });
1167
+ test('as @a generates execute as command', () => {
1168
+ const result = (0, compile_1.compile)(`
1169
+ fn f(): void {
1170
+ as @a {
1171
+ let x: int = 1;
1172
+ }
1173
+ }
1174
+ `, { namespace: NS });
1175
+ const allContent = result.files
1176
+ .filter(f => f.path.endsWith('.mcfunction'))
1177
+ .map(f => f.content).join('\n');
1178
+ expect(allContent).toContain('execute as @a run function');
1179
+ });
1180
+ test('at @s block compiles', () => {
1181
+ expect(() => (0, compile_1.compile)(`
1182
+ fn f(): void {
1183
+ at @s {
1184
+ let x: int = 1;
1185
+ }
1186
+ }
1187
+ `, { namespace: NS })).not.toThrow();
1188
+ });
1189
+ test('as @e at @s compiles', () => {
1190
+ expect(() => (0, compile_1.compile)(`
1191
+ fn f(): void {
1192
+ as @e at @s {
1193
+ let x: int = 1;
1194
+ }
1195
+ }
1196
+ `, { namespace: NS })).not.toThrow();
1197
+ });
1198
+ test('as @e at @s generates execute command', () => {
1199
+ const result = (0, compile_1.compile)(`
1200
+ fn f(): void {
1201
+ as @e at @s {
1202
+ let x: int = 1;
1203
+ }
1204
+ }
1205
+ `, { namespace: NS });
1206
+ const allContent = result.files
1207
+ .filter(f => f.path.endsWith('.mcfunction'))
1208
+ .map(f => f.content).join('\n');
1209
+ expect(allContent).toContain('execute as @e at @s run function');
1210
+ });
1211
+ test('nested execute blocks compile', () => {
1212
+ expect(() => (0, compile_1.compile)(`
1213
+ fn f(): void {
1214
+ as @a {
1215
+ as @e {
1216
+ let x: int = 1;
1217
+ }
1218
+ }
1219
+ }
1220
+ `, { namespace: NS })).not.toThrow();
1221
+ });
1222
+ test('execute body creates helper function', () => {
1223
+ const result = (0, compile_1.compile)(`
1224
+ fn f(): void {
1225
+ as @a {
1226
+ let x: int = 42;
1227
+ }
1228
+ }
1229
+ `, { namespace: NS });
1230
+ const fnFiles = result.files.filter(f => f.path.endsWith('.mcfunction'));
1231
+ // Should have at least: load, f, f__exec helper
1232
+ expect(fnFiles.length).toBeGreaterThanOrEqual(3);
1233
+ });
1234
+ });
1235
+ // ===========================================================================
1236
+ // 18. foreach (structural)
1237
+ // ===========================================================================
1238
+ describe('v2 migration: foreach', () => {
1239
+ test('foreach with selector compiles', () => {
1240
+ expect(() => (0, compile_1.compile)(`
1241
+ fn f(): void {
1242
+ foreach (e in @e) {
1243
+ let x: int = 1;
1244
+ }
1245
+ }
1246
+ `, { namespace: NS })).not.toThrow();
1247
+ });
1248
+ test('foreach generates execute as ... run function', () => {
1249
+ const result = (0, compile_1.compile)(`
1250
+ fn f(): void {
1251
+ foreach (e in @e) {
1252
+ let x: int = 1;
1253
+ }
1254
+ }
1255
+ `, { namespace: NS });
1256
+ const allContent = result.files
1257
+ .filter(f => f.path.endsWith('.mcfunction'))
1258
+ .map(f => f.content).join('\n');
1259
+ expect(allContent).toContain('execute as @e run function');
1260
+ });
1261
+ test('foreach with @a selector', () => {
1262
+ const result = (0, compile_1.compile)(`
1263
+ fn f(): void {
1264
+ foreach (p in @a) {
1265
+ let x: int = 1;
1266
+ }
1267
+ }
1268
+ `, { namespace: NS });
1269
+ const allContent = result.files
1270
+ .filter(f => f.path.endsWith('.mcfunction'))
1271
+ .map(f => f.content).join('\n');
1272
+ expect(allContent).toContain('execute as @a run function');
1273
+ });
1274
+ test('foreach creates helper function', () => {
1275
+ const result = (0, compile_1.compile)(`
1276
+ fn f(): void {
1277
+ foreach (e in @e) {
1278
+ let x: int = 1;
1279
+ }
1280
+ }
1281
+ `, { namespace: NS });
1282
+ const fnFiles = result.files.filter(f => f.path.endsWith('.mcfunction'));
1283
+ // Should have at least: load, f, foreach helper
1284
+ expect(fnFiles.length).toBeGreaterThanOrEqual(3);
1285
+ });
1286
+ });
1287
+ // ===========================================================================
1288
+ // 19. Selectors (smoke)
1289
+ // ===========================================================================
1290
+ describe('v2 migration: selectors', () => {
1291
+ test('@a selector in foreach compiles', () => {
1292
+ expect(() => (0, compile_1.compile)(`
1293
+ fn f(): void {
1294
+ foreach (p in @a) { let x: int = 1; }
1295
+ }
1296
+ `, { namespace: NS })).not.toThrow();
1297
+ });
1298
+ test('@e selector in foreach compiles', () => {
1299
+ expect(() => (0, compile_1.compile)(`
1300
+ fn f(): void {
1301
+ foreach (e in @e) { let x: int = 1; }
1302
+ }
1303
+ `, { namespace: NS })).not.toThrow();
1304
+ });
1305
+ test('@s selector in as block compiles', () => {
1306
+ expect(() => (0, compile_1.compile)(`
1307
+ fn f(): void {
1308
+ at @s { let x: int = 1; }
1309
+ }
1310
+ `, { namespace: NS })).not.toThrow();
1311
+ });
1312
+ test('@p selector compiles', () => {
1313
+ expect(() => (0, compile_1.compile)(`
1314
+ fn f(): void {
1315
+ foreach (p in @p) { let x: int = 1; }
1316
+ }
1317
+ `, { namespace: NS })).not.toThrow();
1318
+ });
1319
+ });
1320
+ // ===========================================================================
1321
+ // 20. Raw commands
1322
+ // ===========================================================================
1323
+ describe('v2 migration: raw commands', () => {
1324
+ test('raw command compiles', () => {
1325
+ expect(() => (0, compile_1.compile)(`
1326
+ fn f(): void {
1327
+ raw("say hello world");
1328
+ }
1329
+ `, { namespace: NS })).not.toThrow();
1330
+ });
1331
+ test('raw command appears in output', () => {
1332
+ const result = (0, compile_1.compile)(`
1333
+ fn f(): void {
1334
+ raw("say hello world");
1335
+ }
1336
+ `, { namespace: NS });
1337
+ const fn = getFile(result.files, '/f.mcfunction');
1338
+ expect(fn).toBeDefined();
1339
+ expect(fn).toContain('say hello world');
1340
+ });
1341
+ test('multiple raw commands', () => {
1342
+ const result = (0, compile_1.compile)(`
1343
+ fn f(): void {
1344
+ raw("say line one");
1345
+ raw("say line two");
1346
+ }
1347
+ `, { namespace: NS });
1348
+ const fn = getFile(result.files, '/f.mcfunction');
1349
+ expect(fn).toContain('say line one');
1350
+ expect(fn).toContain('say line two');
1351
+ });
1352
+ });
1353
+ // ===========================================================================
1354
+ // 21. Match statement
1355
+ // ===========================================================================
1356
+ describe('v2 migration: match statement', () => {
1357
+ test('match compiles without error', () => {
1358
+ expect(() => (0, compile_1.compile)(`
1359
+ fn f(x: int): int {
1360
+ match (x) {
1361
+ 1 => { return 10; }
1362
+ 2 => { return 20; }
1363
+ _ => { return 0; }
1364
+ }
1365
+ }
1366
+ `, { namespace: NS })).not.toThrow();
1367
+ });
1368
+ test('match selects correct arm', () => {
1369
+ const rt = makeRuntime(`
1370
+ fn classify(x: int): int {
1371
+ match (x) {
1372
+ 1 => { return 10; }
1373
+ 2 => { return 20; }
1374
+ 3 => { return 30; }
1375
+ _ => { return 0; }
1376
+ }
1377
+ }
1378
+ fn f(): int { return classify(2); }
1379
+ `);
1380
+ expect(callAndGetRet(rt, 'f')).toBe(20);
1381
+ });
1382
+ test('match default arm', () => {
1383
+ const rt = makeRuntime(`
1384
+ fn classify(x: int): int {
1385
+ match (x) {
1386
+ 1 => { return 10; }
1387
+ _ => { return 99; }
1388
+ }
1389
+ }
1390
+ fn f(): int { return classify(42); }
1391
+ `);
1392
+ expect(callAndGetRet(rt, 'f')).toBe(99);
1393
+ });
1394
+ test('match first arm', () => {
1395
+ const rt = makeRuntime(`
1396
+ fn classify(x: int): int {
1397
+ match (x) {
1398
+ 1 => { return 10; }
1399
+ 2 => { return 20; }
1400
+ _ => { return 0; }
1401
+ }
1402
+ }
1403
+ fn f(): int { return classify(1); }
1404
+ `);
1405
+ expect(callAndGetRet(rt, 'f')).toBe(10);
1406
+ });
1407
+ });
1408
+ // ===========================================================================
1409
+ // 22. Complex integration patterns
1410
+ // ===========================================================================
1411
+ describe('v2 migration: complex patterns', () => {
1412
+ test('GCD iterative (Euclid)', () => {
1413
+ const rt = makeRuntime(`
1414
+ fn gcd(a: int, b: int): int {
1415
+ while (b != 0) {
1416
+ let temp: int = b;
1417
+ b = a % b;
1418
+ a = temp;
1419
+ }
1420
+ return a;
1421
+ }
1422
+ fn f(): int { return gcd(48, 18); }
1423
+ `);
1424
+ expect(callAndGetRet(rt, 'f')).toBe(6);
1425
+ });
1426
+ test('sum of squares', () => {
1427
+ const rt = makeRuntime(`
1428
+ fn sum_sq(n: int): int {
1429
+ let sum: int = 0;
1430
+ let i: int = 1;
1431
+ while (i <= n) {
1432
+ sum = sum + i * i;
1433
+ i = i + 1;
1434
+ }
1435
+ return sum;
1436
+ }
1437
+ fn f(): int { return sum_sq(5); }
1438
+ `);
1439
+ // 1 + 4 + 9 + 16 + 25 = 55
1440
+ expect(callAndGetRet(rt, 'f')).toBe(55);
1441
+ });
1442
+ test('collatz steps', () => {
1443
+ const rt = makeRuntime(`
1444
+ fn collatz(n: int): int {
1445
+ let steps: int = 0;
1446
+ while (n != 1) {
1447
+ if (n % 2 == 0) {
1448
+ n = n / 2;
1449
+ } else {
1450
+ n = n * 3 + 1;
1451
+ }
1452
+ steps = steps + 1;
1453
+ }
1454
+ return steps;
1455
+ }
1456
+ fn f(): int { return collatz(6); }
1457
+ `);
1458
+ // 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 = 8 steps
1459
+ expect(callAndGetRet(rt, 'f')).toBe(8);
1460
+ });
1461
+ test('is_prime check', () => {
1462
+ const rt = makeRuntime(`
1463
+ fn is_prime(n: int): int {
1464
+ if (n <= 1) { return 0; }
1465
+ let i: int = 2;
1466
+ while (i * i <= n) {
1467
+ if (n % i == 0) { return 0; }
1468
+ i = i + 1;
1469
+ }
1470
+ return 1;
1471
+ }
1472
+ fn f(): int {
1473
+ return is_prime(2) + is_prime(7) + is_prime(11) + is_prime(4) + is_prime(9);
1474
+ }
1475
+ `);
1476
+ // 2=prime(1), 7=prime(1), 11=prime(1), 4=not(0), 9=not(0) → 3
1477
+ expect(callAndGetRet(rt, 'f')).toBe(3);
1478
+ });
1479
+ test('bubble sort pass count', () => {
1480
+ const rt = makeRuntime(`
1481
+ fn f(): int {
1482
+ let a: int = 5;
1483
+ let b: int = 3;
1484
+ let c: int = 8;
1485
+ let d: int = 1;
1486
+ let swaps: int = 0;
1487
+
1488
+ // Pass 1
1489
+ if (a > b) { let t: int = a; a = b; b = t; swaps = swaps + 1; }
1490
+ if (b > c) { let t: int = b; b = c; c = t; swaps = swaps + 1; }
1491
+ if (c > d) { let t: int = c; c = d; d = t; swaps = swaps + 1; }
1492
+
1493
+ // Pass 2
1494
+ if (a > b) { let t: int = a; a = b; b = t; swaps = swaps + 1; }
1495
+ if (b > c) { let t: int = b; b = c; c = t; swaps = swaps + 1; }
1496
+
1497
+ // Pass 3
1498
+ if (a > b) { let t: int = a; a = b; b = t; swaps = swaps + 1; }
1499
+
1500
+ return swaps;
1501
+ }
1502
+ `);
1503
+ // 5,3,8,1 → pass1: swap(5,3)→3,5,8,1 swap(8,1)→3,5,1,8 → pass2: swap(5,1)→3,1,5,8 → pass3: swap(3,1)→1,3,5,8
1504
+ // swaps: 1+0+1 + 0+1 + 1 = 4
1505
+ expect(callAndGetRet(rt, 'f')).toBe(4);
1506
+ });
1507
+ test('linear search', () => {
1508
+ const rt = makeRuntime(`
1509
+ fn f(): int {
1510
+ let a: int = 10;
1511
+ let b: int = 20;
1512
+ let c: int = 30;
1513
+ let d: int = 40;
1514
+ let e: int = 50;
1515
+ let target: int = 30;
1516
+
1517
+ if (a == target) { return 0; }
1518
+ if (b == target) { return 1; }
1519
+ if (c == target) { return 2; }
1520
+ if (d == target) { return 3; }
1521
+ if (e == target) { return 4; }
1522
+ return -1;
1523
+ }
1524
+ `);
1525
+ expect(callAndGetRet(rt, 'f')).toBe(2);
1526
+ });
1527
+ });
1528
+ // ===========================================================================
1529
+ // 23. Const declarations
1530
+ // ===========================================================================
1531
+ describe('v2 migration: const declarations', () => {
1532
+ test('const inlined in expression', () => {
1533
+ expect(() => (0, compile_1.compile)(`
1534
+ const MAX: int = 100;
1535
+ fn f(): int { return MAX; }
1536
+ `, { namespace: NS })).not.toThrow();
1537
+ });
1538
+ });
1539
+ // ===========================================================================
1540
+ // 24. Boolean logic edge cases
1541
+ // ===========================================================================
1542
+ describe('v2 migration: boolean edge cases', () => {
1543
+ test('double negation', () => {
1544
+ const rt = makeRuntime(`
1545
+ fn f(): int {
1546
+ if (!!true) { return 1; } else { return 0; }
1547
+ }
1548
+ `);
1549
+ expect(callAndGetRet(rt, 'f')).toBe(1);
1550
+ });
1551
+ test('complex boolean expression', () => {
1552
+ const rt = makeRuntime(`
1553
+ fn f(): int {
1554
+ let a: int = 5;
1555
+ let b: int = 10;
1556
+ if (a > 0 && b > 0 && a < b) { return 1; } else { return 0; }
1557
+ }
1558
+ `);
1559
+ expect(callAndGetRet(rt, 'f')).toBe(1);
1560
+ });
1561
+ test('OR short-circuit: first true', () => {
1562
+ const rt = makeRuntime(`
1563
+ fn f(): int {
1564
+ if (true || false) { return 1; } else { return 0; }
1565
+ }
1566
+ `);
1567
+ expect(callAndGetRet(rt, 'f')).toBe(1);
1568
+ });
1569
+ test('AND with comparison', () => {
1570
+ const rt = makeRuntime(`
1571
+ fn f(): int {
1572
+ let x: int = 5;
1573
+ if (x >= 1 && x <= 10) { return 1; } else { return 0; }
1574
+ }
1575
+ `);
1576
+ expect(callAndGetRet(rt, 'f')).toBe(1);
1577
+ });
1578
+ test('AND false short-circuit', () => {
1579
+ const rt = makeRuntime(`
1580
+ fn f(): int {
1581
+ if (false && true) { return 1; } else { return 0; }
1582
+ }
1583
+ `);
1584
+ expect(callAndGetRet(rt, 'f')).toBe(0);
1585
+ });
1586
+ });
1587
+ // ===========================================================================
1588
+ // 25. Struct declaration and field access (behavioral)
1589
+ // ===========================================================================
1590
+ // TODO: Struct field access/assignment is stubbed at MIR level (returns const 0).
1591
+ // These behavioral tests will pass once MIR struct lowering is implemented.
1592
+ // See src2/mir/lower.ts — struct_lit, member, member_assign are opaque at MIR.
1593
+ describe('v2 migration: struct behavioral', () => {
1594
+ test('struct literal creates instance (compiles)', () => {
1595
+ expect(() => (0, compile_1.compile)(`
1596
+ struct Point { x: int, y: int }
1597
+ fn f(): int {
1598
+ let p: Point = { x: 10, y: 20 };
1599
+ return 1;
1600
+ }
1601
+ `, { namespace: NS })).not.toThrow();
1602
+ });
1603
+ test('struct field read returns correct value', () => {
1604
+ const rt = makeRuntime(`
1605
+ struct Point { x: int, y: int }
1606
+ fn f(): int {
1607
+ let p: Point = { x: 42, y: 10 };
1608
+ return p.x;
1609
+ }
1610
+ `);
1611
+ expect(callAndGetRet(rt, 'f')).toBe(42);
1612
+ });
1613
+ test('struct field read second field', () => {
1614
+ const rt = makeRuntime(`
1615
+ struct Point { x: int, y: int }
1616
+ fn f(): int {
1617
+ let p: Point = { x: 5, y: 99 };
1618
+ return p.y;
1619
+ }
1620
+ `);
1621
+ expect(callAndGetRet(rt, 'f')).toBe(99);
1622
+ });
1623
+ test('struct field write and read back', () => {
1624
+ const rt = makeRuntime(`
1625
+ struct Point { x: int, y: int }
1626
+ fn f(): int {
1627
+ let p: Point = { x: 1, y: 2 };
1628
+ p.x = 50;
1629
+ return p.x;
1630
+ }
1631
+ `);
1632
+ expect(callAndGetRet(rt, 'f')).toBe(50);
1633
+ });
1634
+ test('struct field arithmetic', () => {
1635
+ const rt = makeRuntime(`
1636
+ struct Vec2 { x: int, y: int }
1637
+ fn f(): int {
1638
+ let v: Vec2 = { x: 3, y: 4 };
1639
+ return v.x + v.y;
1640
+ }
1641
+ `);
1642
+ expect(callAndGetRet(rt, 'f')).toBe(7);
1643
+ });
1644
+ test('struct field assignment from expression', () => {
1645
+ const rt = makeRuntime(`
1646
+ struct Counter { value: int }
1647
+ fn f(): int {
1648
+ let c: Counter = { value: 10 };
1649
+ c.value = c.value + 5;
1650
+ return c.value;
1651
+ }
1652
+ `);
1653
+ expect(callAndGetRet(rt, 'f')).toBe(15);
1654
+ });
1655
+ test('two struct instances', () => {
1656
+ const rt = makeRuntime(`
1657
+ struct Point { x: int, y: int }
1658
+ fn f(): int {
1659
+ let a: Point = { x: 1, y: 2 };
1660
+ let b: Point = { x: 10, y: 20 };
1661
+ return a.x + b.x;
1662
+ }
1663
+ `);
1664
+ expect(callAndGetRet(rt, 'f')).toBe(11);
1665
+ });
1666
+ test('struct with three fields', () => {
1667
+ const rt = makeRuntime(`
1668
+ struct Vec3 { x: int, y: int, z: int }
1669
+ fn f(): int {
1670
+ let v: Vec3 = { x: 1, y: 2, z: 3 };
1671
+ return v.x + v.y + v.z;
1672
+ }
1673
+ `);
1674
+ expect(callAndGetRet(rt, 'f')).toBe(6);
1675
+ });
1676
+ });
1677
+ // ===========================================================================
1678
+ // 26. Struct impl methods (behavioral)
1679
+ // ===========================================================================
1680
+ // TODO: Struct impl methods depend on struct field access/assignment (stubbed).
1681
+ // These tests will pass once MIR struct lowering is implemented.
1682
+ describe('v2 migration: struct impl methods', () => {
1683
+ test('static constructor method', () => {
1684
+ const rt = makeRuntime(`
1685
+ struct Point { x: int, y: int }
1686
+ impl Point {
1687
+ fn new(x: int, y: int): Point {
1688
+ return { x: x, y: y };
1689
+ }
1690
+ }
1691
+ fn f(): int {
1692
+ let p: Point = Point::new(10, 20);
1693
+ return p.x;
1694
+ }
1695
+ `);
1696
+ expect(callAndGetRet(rt, 'f')).toBe(10);
1697
+ });
1698
+ test('instance method on self', () => {
1699
+ const rt = makeRuntime(`
1700
+ struct Vec2 { x: int, y: int }
1701
+ impl Vec2 {
1702
+ fn sum(self): int {
1703
+ return self.x + self.y;
1704
+ }
1705
+ }
1706
+ fn f(): int {
1707
+ let v: Vec2 = { x: 3, y: 7 };
1708
+ return v.sum();
1709
+ }
1710
+ `);
1711
+ expect(callAndGetRet(rt, 'f')).toBe(10);
1712
+ });
1713
+ test('static method and instance method together', () => {
1714
+ const rt = makeRuntime(`
1715
+ struct Point { x: int, y: int }
1716
+ impl Point {
1717
+ fn new(x: int, y: int): Point {
1718
+ return { x: x, y: y };
1719
+ }
1720
+ fn distance(self): int {
1721
+ return self.x + self.y;
1722
+ }
1723
+ }
1724
+ fn f(): int {
1725
+ let p: Point = Point::new(5, 15);
1726
+ return p.distance();
1727
+ }
1728
+ `);
1729
+ expect(callAndGetRet(rt, 'f')).toBe(20);
1730
+ });
1731
+ test('impl method generates separate function file', () => {
1732
+ const result = (0, compile_1.compile)(`
1733
+ struct Vec2 { x: int, y: int }
1734
+ impl Vec2 {
1735
+ fn new(x: int, y: int): Vec2 {
1736
+ return { x: x, y: y };
1737
+ }
1738
+ fn sum(self): int {
1739
+ return self.x + self.y;
1740
+ }
1741
+ }
1742
+ fn f(): int { return 1; }
1743
+ `, { namespace: NS });
1744
+ const fnNames = result.files
1745
+ .filter(f => f.path.endsWith('.mcfunction'))
1746
+ .map(f => f.path);
1747
+ // Should have Vec2_new or vec2/new or similar
1748
+ expect(fnNames.length).toBeGreaterThanOrEqual(3);
1749
+ });
1750
+ test('multiple impl methods compile', () => {
1751
+ expect(() => (0, compile_1.compile)(`
1752
+ struct Counter { value: int }
1753
+ impl Counter {
1754
+ fn new(): Counter { return { value: 0 }; }
1755
+ fn increment(self): void { self.value = self.value + 1; }
1756
+ fn get(self): int { return self.value; }
1757
+ fn reset(self): void { self.value = 0; }
1758
+ }
1759
+ fn f(): int { return 1; }
1760
+ `, { namespace: NS })).not.toThrow();
1761
+ });
1762
+ });
1763
+ // ===========================================================================
1764
+ // 27. @tick and @load runtime behavior
1765
+ // ===========================================================================
1766
+ describe('v2 migration: @tick/@load runtime', () => {
1767
+ test('@tick function is registered in tick.json', () => {
1768
+ const result = (0, compile_1.compile)(`
1769
+ @tick fn game_loop(): void { let x: int = 1; }
1770
+ fn f(): int { return 1; }
1771
+ `, { namespace: NS });
1772
+ const tickJson = getFile(result.files, 'tick.json');
1773
+ expect(tickJson).toBeDefined();
1774
+ expect(tickJson).toContain(`${NS}:game_loop`);
1775
+ });
1776
+ test('@load function is registered in load.json', () => {
1777
+ const result = (0, compile_1.compile)(`
1778
+ @load fn setup(): void { let x: int = 1; }
1779
+ fn f(): int { return 1; }
1780
+ `, { namespace: NS });
1781
+ const loadJson = getFile(result.files, 'load.json');
1782
+ expect(loadJson).toBeDefined();
1783
+ expect(loadJson).toContain(`${NS}:setup`);
1784
+ });
1785
+ test('multiple @tick functions all registered', () => {
1786
+ const result = (0, compile_1.compile)(`
1787
+ @tick fn tick_a(): void { let x: int = 1; }
1788
+ @tick fn tick_b(): void { let y: int = 2; }
1789
+ fn f(): int { return 1; }
1790
+ `, { namespace: NS });
1791
+ const tickJson = getFile(result.files, 'tick.json');
1792
+ expect(tickJson).toContain(`${NS}:tick_a`);
1793
+ expect(tickJson).toContain(`${NS}:tick_b`);
1794
+ });
1795
+ test('multiple @load functions all registered', () => {
1796
+ const result = (0, compile_1.compile)(`
1797
+ @load fn init_a(): void { let x: int = 1; }
1798
+ @load fn init_b(): void { let y: int = 2; }
1799
+ fn f(): int { return 1; }
1800
+ `, { namespace: NS });
1801
+ const loadJson = getFile(result.files, 'load.json');
1802
+ expect(loadJson).toContain(`${NS}:init_a`);
1803
+ expect(loadJson).toContain(`${NS}:init_b`);
1804
+ });
1805
+ test('@tick function executes without crashing', () => {
1806
+ const rt = makeRuntime(`
1807
+ @tick fn heartbeat(): void {
1808
+ let counter: int = 0;
1809
+ counter = counter + 1;
1810
+ }
1811
+ fn f(): int { return 99; }
1812
+ `);
1813
+ rt.execFunction(`${NS}:heartbeat`);
1814
+ rt.execFunction(`${NS}:heartbeat`);
1815
+ expect(callAndGetRet(rt, 'f')).toBe(99);
1816
+ });
1817
+ test('@load function runs during makeRuntime init', () => {
1818
+ const rt = makeRuntime(`
1819
+ @load fn init(): void {
1820
+ let x: int = 42;
1821
+ }
1822
+ fn f(): int { return 1; }
1823
+ `);
1824
+ // If load function crashes, makeRuntime would throw
1825
+ expect(callAndGetRet(rt, 'f')).toBe(1);
1826
+ });
1827
+ test('@tick with logic body', () => {
1828
+ const rt = makeRuntime(`
1829
+ @tick fn tick(): void {
1830
+ let x: int = 5;
1831
+ let y: int = 10;
1832
+ let sum: int = x + y;
1833
+ }
1834
+ fn f(): int { return 1; }
1835
+ `);
1836
+ rt.execFunction(`${NS}:tick`);
1837
+ expect(callAndGetRet(rt, 'f')).toBe(1);
1838
+ });
1839
+ test('@tick and @load coexist', () => {
1840
+ const result = (0, compile_1.compile)(`
1841
+ @tick fn game_tick(): void { let x: int = 1; }
1842
+ @load fn game_init(): void { let y: int = 2; }
1843
+ fn f(): int { return 1; }
1844
+ `, { namespace: NS });
1845
+ const tickJson = getFile(result.files, 'tick.json');
1846
+ const loadJson = getFile(result.files, 'load.json');
1847
+ expect(tickJson).toContain(`${NS}:game_tick`);
1848
+ expect(loadJson).toContain(`${NS}:game_init`);
1849
+ });
1850
+ });
1851
+ // ===========================================================================
1852
+ // 28. Execute context blocks (behavioral)
1853
+ // ===========================================================================
1854
+ describe('v2 migration: execute blocks behavioral', () => {
1855
+ test('as @a generates correct execute as command', () => {
1856
+ const result = (0, compile_1.compile)(`
1857
+ fn f(): void {
1858
+ as @a {
1859
+ raw("say hello");
1860
+ }
1861
+ }
1862
+ `, { namespace: NS });
1863
+ const allContent = result.files
1864
+ .filter(f => f.path.endsWith('.mcfunction'))
1865
+ .map(f => f.content).join('\n');
1866
+ expect(allContent).toContain('execute as @a run function');
1867
+ });
1868
+ test('at @s generates correct execute at command', () => {
1869
+ const result = (0, compile_1.compile)(`
1870
+ fn f(): void {
1871
+ at @s {
1872
+ raw("particle flame ~ ~ ~ 0 0 0 0 1");
1873
+ }
1874
+ }
1875
+ `, { namespace: NS });
1876
+ const allContent = result.files
1877
+ .filter(f => f.path.endsWith('.mcfunction'))
1878
+ .map(f => f.content).join('\n');
1879
+ expect(allContent).toContain('execute at @s run function');
1880
+ });
1881
+ test('as @e at @s generates combined execute', () => {
1882
+ const result = (0, compile_1.compile)(`
1883
+ fn f(): void {
1884
+ as @e at @s {
1885
+ raw("particle flame ~ ~ ~ 0 0 0 0 1");
1886
+ }
1887
+ }
1888
+ `, { namespace: NS });
1889
+ const allContent = result.files
1890
+ .filter(f => f.path.endsWith('.mcfunction'))
1891
+ .map(f => f.content).join('\n');
1892
+ expect(allContent).toContain('execute as @e at @s run function');
1893
+ });
1894
+ test('execute body raw command appears in helper', () => {
1895
+ const result = (0, compile_1.compile)(`
1896
+ fn f(): void {
1897
+ as @a {
1898
+ raw("say inside execute");
1899
+ }
1900
+ }
1901
+ `, { namespace: NS });
1902
+ const allContent = result.files
1903
+ .filter(f => f.path.endsWith('.mcfunction'))
1904
+ .map(f => f.content).join('\n');
1905
+ expect(allContent).toContain('say inside execute');
1906
+ });
1907
+ test('as @e[type=zombie] with selector args', () => {
1908
+ const result = (0, compile_1.compile)(`
1909
+ fn f(): void {
1910
+ as @e[type=zombie] {
1911
+ raw("say I am zombie");
1912
+ }
1913
+ }
1914
+ `, { namespace: NS });
1915
+ const allContent = result.files
1916
+ .filter(f => f.path.endsWith('.mcfunction'))
1917
+ .map(f => f.content).join('\n');
1918
+ expect(allContent).toContain('execute as @e[type=zombie] run function');
1919
+ });
1920
+ test('nested execute blocks both generate functions', () => {
1921
+ const result = (0, compile_1.compile)(`
1922
+ fn f(): void {
1923
+ as @a {
1924
+ at @s {
1925
+ raw("particle flame ~ ~ ~ 0 0 0 0 1");
1926
+ }
1927
+ }
1928
+ }
1929
+ `, { namespace: NS });
1930
+ const fnFiles = result.files.filter(f => f.path.endsWith('.mcfunction'));
1931
+ // At least: load, f, as-helper, at-helper
1932
+ expect(fnFiles.length).toBeGreaterThanOrEqual(3);
1933
+ });
1934
+ test('execute with variable assignment in body', () => {
1935
+ expect(() => (0, compile_1.compile)(`
1936
+ fn f(): void {
1937
+ as @a {
1938
+ let x: int = 42;
1939
+ let y: int = x + 1;
1940
+ }
1941
+ }
1942
+ `, { namespace: NS })).not.toThrow();
1943
+ });
1944
+ });
1945
+ // ===========================================================================
1946
+ // 29. Function calls with multiple args and return values
1947
+ // ===========================================================================
1948
+ describe('v2 migration: multi-arg functions', () => {
1949
+ test('function with 3 parameters', () => {
1950
+ const rt = makeRuntime(`
1951
+ fn add3(a: int, b: int, c: int): int {
1952
+ return a + b + c;
1953
+ }
1954
+ fn f(): int { return add3(10, 20, 30); }
1955
+ `);
1956
+ expect(callAndGetRet(rt, 'f')).toBe(60);
1957
+ });
1958
+ test('function with 4 parameters', () => {
1959
+ const rt = makeRuntime(`
1960
+ fn sum4(a: int, b: int, c: int, d: int): int {
1961
+ return a + b + c + d;
1962
+ }
1963
+ fn f(): int { return sum4(1, 2, 3, 4); }
1964
+ `);
1965
+ expect(callAndGetRet(rt, 'f')).toBe(10);
1966
+ });
1967
+ test('function with 5 parameters', () => {
1968
+ const rt = makeRuntime(`
1969
+ fn sum5(a: int, b: int, c: int, d: int, e: int): int {
1970
+ return a + b + c + d + e;
1971
+ }
1972
+ fn f(): int { return sum5(2, 4, 6, 8, 10); }
1973
+ `);
1974
+ expect(callAndGetRet(rt, 'f')).toBe(30);
1975
+ });
1976
+ test('function calling function (2-deep chain)', () => {
1977
+ const rt = makeRuntime(`
1978
+ fn double(x: int): int { return x * 2; }
1979
+ fn quadruple(x: int): int { return double(double(x)); }
1980
+ fn f(): int { return quadruple(3); }
1981
+ `);
1982
+ expect(callAndGetRet(rt, 'f')).toBe(12);
1983
+ });
1984
+ test('function calling function (3-deep chain)', () => {
1985
+ const rt = makeRuntime(`
1986
+ fn inc(x: int): int { return x + 1; }
1987
+ fn add2(x: int): int { return inc(inc(x)); }
1988
+ fn add4(x: int): int { return add2(add2(x)); }
1989
+ fn f(): int { return add4(10); }
1990
+ `);
1991
+ expect(callAndGetRet(rt, 'f')).toBe(14);
1992
+ });
1993
+ test('function result used in arithmetic', () => {
1994
+ const rt = makeRuntime(`
1995
+ fn square(x: int): int { return x * x; }
1996
+ fn f(): int { return square(3) + square(4); }
1997
+ `);
1998
+ // 9 + 16 = 25
1999
+ expect(callAndGetRet(rt, 'f')).toBe(25);
2000
+ });
2001
+ test('function with param used in condition', () => {
2002
+ const rt = makeRuntime(`
2003
+ fn max_val(a: int, b: int, c: int): int {
2004
+ let m: int = a;
2005
+ if (b > m) { m = b; }
2006
+ if (c > m) { m = c; }
2007
+ return m;
2008
+ }
2009
+ fn f(): int { return max_val(5, 12, 8); }
2010
+ `);
2011
+ expect(callAndGetRet(rt, 'f')).toBe(12);
2012
+ });
2013
+ test('recursive-like pattern via loop', () => {
2014
+ const rt = makeRuntime(`
2015
+ fn power(base: int, exp: int): int {
2016
+ let result: int = 1;
2017
+ let i: int = 0;
2018
+ while (i < exp) {
2019
+ result = result * base;
2020
+ i = i + 1;
2021
+ }
2022
+ return result;
2023
+ }
2024
+ fn f(): int { return power(2, 8); }
2025
+ `);
2026
+ expect(callAndGetRet(rt, 'f')).toBe(256);
2027
+ });
2028
+ });
2029
+ // ===========================================================================
2030
+ // 30. Math-style stdlib patterns (inline, not via import)
2031
+ // ===========================================================================
2032
+ describe('v2 migration: math patterns', () => {
2033
+ test('min of two values', () => {
2034
+ const rt = makeRuntime(`
2035
+ fn min(a: int, b: int): int {
2036
+ if (a < b) { return a; } else { return b; }
2037
+ }
2038
+ fn f(): int { return min(7, 3); }
2039
+ `);
2040
+ expect(callAndGetRet(rt, 'f')).toBe(3);
2041
+ });
2042
+ test('max of two values', () => {
2043
+ const rt = makeRuntime(`
2044
+ fn max(a: int, b: int): int {
2045
+ if (a > b) { return a; } else { return b; }
2046
+ }
2047
+ fn f(): int { return max(7, 3); }
2048
+ `);
2049
+ expect(callAndGetRet(rt, 'f')).toBe(7);
2050
+ });
2051
+ test('abs of positive', () => {
2052
+ const rt = makeRuntime(`
2053
+ fn abs(x: int): int {
2054
+ if (x < 0) { return 0 - x; } else { return x; }
2055
+ }
2056
+ fn f(): int { return abs(42); }
2057
+ `);
2058
+ expect(callAndGetRet(rt, 'f')).toBe(42);
2059
+ });
2060
+ test('abs of negative', () => {
2061
+ const rt = makeRuntime(`
2062
+ fn abs(x: int): int {
2063
+ if (x < 0) { return 0 - x; } else { return x; }
2064
+ }
2065
+ fn f(): int { return abs(-15); }
2066
+ `);
2067
+ expect(callAndGetRet(rt, 'f')).toBe(15);
2068
+ });
2069
+ test('clamp value in range (below min)', () => {
2070
+ const rt = makeRuntime(`
2071
+ fn clamp(x: int, lo: int, hi: int): int {
2072
+ if (x < lo) { return lo; }
2073
+ if (x > hi) { return hi; }
2074
+ return x;
2075
+ }
2076
+ fn f(): int { return clamp(-5, 0, 100); }
2077
+ `);
2078
+ expect(callAndGetRet(rt, 'f')).toBe(0);
2079
+ });
2080
+ test('clamp value in range (above max)', () => {
2081
+ const rt = makeRuntime(`
2082
+ fn clamp(x: int, lo: int, hi: int): int {
2083
+ if (x < lo) { return lo; }
2084
+ if (x > hi) { return hi; }
2085
+ return x;
2086
+ }
2087
+ fn f(): int { return clamp(200, 0, 100); }
2088
+ `);
2089
+ expect(callAndGetRet(rt, 'f')).toBe(100);
2090
+ });
2091
+ test('clamp value in range (within)', () => {
2092
+ const rt = makeRuntime(`
2093
+ fn clamp(x: int, lo: int, hi: int): int {
2094
+ if (x < lo) { return lo; }
2095
+ if (x > hi) { return hi; }
2096
+ return x;
2097
+ }
2098
+ fn f(): int { return clamp(50, 0, 100); }
2099
+ `);
2100
+ expect(callAndGetRet(rt, 'f')).toBe(50);
2101
+ });
2102
+ test('sign function', () => {
2103
+ const rt = makeRuntime(`
2104
+ fn sign(x: int): int {
2105
+ if (x > 0) { return 1; }
2106
+ if (x < 0) { return -1; }
2107
+ return 0;
2108
+ }
2109
+ fn f(): int { return sign(-42) + sign(0) + sign(100); }
2110
+ `);
2111
+ // -1 + 0 + 1 = 0
2112
+ expect(callAndGetRet(rt, 'f')).toBe(0);
2113
+ });
2114
+ test('integer division rounding', () => {
2115
+ const rt = makeRuntime(`
2116
+ fn div_round(a: int, b: int): int {
2117
+ return (a + b / 2) / b;
2118
+ }
2119
+ fn f(): int { return div_round(7, 3); }
2120
+ `);
2121
+ // (7 + 1) / 3 = 2 (integer)
2122
+ expect(callAndGetRet(rt, 'f')).toBe(2);
2123
+ });
2124
+ test('is_even / is_odd', () => {
2125
+ const rt = makeRuntime(`
2126
+ fn is_even(x: int): int {
2127
+ if (x % 2 == 0) { return 1; } else { return 0; }
2128
+ }
2129
+ fn f(): int {
2130
+ return is_even(4) + is_even(7) + is_even(0) + is_even(13);
2131
+ }
2132
+ `);
2133
+ // 1 + 0 + 1 + 0 = 2
2134
+ expect(callAndGetRet(rt, 'f')).toBe(2);
2135
+ });
2136
+ });
2137
+ // ===========================================================================
2138
+ // 31. Break/continue in loops (behavioral)
2139
+ // ===========================================================================
2140
+ describe('v2 migration: break/continue behavioral', () => {
2141
+ test('break exits while loop early', () => {
2142
+ const rt = makeRuntime(`
2143
+ fn f(): int {
2144
+ let i: int = 0;
2145
+ let sum: int = 0;
2146
+ while (i < 100) {
2147
+ if (i == 5) { break; }
2148
+ sum = sum + i;
2149
+ i = i + 1;
2150
+ }
2151
+ return sum;
2152
+ }
2153
+ `);
2154
+ // 0+1+2+3+4 = 10
2155
+ expect(callAndGetRet(rt, 'f')).toBe(10);
2156
+ });
2157
+ test('continue skips to next iteration', () => {
2158
+ const rt = makeRuntime(`
2159
+ fn f(): int {
2160
+ let i: int = 0;
2161
+ let sum: int = 0;
2162
+ while (i < 10) {
2163
+ i = i + 1;
2164
+ if (i % 2 == 1) { continue; }
2165
+ sum = sum + i;
2166
+ }
2167
+ return sum;
2168
+ }
2169
+ `);
2170
+ // 2+4+6+8+10 = 30
2171
+ expect(callAndGetRet(rt, 'f')).toBe(30);
2172
+ });
2173
+ test('break in for loop', () => {
2174
+ const rt = makeRuntime(`
2175
+ fn f(): int {
2176
+ let result: int = 0;
2177
+ for i in 0..100 {
2178
+ if (i == 7) { break; }
2179
+ result = result + 1;
2180
+ }
2181
+ return result;
2182
+ }
2183
+ `);
2184
+ expect(callAndGetRet(rt, 'f')).toBe(7);
2185
+ });
2186
+ test('continue in for loop', () => {
2187
+ const rt = makeRuntime(`
2188
+ fn f(): int {
2189
+ let sum: int = 0;
2190
+ for i in 0..10 {
2191
+ if (i % 3 == 0) { continue; }
2192
+ sum = sum + 1;
2193
+ }
2194
+ return sum;
2195
+ }
2196
+ `);
2197
+ // 10 iterations, skip i=0,3,6,9 → 6 counted
2198
+ expect(callAndGetRet(rt, 'f')).toBe(6);
2199
+ });
2200
+ test('break with accumulator', () => {
2201
+ const rt = makeRuntime(`
2202
+ fn f(): int {
2203
+ let product: int = 1;
2204
+ let i: int = 1;
2205
+ while (i <= 10) {
2206
+ product = product * i;
2207
+ if (product > 100) { break; }
2208
+ i = i + 1;
2209
+ }
2210
+ return product;
2211
+ }
2212
+ `);
2213
+ // 1*1=1, 1*2=2, 2*3=6, 6*4=24, 24*5=120 > 100 → break → 120
2214
+ expect(callAndGetRet(rt, 'f')).toBe(120);
2215
+ });
2216
+ test('multiple breaks in loop (first wins)', () => {
2217
+ const rt = makeRuntime(`
2218
+ fn f(): int {
2219
+ let i: int = 0;
2220
+ while (i < 20) {
2221
+ if (i == 3) { break; }
2222
+ if (i == 7) { break; }
2223
+ i = i + 1;
2224
+ }
2225
+ return i;
2226
+ }
2227
+ `);
2228
+ expect(callAndGetRet(rt, 'f')).toBe(3);
2229
+ });
2230
+ test('break and continue in same loop', () => {
2231
+ const rt = makeRuntime(`
2232
+ fn f(): int {
2233
+ let i: int = 0;
2234
+ let sum: int = 0;
2235
+ while (i < 20) {
2236
+ i = i + 1;
2237
+ if (i % 2 == 0) { continue; }
2238
+ if (i > 10) { break; }
2239
+ sum = sum + i;
2240
+ }
2241
+ return sum;
2242
+ }
2243
+ `);
2244
+ // odd numbers 1,3,5,7,9 → sum = 25; i=11 is odd > 10 → break
2245
+ expect(callAndGetRet(rt, 'f')).toBe(25);
2246
+ });
2247
+ });
2248
+ // ===========================================================================
2249
+ // 32. Foreach (behavioral)
2250
+ // ===========================================================================
2251
+ describe('v2 migration: foreach behavioral', () => {
2252
+ test('foreach with @e generates execute as run function', () => {
2253
+ const result = (0, compile_1.compile)(`
2254
+ fn f(): void {
2255
+ foreach (e in @e) {
2256
+ raw("say hi");
2257
+ }
2258
+ }
2259
+ `, { namespace: NS });
2260
+ const allContent = result.files
2261
+ .filter(f => f.path.endsWith('.mcfunction'))
2262
+ .map(f => f.content).join('\n');
2263
+ expect(allContent).toContain('execute as @e run function');
2264
+ expect(allContent).toContain('say hi');
2265
+ });
2266
+ test('foreach with @a selector', () => {
2267
+ const result = (0, compile_1.compile)(`
2268
+ fn f(): void {
2269
+ foreach (p in @a) {
2270
+ raw("effect give @s speed 1 1");
2271
+ }
2272
+ }
2273
+ `, { namespace: NS });
2274
+ const allContent = result.files
2275
+ .filter(f => f.path.endsWith('.mcfunction'))
2276
+ .map(f => f.content).join('\n');
2277
+ expect(allContent).toContain('execute as @a run function');
2278
+ expect(allContent).toContain('effect give @s speed 1 1');
2279
+ });
2280
+ test('foreach with filtered selector', () => {
2281
+ const result = (0, compile_1.compile)(`
2282
+ fn f(): void {
2283
+ foreach (z in @e[type=zombie]) {
2284
+ raw("kill @s");
2285
+ }
2286
+ }
2287
+ `, { namespace: NS });
2288
+ const allContent = result.files
2289
+ .filter(f => f.path.endsWith('.mcfunction'))
2290
+ .map(f => f.content).join('\n');
2291
+ expect(allContent).toContain('execute as @e[type=zombie] run function');
2292
+ });
2293
+ test('foreach with complex body compiles', () => {
2294
+ expect(() => (0, compile_1.compile)(`
2295
+ fn f(): void {
2296
+ foreach (e in @e[type=zombie,distance=..10]) {
2297
+ raw("effect give @s slowness 1 1");
2298
+ raw("damage @s 2");
2299
+ }
2300
+ }
2301
+ `, { namespace: NS })).not.toThrow();
2302
+ });
2303
+ });
2304
+ // ===========================================================================
2305
+ // 33. For loop advanced patterns
2306
+ // ===========================================================================
2307
+ describe('v2 migration: for loop advanced', () => {
2308
+ test('for loop with range 0..0 produces 0 iterations', () => {
2309
+ const rt = makeRuntime(`
2310
+ fn f(): int {
2311
+ let count: int = 0;
2312
+ for i in 0..0 {
2313
+ count = count + 1;
2314
+ }
2315
+ return count;
2316
+ }
2317
+ `);
2318
+ expect(callAndGetRet(rt, 'f')).toBe(0);
2319
+ });
2320
+ test('for loop with range 0..1 produces 1 iteration', () => {
2321
+ const rt = makeRuntime(`
2322
+ fn f(): int {
2323
+ let count: int = 0;
2324
+ for i in 0..1 {
2325
+ count = count + 1;
2326
+ }
2327
+ return count;
2328
+ }
2329
+ `);
2330
+ expect(callAndGetRet(rt, 'f')).toBe(1);
2331
+ });
2332
+ test('for loop accumulates sum', () => {
2333
+ const rt = makeRuntime(`
2334
+ fn f(): int {
2335
+ let sum: int = 0;
2336
+ for i in 0..5 {
2337
+ sum = sum + i;
2338
+ }
2339
+ return sum;
2340
+ }
2341
+ `);
2342
+ // 0+1+2+3+4 = 10
2343
+ expect(callAndGetRet(rt, 'f')).toBe(10);
2344
+ });
2345
+ test('for loop with large range', () => {
2346
+ const rt = makeRuntime(`
2347
+ fn f(): int {
2348
+ let count: int = 0;
2349
+ for i in 0..20 {
2350
+ count = count + 1;
2351
+ }
2352
+ return count;
2353
+ }
2354
+ `);
2355
+ expect(callAndGetRet(rt, 'f')).toBe(20);
2356
+ });
2357
+ test('nested for loops (product)', () => {
2358
+ const rt = makeRuntime(`
2359
+ fn f(): int {
2360
+ let count: int = 0;
2361
+ for i in 0..3 {
2362
+ for j in 0..4 {
2363
+ count = count + 1;
2364
+ }
2365
+ }
2366
+ return count;
2367
+ }
2368
+ `);
2369
+ expect(callAndGetRet(rt, 'f')).toBe(12);
2370
+ });
2371
+ });
2372
+ // ===========================================================================
2373
+ // 34. Complex control flow patterns
2374
+ // ===========================================================================
2375
+ describe('v2 migration: complex control flow', () => {
2376
+ test('nested loops with outer counter', () => {
2377
+ const rt = makeRuntime(`
2378
+ fn f(): int {
2379
+ let total: int = 0;
2380
+ let i: int = 0;
2381
+ while (i < 3) {
2382
+ let j: int = 0;
2383
+ while (j < 3) {
2384
+ total = total + 1;
2385
+ j = j + 1;
2386
+ }
2387
+ i = i + 1;
2388
+ }
2389
+ return total;
2390
+ }
2391
+ `);
2392
+ expect(callAndGetRet(rt, 'f')).toBe(9);
2393
+ });
2394
+ test('loop with early return', () => {
2395
+ const rt = makeRuntime(`
2396
+ fn find_first_gt(threshold: int): int {
2397
+ let i: int = 0;
2398
+ while (i < 100) {
2399
+ if (i * i > threshold) { return i; }
2400
+ i = i + 1;
2401
+ }
2402
+ return -1;
2403
+ }
2404
+ fn f(): int { return find_first_gt(50); }
2405
+ `);
2406
+ // 8*8=64 > 50 → return 8
2407
+ expect(callAndGetRet(rt, 'f')).toBe(8);
2408
+ });
2409
+ test('multiple early returns in if/else chain', () => {
2410
+ const rt = makeRuntime(`
2411
+ fn classify(x: int): int {
2412
+ if (x < 0) { return -1; }
2413
+ if (x == 0) { return 0; }
2414
+ if (x < 10) { return 1; }
2415
+ if (x < 100) { return 2; }
2416
+ return 3;
2417
+ }
2418
+ fn f(): int {
2419
+ return classify(-5) + classify(0) + classify(7) + classify(50) + classify(200);
2420
+ }
2421
+ `);
2422
+ // -1 + 0 + 1 + 2 + 3 = 5
2423
+ expect(callAndGetRet(rt, 'f')).toBe(5);
2424
+ });
2425
+ test('while with complex condition', () => {
2426
+ const rt = makeRuntime(`
2427
+ fn f(): int {
2428
+ let a: int = 10;
2429
+ let b: int = 20;
2430
+ while (a < b) {
2431
+ a = a + 3;
2432
+ b = b - 1;
2433
+ }
2434
+ return a;
2435
+ }
2436
+ `);
2437
+ // a=10,b=20 → a=13,b=19 → a=16,b=18 → a=19,b=17 → exit (19 >= 17)
2438
+ expect(callAndGetRet(rt, 'f')).toBe(19);
2439
+ });
2440
+ test('deeply nested if/else', () => {
2441
+ const rt = makeRuntime(`
2442
+ fn f(): int {
2443
+ let x: int = 7;
2444
+ if (x > 0) {
2445
+ if (x > 5) {
2446
+ if (x > 10) {
2447
+ return 3;
2448
+ } else {
2449
+ return 2;
2450
+ }
2451
+ } else {
2452
+ return 1;
2453
+ }
2454
+ } else {
2455
+ return 0;
2456
+ }
2457
+ }
2458
+ `);
2459
+ expect(callAndGetRet(rt, 'f')).toBe(2);
2460
+ });
2461
+ });
2462
+ // ===========================================================================
2463
+ // 35. Raw commands (extended)
2464
+ // ===========================================================================
2465
+ describe('v2 migration: raw commands extended', () => {
2466
+ test('raw command with execute', () => {
2467
+ const result = (0, compile_1.compile)(`
2468
+ fn f(): void {
2469
+ raw("execute as @a at @s run particle flame ~ ~ ~ 0.5 0.5 0.5 0 10");
2470
+ }
2471
+ `, { namespace: NS });
2472
+ const fn = getFile(result.files, '/f.mcfunction');
2473
+ expect(fn).toContain('execute as @a at @s run particle flame');
2474
+ });
2475
+ test('raw command with scoreboard', () => {
2476
+ const result = (0, compile_1.compile)(`
2477
+ fn f(): void {
2478
+ raw("scoreboard players set @s health 20");
2479
+ }
2480
+ `, { namespace: NS });
2481
+ const fn = getFile(result.files, '/f.mcfunction');
2482
+ expect(fn).toContain('scoreboard players set @s health 20');
2483
+ });
2484
+ test('raw command with tellraw', () => {
2485
+ const result = (0, compile_1.compile)(`
2486
+ fn f(): void {
2487
+ raw("tellraw @a {\\"text\\":\\"Hello World\\"}");
2488
+ }
2489
+ `, { namespace: NS });
2490
+ const fn = getFile(result.files, '/f.mcfunction');
2491
+ expect(fn).toContain('tellraw @a');
2492
+ });
2493
+ test('raw command mixed with regular code', () => {
2494
+ const rt = makeRuntime(`
2495
+ fn f(): int {
2496
+ let x: int = 10;
2497
+ raw("say test");
2498
+ let y: int = x + 5;
2499
+ return y;
2500
+ }
2501
+ `);
2502
+ expect(callAndGetRet(rt, 'f')).toBe(15);
2503
+ });
2504
+ test('multiple raw commands interleaved', () => {
2505
+ const rt = makeRuntime(`
2506
+ fn f(): int {
2507
+ raw("say start");
2508
+ let x: int = 1;
2509
+ raw("say middle");
2510
+ x = x + 9;
2511
+ raw("say end");
2512
+ return x;
2513
+ }
2514
+ `);
2515
+ expect(callAndGetRet(rt, 'f')).toBe(10);
2516
+ });
2517
+ });
2518
+ // ===========================================================================
2519
+ // 36. Variable scoping and edge cases
2520
+ // ===========================================================================
2521
+ describe('v2 migration: variable scoping', () => {
2522
+ test('same variable name in different functions', () => {
2523
+ const rt = makeRuntime(`
2524
+ fn foo(): int {
2525
+ let x: int = 10;
2526
+ return x;
2527
+ }
2528
+ fn bar(): int {
2529
+ let x: int = 20;
2530
+ return x;
2531
+ }
2532
+ fn f(): int { return foo() + bar(); }
2533
+ `);
2534
+ expect(callAndGetRet(rt, 'f')).toBe(30);
2535
+ });
2536
+ test('variable reassignment chain', () => {
2537
+ const rt = makeRuntime(`
2538
+ fn f(): int {
2539
+ let x: int = 1;
2540
+ x = x + 1;
2541
+ x = x * 3;
2542
+ x = x - 2;
2543
+ x = x + 10;
2544
+ return x;
2545
+ }
2546
+ `);
2547
+ // 1 → 2 → 6 → 4 → 14
2548
+ expect(callAndGetRet(rt, 'f')).toBe(14);
2549
+ });
2550
+ test('many local variables', () => {
2551
+ const rt = makeRuntime(`
2552
+ fn f(): int {
2553
+ let a: int = 1;
2554
+ let b: int = 2;
2555
+ let c: int = 3;
2556
+ let d: int = 4;
2557
+ let e: int = 5;
2558
+ let g: int = 6;
2559
+ let h: int = 7;
2560
+ return a + b + c + d + e + g + h;
2561
+ }
2562
+ `);
2563
+ expect(callAndGetRet(rt, 'f')).toBe(28);
2564
+ });
2565
+ test('variable used across if/else branches', () => {
2566
+ const rt = makeRuntime(`
2567
+ fn f(): int {
2568
+ let result: int = 0;
2569
+ let x: int = 5;
2570
+ if (x > 3) {
2571
+ result = 100;
2572
+ } else {
2573
+ result = 200;
2574
+ }
2575
+ return result;
2576
+ }
2577
+ `);
2578
+ expect(callAndGetRet(rt, 'f')).toBe(100);
2579
+ });
2580
+ test('variable modified in loop', () => {
2581
+ const rt = makeRuntime(`
2582
+ fn f(): int {
2583
+ let x: int = 1;
2584
+ let i: int = 0;
2585
+ while (i < 5) {
2586
+ x = x * 2;
2587
+ i = i + 1;
2588
+ }
2589
+ return x;
2590
+ }
2591
+ `);
2592
+ // 1 → 2 → 4 → 8 → 16 → 32
2593
+ expect(callAndGetRet(rt, 'f')).toBe(32);
2594
+ });
2595
+ });
2596
+ // ===========================================================================
2597
+ // 37. Compound assignment operators
2598
+ // ===========================================================================
2599
+ describe('v2 migration: compound assignment extended', () => {
2600
+ test('+= in loop', () => {
2601
+ const rt = makeRuntime(`
2602
+ fn f(): int {
2603
+ let sum: int = 0;
2604
+ let i: int = 1;
2605
+ while (i <= 5) {
2606
+ sum += i;
2607
+ i += 1;
2608
+ }
2609
+ return sum;
2610
+ }
2611
+ `);
2612
+ expect(callAndGetRet(rt, 'f')).toBe(15);
2613
+ });
2614
+ test('-= countdown', () => {
2615
+ const rt = makeRuntime(`
2616
+ fn f(): int {
2617
+ let x: int = 100;
2618
+ x -= 30;
2619
+ x -= 25;
2620
+ x -= 10;
2621
+ return x;
2622
+ }
2623
+ `);
2624
+ expect(callAndGetRet(rt, 'f')).toBe(35);
2625
+ });
2626
+ test('*= doubling', () => {
2627
+ const rt = makeRuntime(`
2628
+ fn f(): int {
2629
+ let x: int = 1;
2630
+ x *= 2;
2631
+ x *= 3;
2632
+ x *= 4;
2633
+ return x;
2634
+ }
2635
+ `);
2636
+ expect(callAndGetRet(rt, 'f')).toBe(24);
2637
+ });
2638
+ test('/= division', () => {
2639
+ const rt = makeRuntime(`
2640
+ fn f(): int {
2641
+ let x: int = 1000;
2642
+ x /= 2;
2643
+ x /= 5;
2644
+ return x;
2645
+ }
2646
+ `);
2647
+ expect(callAndGetRet(rt, 'f')).toBe(100);
2648
+ });
2649
+ test('%= modulo', () => {
2650
+ const rt = makeRuntime(`
2651
+ fn f(): int {
2652
+ let x: int = 17;
2653
+ x %= 5;
2654
+ return x;
2655
+ }
2656
+ `);
2657
+ expect(callAndGetRet(rt, 'f')).toBe(2);
2658
+ });
2659
+ });
2660
+ // ===========================================================================
2661
+ // 38. Complex algorithmic patterns
2662
+ // ===========================================================================
2663
+ describe('v2 migration: algorithmic patterns', () => {
2664
+ test('digit sum', () => {
2665
+ const rt = makeRuntime(`
2666
+ fn digit_sum(n: int): int {
2667
+ let sum: int = 0;
2668
+ while (n > 0) {
2669
+ sum = sum + n % 10;
2670
+ n = n / 10;
2671
+ }
2672
+ return sum;
2673
+ }
2674
+ fn f(): int { return digit_sum(12345); }
2675
+ `);
2676
+ // 1+2+3+4+5 = 15
2677
+ expect(callAndGetRet(rt, 'f')).toBe(15);
2678
+ });
2679
+ test('count digits', () => {
2680
+ const rt = makeRuntime(`
2681
+ fn count_digits(n: int): int {
2682
+ if (n == 0) { return 1; }
2683
+ let count: int = 0;
2684
+ while (n > 0) {
2685
+ n = n / 10;
2686
+ count = count + 1;
2687
+ }
2688
+ return count;
2689
+ }
2690
+ fn f(): int { return count_digits(9876); }
2691
+ `);
2692
+ expect(callAndGetRet(rt, 'f')).toBe(4);
2693
+ });
2694
+ test('sum of divisors', () => {
2695
+ const rt = makeRuntime(`
2696
+ fn sum_divisors(n: int): int {
2697
+ let sum: int = 0;
2698
+ let i: int = 1;
2699
+ while (i <= n) {
2700
+ if (n % i == 0) {
2701
+ sum = sum + i;
2702
+ }
2703
+ i = i + 1;
2704
+ }
2705
+ return sum;
2706
+ }
2707
+ fn f(): int { return sum_divisors(12); }
2708
+ `);
2709
+ // 1+2+3+4+6+12 = 28
2710
+ expect(callAndGetRet(rt, 'f')).toBe(28);
2711
+ });
2712
+ test('triangle number', () => {
2713
+ const rt = makeRuntime(`
2714
+ fn triangle(n: int): int {
2715
+ return n * (n + 1) / 2;
2716
+ }
2717
+ fn f(): int { return triangle(10); }
2718
+ `);
2719
+ expect(callAndGetRet(rt, 'f')).toBe(55);
2720
+ });
2721
+ test('is_perfect_square', () => {
2722
+ const rt = makeRuntime(`
2723
+ fn is_perfect_sq(n: int): int {
2724
+ let i: int = 0;
2725
+ while (i * i <= n) {
2726
+ if (i * i == n) { return 1; }
2727
+ i = i + 1;
2728
+ }
2729
+ return 0;
2730
+ }
2731
+ fn f(): int {
2732
+ return is_perfect_sq(16) + is_perfect_sq(25) + is_perfect_sq(10);
2733
+ }
2734
+ `);
2735
+ // 1 + 1 + 0 = 2
2736
+ expect(callAndGetRet(rt, 'f')).toBe(2);
2737
+ });
2738
+ });
2739
+ //# sourceMappingURL=migrate.test.js.map