functionalscript 0.2.5 → 0.3.0

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 (433) hide show
  1. package/.github/workflows/ci.yml +19 -4
  2. package/CHANGELOG.md +9 -0
  3. package/com/cpp/{module.f.mjs → module.f.ts} +65 -44
  4. package/com/cpp/{test.f.mjs → test.f.ts} +1 -1
  5. package/com/cpp/testlib.f.ts +8 -0
  6. package/com/cs/{module.f.mjs → module.f.ts} +47 -38
  7. package/com/cs/{test.f.mjs → test.f.ts} +2 -2
  8. package/com/cs/testlib.f.ts +8 -0
  9. package/com/rust/module.f.ts +287 -0
  10. package/com/rust/{test.f.mjs → test.f.ts} +1 -1
  11. package/com/rust/testlib.f.ts +8 -0
  12. package/com/test/{build.f.mjs → build.f.ts} +47 -45
  13. package/com/test/{build.mjs → build.ts} +7 -6
  14. package/com/types/module.f.ts +62 -0
  15. package/com/types/{testlib.f.mjs → testlib.f.ts} +2 -3
  16. package/commonjs/build/module.f.ts +100 -0
  17. package/commonjs/build/{test.f.mjs → test.f.ts} +21 -17
  18. package/commonjs/module/function/module.f.ts +13 -0
  19. package/commonjs/module/module.f.ts +41 -0
  20. package/commonjs/module.f.ts +7 -0
  21. package/commonjs/{module.mjs → module.ts} +12 -9
  22. package/commonjs/package/dependencies/module.f.ts +22 -0
  23. package/commonjs/package/dependencies/{test.f.mjs → test.f.ts} +1 -1
  24. package/commonjs/package/module.f.ts +31 -0
  25. package/commonjs/package/{test.f.mjs → test.f.ts} +1 -1
  26. package/commonjs/path/{module.f.mjs → module.f.ts} +72 -67
  27. package/commonjs/path/{test.f.mjs → test.f.ts} +25 -19
  28. package/commonjs/{test.mjs → test.ts} +5 -4
  29. package/crypto/prime_field/{module.f.mjs → module.f.ts} +40 -37
  30. package/crypto/prime_field/{test.f.mjs → test.f.ts} +7 -5
  31. package/crypto/secp/{module.f.mjs → module.f.ts} +44 -44
  32. package/crypto/secp/{test.f.mjs → test.f.ts} +16 -11
  33. package/crypto/sha2/{module.f.mjs → module.f.ts} +61 -46
  34. package/crypto/sha2/{test.f.mjs → test.f.ts} +12 -9
  35. package/deno.json +71 -0
  36. package/dev/README.md +8 -0
  37. package/dev/index.ts +3 -0
  38. package/dev/{module.f.mjs → module.f.ts} +0 -2
  39. package/dev/{module.mjs → module.ts} +65 -60
  40. package/dev/test/{module.f.mjs → module.f.ts} +57 -70
  41. package/dev/{test.f.mjs → test.f.ts} +7 -5
  42. package/dev/test.ts +53 -0
  43. package/djs/{module.f.mjs → module.f.ts} +31 -31
  44. package/djs/parser/{module.f.mjs → module.f.ts} +190 -182
  45. package/djs/parser/{test.f.mjs → test.f.ts} +173 -150
  46. package/djs/serializer/module.f.ts +90 -0
  47. package/djs/{test.f.mjs → test.f.ts} +4 -4
  48. package/djs/tokenizer/{module.f.mjs → module.f.ts} +35 -42
  49. package/djs/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  50. package/fsc/{module.f.mjs → module.f.ts} +41 -44
  51. package/fsc/{test.f.mjs → test.f.ts} +8 -6
  52. package/fsm/module.f.ts +107 -0
  53. package/fsm/{test.f.mjs → test.f.ts} +10 -9
  54. package/html/README.md +10 -9
  55. package/html/module.f.ts +108 -0
  56. package/html/{test.f.mjs → test.f.ts} +10 -7
  57. package/issues/README.md +3 -0
  58. package/issues/lang/3110-function.md +25 -1
  59. package/issues/{test.f.mjs → test.f.ts} +3 -2
  60. package/js/tokenizer/module.f.ts +882 -0
  61. package/js/tokenizer/{test.f.mjs → test.f.ts} +11 -10
  62. package/json/module.f.ts +94 -0
  63. package/json/parser/{module.f.mjs → module.f.ts} +113 -109
  64. package/json/parser/{test.f.mjs → test.f.ts} +10 -9
  65. package/json/serializer/module.f.ts +70 -0
  66. package/json/serializer/{test.f.mjs → test.f.ts} +3 -3
  67. package/json/{test.f.mjs → test.f.ts} +3 -3
  68. package/json/tokenizer/{module.f.mjs → module.f.ts} +29 -36
  69. package/json/tokenizer/{test.f.mjs → test.f.ts} +9 -8
  70. package/nanvm-lib/src/extension.rs +15 -4
  71. package/nanvm-lib/src/interface.rs +7 -10
  72. package/nanvm-lib/src/lib.rs +3 -3
  73. package/nanvm-lib/src/naive.rs +10 -3
  74. package/nanvm-lib/src/nanenum.rs +5 -1
  75. package/nanvm-lib/tests/{test.f.mjs → test.f.ts} +7 -6
  76. package/nodejs/version/{main.mjs → main.ts} +1 -1
  77. package/nodejs/version/module.f.ts +42 -0
  78. package/nodejs/version/{test.f.mjs → test.f.ts} +11 -12
  79. package/package.json +9 -9
  80. package/text/ascii/{module.f.mjs → module.f.ts} +10 -8
  81. package/text/ascii/{test.f.mjs → test.f.ts} +4 -4
  82. package/text/module.f.ts +30 -0
  83. package/text/sgr/{module.f.mjs → module.f.ts} +3 -5
  84. package/text/{test.f.mjs → test.f.ts} +5 -4
  85. package/text/utf16/module.f.ts +108 -0
  86. package/text/utf16/{test.f.mjs → test.f.ts} +7 -6
  87. package/text/utf8/{module.f.mjs → module.f.ts} +29 -23
  88. package/text/utf8/{test.f.mjs → test.f.ts} +4 -4
  89. package/tsconfig.json +4 -1
  90. package/types/array/module.f.ts +89 -0
  91. package/types/array/{test.f.mjs → test.f.ts} +3 -3
  92. package/types/bigfloat/{module.f.mjs → module.f.ts} +25 -20
  93. package/types/bigfloat/{test.f.mjs → test.f.ts} +1 -1
  94. package/types/bigint/{module.f.mjs → module.f.ts} +29 -28
  95. package/types/bigint/{test.f.mjs → test.f.ts} +2 -2
  96. package/types/bit_vec/README.md +18 -0
  97. package/types/bit_vec/module.f.ts +185 -0
  98. package/types/bit_vec/test.f.ts +129 -0
  99. package/types/btree/find/module.f.ts +92 -0
  100. package/types/btree/find/{test.f.mjs → test.f.ts} +20 -16
  101. package/types/btree/{module.f.mjs → module.f.ts} +9 -9
  102. package/types/btree/remove/{module.f.mjs → module.f.ts} +43 -53
  103. package/types/btree/remove/{test.f.mjs → test.f.ts} +19 -15
  104. package/types/btree/set/{module.f.mjs → module.f.ts} +17 -20
  105. package/types/btree/set/{test.f.mjs → test.f.ts} +96 -66
  106. package/types/btree/{test.f.mjs → test.f.ts} +34 -26
  107. package/types/btree/types/module.f.ts +27 -0
  108. package/types/byte_set/module.f.ts +70 -0
  109. package/types/byte_set/{test.f.mjs → test.f.ts} +8 -7
  110. package/types/function/compare/module.f.ts +26 -0
  111. package/types/function/compare/{test.f.mjs → test.f.ts} +1 -1
  112. package/types/function/module.f.ts +43 -0
  113. package/types/function/operator/module.f.ts +63 -0
  114. package/types/function/test.f.ts +20 -0
  115. package/types/list/module.f.ts +345 -0
  116. package/types/list/{test.f.mjs → test.f.ts} +30 -24
  117. package/types/map/module.f.ts +65 -0
  118. package/types/map/{test.f.mjs → test.f.ts} +6 -5
  119. package/types/nibble_set/module.f.ts +34 -0
  120. package/types/nibble_set/{test.f.mjs → test.f.ts} +3 -3
  121. package/types/nullable/module.f.ts +9 -0
  122. package/types/nullable/{test.f.mjs → test.f.ts} +2 -2
  123. package/types/number/module.f.ts +16 -0
  124. package/types/number/{test.f.mjs → test.f.ts} +7 -5
  125. package/types/object/module.f.ts +30 -0
  126. package/types/object/{test.f.mjs → test.f.ts} +2 -2
  127. package/types/range/module.f.ts +10 -0
  128. package/types/range/{test.f.mjs → test.f.ts} +1 -1
  129. package/types/range_map/module.f.ts +70 -0
  130. package/types/range_map/{test.f.mjs → test.f.ts} +82 -57
  131. package/types/result/module.f.ts +20 -0
  132. package/types/result/{module.mjs → module.ts} +4 -3
  133. package/types/sorted_list/module.f.ts +83 -0
  134. package/types/sorted_list/{test.f.mjs → test.f.ts} +14 -12
  135. package/types/sorted_set/module.f.ts +36 -0
  136. package/types/sorted_set/{test.f.mjs → test.f.ts} +14 -12
  137. package/types/string/module.f.ts +24 -0
  138. package/types/string/{test.f.mjs → test.f.ts} +2 -2
  139. package/types/string_set/module.f.ts +37 -0
  140. package/types/string_set/{test.f.mjs → test.f.ts} +2 -2
  141. package/com/cpp/testlib.f.mjs +0 -8
  142. package/com/cs/testlib.f.mjs +0 -8
  143. package/com/rust/module.f.mjs +0 -272
  144. package/com/rust/testlib.f.mjs +0 -8
  145. package/com/types/module.f.mjs +0 -67
  146. package/commonjs/build/module.f.mjs +0 -100
  147. package/commonjs/module/function/module.f.mjs +0 -21
  148. package/commonjs/module/module.f.mjs +0 -53
  149. package/commonjs/module.f.mjs +0 -11
  150. package/commonjs/package/dependencies/module.f.mjs +0 -22
  151. package/commonjs/package/module.f.mjs +0 -36
  152. package/dev/index.mjs +0 -3
  153. package/dev/test.mjs +0 -60
  154. package/fsm/module.f.mjs +0 -99
  155. package/html/module.f.mjs +0 -102
  156. package/js/tokenizer/module.f.mjs +0 -872
  157. package/json/module.f.mjs +0 -89
  158. package/json/serializer/module.f.mjs +0 -87
  159. package/jsr.json +0 -66
  160. package/nodejs/version/module.f.mjs +0 -47
  161. package/out/com/cpp/module.f.d.mts +0 -7
  162. package/out/com/cpp/module.f.mjs +0 -130
  163. package/out/com/cpp/test.f.d.mts +0 -2
  164. package/out/com/cpp/test.f.mjs +0 -40
  165. package/out/com/cpp/testlib.f.d.mts +0 -2
  166. package/out/com/cpp/testlib.f.mjs +0 -7
  167. package/out/com/cs/module.f.d.mts +0 -7
  168. package/out/com/cs/module.f.mjs +0 -104
  169. package/out/com/cs/test.f.d.mts +0 -2
  170. package/out/com/cs/test.f.mjs +0 -43
  171. package/out/com/cs/testlib.f.d.mts +0 -2
  172. package/out/com/cs/testlib.f.mjs +0 -7
  173. package/out/com/rust/module.f.d.mts +0 -23
  174. package/out/com/rust/module.f.mjs +0 -224
  175. package/out/com/rust/test.f.d.mts +0 -2
  176. package/out/com/rust/test.f.mjs +0 -123
  177. package/out/com/rust/testlib.f.d.mts +0 -2
  178. package/out/com/rust/testlib.f.mjs +0 -7
  179. package/out/com/test/build.d.mts +0 -1
  180. package/out/com/test/build.f.d.mts +0 -26
  181. package/out/com/test/build.f.mjs +0 -98
  182. package/out/com/test/build.mjs +0 -40
  183. package/out/com/types/module.f.d.mts +0 -23
  184. package/out/com/types/module.f.mjs +0 -51
  185. package/out/com/types/testlib.f.d.mts +0 -44
  186. package/out/com/types/testlib.f.mjs +0 -30
  187. package/out/commonjs/build/module.f.d.mts +0 -20
  188. package/out/commonjs/build/module.f.mjs +0 -107
  189. package/out/commonjs/build/test.f.d.mts +0 -3
  190. package/out/commonjs/build/test.f.mjs +0 -102
  191. package/out/commonjs/module/function/module.f.d.mts +0 -5
  192. package/out/commonjs/module/function/module.f.mjs +0 -15
  193. package/out/commonjs/module/module.f.d.mts +0 -52
  194. package/out/commonjs/module/module.f.mjs +0 -48
  195. package/out/commonjs/module.d.mts +0 -3
  196. package/out/commonjs/module.f.d.mts +0 -2
  197. package/out/commonjs/module.f.mjs +0 -10
  198. package/out/commonjs/module.mjs +0 -26
  199. package/out/commonjs/package/dependencies/module.f.d.mts +0 -6
  200. package/out/commonjs/package/dependencies/module.f.mjs +0 -21
  201. package/out/commonjs/package/dependencies/test.f.d.mts +0 -2
  202. package/out/commonjs/package/dependencies/test.f.mjs +0 -15
  203. package/out/commonjs/package/module.f.d.mts +0 -21
  204. package/out/commonjs/package/module.f.mjs +0 -40
  205. package/out/commonjs/package/test.f.d.mts +0 -2
  206. package/out/commonjs/package/test.f.mjs +0 -27
  207. package/out/commonjs/path/module.f.d.mts +0 -60
  208. package/out/commonjs/path/module.f.mjs +0 -171
  209. package/out/commonjs/path/test.f.d.mts +0 -25
  210. package/out/commonjs/path/test.f.mjs +0 -231
  211. package/out/commonjs/test.d.mts +0 -8
  212. package/out/commonjs/test.mjs +0 -87
  213. package/out/crypto/prime_field/module.f.d.mts +0 -67
  214. package/out/crypto/prime_field/module.f.mjs +0 -110
  215. package/out/crypto/prime_field/test.f.d.mts +0 -13
  216. package/out/crypto/prime_field/test.f.mjs +0 -152
  217. package/out/crypto/secp/module.f.d.mts +0 -110
  218. package/out/crypto/secp/module.f.mjs +0 -173
  219. package/out/crypto/secp/test.f.d.mts +0 -5
  220. package/out/crypto/secp/test.f.mjs +0 -78
  221. package/out/crypto/sha2/module.f.d.mts +0 -15
  222. package/out/crypto/sha2/module.f.mjs +0 -172
  223. package/out/crypto/sha2/test.f.d.mts +0 -10
  224. package/out/crypto/sha2/test.f.mjs +0 -86
  225. package/out/dev/index.d.mts +0 -1
  226. package/out/dev/index.mjs +0 -2
  227. package/out/dev/module.d.mts +0 -26
  228. package/out/dev/module.f.d.mts +0 -1
  229. package/out/dev/module.f.mjs +0 -2
  230. package/out/dev/module.mjs +0 -167
  231. package/out/dev/test/module.f.d.mts +0 -25
  232. package/out/dev/test/module.f.mjs +0 -134
  233. package/out/dev/test.d.mts +0 -3
  234. package/out/dev/test.f.d.mts +0 -9
  235. package/out/dev/test.f.mjs +0 -58
  236. package/out/dev/test.mjs +0 -52
  237. package/out/djs/module.f.d.mts +0 -20
  238. package/out/djs/module.f.mjs +0 -79
  239. package/out/djs/parser/module.f.d.mts +0 -56
  240. package/out/djs/parser/module.f.mjs +0 -448
  241. package/out/djs/parser/test.f.d.mts +0 -13
  242. package/out/djs/parser/test.f.mjs +0 -569
  243. package/out/djs/test.f.d.mts +0 -12
  244. package/out/djs/test.f.mjs +0 -84
  245. package/out/djs/tokenizer/module.f.d.mts +0 -13
  246. package/out/djs/tokenizer/module.f.mjs +0 -91
  247. package/out/djs/tokenizer/test.f.d.mts +0 -7
  248. package/out/djs/tokenizer/test.f.mjs +0 -530
  249. package/out/fsc/module.f.d.mts +0 -7
  250. package/out/fsc/module.f.mjs +0 -105
  251. package/out/fsc/test.f.d.mts +0 -4
  252. package/out/fsc/test.f.mjs +0 -19
  253. package/out/fsm/module.f.d.mts +0 -14
  254. package/out/fsm/module.f.mjs +0 -80
  255. package/out/fsm/test.f.d.mts +0 -5
  256. package/out/fsm/test.f.mjs +0 -138
  257. package/out/html/module.f.d.mts +0 -17
  258. package/out/html/module.f.mjs +0 -80
  259. package/out/html/test.f.d.mts +0 -10
  260. package/out/html/test.f.mjs +0 -45
  261. package/out/issues/test.f.d.mts +0 -16
  262. package/out/issues/test.f.mjs +0 -66
  263. package/out/js/tokenizer/module.f.d.mts +0 -163
  264. package/out/js/tokenizer/module.f.mjs +0 -729
  265. package/out/js/tokenizer/test.f.d.mts +0 -9
  266. package/out/js/tokenizer/test.f.mjs +0 -906
  267. package/out/json/module.f.d.mts +0 -33
  268. package/out/json/module.f.mjs +0 -89
  269. package/out/json/parser/module.f.d.mts +0 -32
  270. package/out/json/parser/module.f.mjs +0 -224
  271. package/out/json/parser/test.f.d.mts +0 -5
  272. package/out/json/parser/test.f.mjs +0 -329
  273. package/out/json/serializer/module.f.d.mts +0 -36
  274. package/out/json/serializer/module.f.mjs +0 -67
  275. package/out/json/serializer/test.f.d.mts +0 -8
  276. package/out/json/serializer/test.f.mjs +0 -87
  277. package/out/json/test.f.d.mts +0 -8
  278. package/out/json/test.f.mjs +0 -61
  279. package/out/json/tokenizer/module.f.d.mts +0 -13
  280. package/out/json/tokenizer/module.f.mjs +0 -78
  281. package/out/json/tokenizer/test.f.d.mts +0 -6
  282. package/out/json/tokenizer/test.f.mjs +0 -420
  283. package/out/nanvm-lib/tests/test.f.d.mts +0 -36
  284. package/out/nanvm-lib/tests/test.f.mjs +0 -87
  285. package/out/nodejs/version/main.d.mts +0 -1
  286. package/out/nodejs/version/main.mjs +0 -3
  287. package/out/nodejs/version/module.f.d.mts +0 -12
  288. package/out/nodejs/version/module.f.mjs +0 -34
  289. package/out/nodejs/version/test.f.d.mts +0 -2
  290. package/out/nodejs/version/test.f.mjs +0 -97
  291. package/out/text/ascii/module.f.d.mts +0 -70
  292. package/out/text/ascii/module.f.mjs +0 -154
  293. package/out/text/ascii/test.f.d.mts +0 -4
  294. package/out/text/ascii/test.f.mjs +0 -14
  295. package/out/text/module.f.d.mts +0 -13
  296. package/out/text/module.f.mjs +0 -19
  297. package/out/text/sgr/module.f.d.mts +0 -12
  298. package/out/text/sgr/module.f.mjs +0 -17
  299. package/out/text/test.f.d.mts +0 -2
  300. package/out/text/test.f.mjs +0 -19
  301. package/out/text/utf16/module.f.d.mts +0 -12
  302. package/out/text/utf16/module.f.mjs +0 -86
  303. package/out/text/utf16/test.f.d.mts +0 -6
  304. package/out/text/utf16/test.f.mjs +0 -145
  305. package/out/text/utf8/module.f.d.mts +0 -10
  306. package/out/text/utf8/module.f.mjs +0 -126
  307. package/out/text/utf8/test.f.d.mts +0 -6
  308. package/out/text/utf8/test.f.mjs +0 -175
  309. package/out/types/array/module.f.d.mts +0 -31
  310. package/out/types/array/module.f.mjs +0 -95
  311. package/out/types/array/test.f.d.mts +0 -10
  312. package/out/types/array/test.f.mjs +0 -116
  313. package/out/types/bigfloat/module.f.d.mts +0 -6
  314. package/out/types/bigfloat/module.f.mjs +0 -77
  315. package/out/types/bigfloat/test.f.d.mts +0 -6
  316. package/out/types/bigfloat/test.f.mjs +0 -349
  317. package/out/types/bigint/module.f.d.mts +0 -29
  318. package/out/types/bigint/module.f.mjs +0 -114
  319. package/out/types/bigint/test.f.d.mts +0 -16
  320. package/out/types/bigint/test.f.mjs +0 -199
  321. package/out/types/bit_vec/module.f.d.mts +0 -72
  322. package/out/types/bit_vec/module.f.mjs +0 -83
  323. package/out/types/bit_vec/test.f.d.mts +0 -9
  324. package/out/types/bit_vec/test.f.mjs +0 -60
  325. package/out/types/btree/find/module.f.d.mts +0 -36
  326. package/out/types/btree/find/module.f.mjs +0 -137
  327. package/out/types/btree/find/test.f.d.mts +0 -2
  328. package/out/types/btree/find/test.f.mjs +0 -156
  329. package/out/types/btree/module.f.d.mts +0 -5
  330. package/out/types/btree/module.f.mjs +0 -34
  331. package/out/types/btree/remove/module.f.d.mts +0 -14
  332. package/out/types/btree/remove/module.f.mjs +0 -209
  333. package/out/types/btree/remove/test.f.d.mts +0 -7
  334. package/out/types/btree/remove/test.f.mjs +0 -638
  335. package/out/types/btree/set/module.f.d.mts +0 -5
  336. package/out/types/btree/set/module.f.mjs +0 -114
  337. package/out/types/btree/set/test.f.d.mts +0 -2
  338. package/out/types/btree/set/test.f.mjs +0 -390
  339. package/out/types/btree/test.f.d.mts +0 -13
  340. package/out/types/btree/test.f.mjs +0 -83
  341. package/out/types/btree/types/module.f.d.mts +0 -14
  342. package/out/types/btree/types/module.f.mjs +0 -50
  343. package/out/types/byte_set/module.f.d.mts +0 -25
  344. package/out/types/byte_set/module.f.mjs +0 -42
  345. package/out/types/byte_set/test.f.d.mts +0 -13
  346. package/out/types/byte_set/test.f.mjs +0 -123
  347. package/out/types/function/compare/module.f.d.mts +0 -23
  348. package/out/types/function/compare/module.f.mjs +0 -22
  349. package/out/types/function/compare/test.f.d.mts +0 -2
  350. package/out/types/function/compare/test.f.mjs +0 -8
  351. package/out/types/function/module.f.d.mts +0 -51
  352. package/out/types/function/module.f.mjs +0 -44
  353. package/out/types/function/operator/module.f.d.mts +0 -60
  354. package/out/types/function/operator/module.f.mjs +0 -60
  355. package/out/types/function/test.f.d.mts +0 -2
  356. package/out/types/function/test.f.mjs +0 -15
  357. package/out/types/list/module.f.d.mts +0 -82
  358. package/out/types/list/module.f.mjs +0 -269
  359. package/out/types/list/test.f.d.mts +0 -38
  360. package/out/types/list/test.f.mjs +0 -401
  361. package/out/types/map/module.f.d.mts +0 -21
  362. package/out/types/map/module.f.mjs +0 -54
  363. package/out/types/map/test.f.d.mts +0 -5
  364. package/out/types/map/test.f.mjs +0 -115
  365. package/out/types/nibble_set/module.f.d.mts +0 -16
  366. package/out/types/nibble_set/module.f.mjs +0 -19
  367. package/out/types/nibble_set/test.f.d.mts +0 -13
  368. package/out/types/nibble_set/test.f.mjs +0 -90
  369. package/out/types/nullable/module.f.d.mts +0 -9
  370. package/out/types/nullable/module.f.mjs +0 -9
  371. package/out/types/nullable/test.f.d.mts +0 -2
  372. package/out/types/nullable/test.f.mjs +0 -12
  373. package/out/types/number/module.f.d.mts +0 -7
  374. package/out/types/number/module.f.mjs +0 -12
  375. package/out/types/number/test.f.d.mts +0 -11
  376. package/out/types/number/test.f.mjs +0 -126
  377. package/out/types/object/module.f.d.mts +0 -22
  378. package/out/types/object/module.f.mjs +0 -27
  379. package/out/types/object/test.f.d.mts +0 -5
  380. package/out/types/object/test.f.mjs +0 -17
  381. package/out/types/range/module.f.d.mts +0 -6
  382. package/out/types/range/module.f.mjs +0 -6
  383. package/out/types/range/test.f.d.mts +0 -2
  384. package/out/types/range/test.f.mjs +0 -18
  385. package/out/types/range_map/module.f.d.mts +0 -19
  386. package/out/types/range_map/module.f.mjs +0 -84
  387. package/out/types/range_map/test.f.d.mts +0 -6
  388. package/out/types/range_map/test.f.mjs +0 -201
  389. package/out/types/result/module.d.mts +0 -7
  390. package/out/types/result/module.f.d.mts +0 -22
  391. package/out/types/result/module.f.mjs +0 -25
  392. package/out/types/result/module.mjs +0 -16
  393. package/out/types/sorted_list/module.f.d.mts +0 -53
  394. package/out/types/sorted_list/module.f.mjs +0 -102
  395. package/out/types/sorted_list/test.f.d.mts +0 -5
  396. package/out/types/sorted_list/test.f.mjs +0 -66
  397. package/out/types/sorted_set/module.f.d.mts +0 -19
  398. package/out/types/sorted_set/module.f.mjs +0 -29
  399. package/out/types/sorted_set/test.f.d.mts +0 -6
  400. package/out/types/sorted_set/test.f.mjs +0 -80
  401. package/out/types/string/module.f.d.mts +0 -9
  402. package/out/types/string/module.f.mjs +0 -17
  403. package/out/types/string/test.f.d.mts +0 -15
  404. package/out/types/string/test.f.mjs +0 -58
  405. package/out/types/string_set/module.f.d.mts +0 -13
  406. package/out/types/string_set/module.f.mjs +0 -29
  407. package/out/types/string_set/test.f.d.mts +0 -5
  408. package/out/types/string_set/test.f.mjs +0 -65
  409. package/text/module.f.mjs +0 -27
  410. package/text/utf16/module.f.mjs +0 -96
  411. package/types/array/module.f.mjs +0 -119
  412. package/types/bit_vec/module.f.mjs +0 -90
  413. package/types/bit_vec/test.f.mjs +0 -41
  414. package/types/btree/find/module.f.mjs +0 -125
  415. package/types/btree/types/module.f.mjs +0 -64
  416. package/types/byte_set/module.f.mjs +0 -61
  417. package/types/function/compare/module.f.mjs +0 -29
  418. package/types/function/module.f.mjs +0 -50
  419. package/types/function/operator/module.f.mjs +0 -78
  420. package/types/function/test.f.mjs +0 -17
  421. package/types/list/module.f.mjs +0 -320
  422. package/types/map/module.f.mjs +0 -67
  423. package/types/nibble_set/module.f.mjs +0 -28
  424. package/types/nullable/module.f.mjs +0 -11
  425. package/types/number/module.f.mjs +0 -16
  426. package/types/object/module.f.mjs +0 -33
  427. package/types/range/module.f.mjs +0 -8
  428. package/types/range_map/module.f.mjs +0 -84
  429. package/types/result/module.f.mjs +0 -28
  430. package/types/sorted_list/module.f.mjs +0 -107
  431. package/types/sorted_set/module.f.mjs +0 -38
  432. package/types/string/module.f.mjs +0 -22
  433. package/types/string_set/module.f.mjs +0 -36
@@ -1,269 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as function_ from '../function/module.f.mjs';
3
- const { identity, fn, compose } = function_;
4
- import * as operator from '../function/operator/module.f.mjs';
5
- const { addition, logicalNot, strictEqual, stateScanToScan, foldToScan, reduceToScan } = operator;
6
- /**
7
- * @template T
8
- * @typedef {NotLazy<T> | Thunk<T>} List
9
- */
10
- /**
11
- * @template T
12
- * @typedef {|
13
- * Result<T> |
14
- * Concat<T> |
15
- * readonly T[]
16
- * } NotLazy
17
- */
18
- /** @typedef {null} Empty */
19
- /**
20
- * @template T
21
- * @typedef {Empty | NonEmpty<T>} Result
22
- */
23
- /**
24
- * @template T
25
- * @typedef {() => List<T>} Thunk
26
- */
27
- /**
28
- * @template T
29
- * @typedef {{
30
- * readonly first: T
31
- * readonly tail: List<T>
32
- * }} NonEmpty
33
- */
34
- /**
35
- * @template T
36
- * @typedef {{
37
- * readonly head: List<T>
38
- * readonly tail: List<T>
39
- * }} Concat
40
- */
41
- /** @type {<T>(array: readonly T[]) => Result<T>} */
42
- const fromArray = array => {
43
- /** @typedef {typeof array extends readonly (infer T)[] ? T : never} T */
44
- /** @type {(i: number) => Result<T>} */
45
- const at = i => i < array.length ? { first: array[i], tail: () => at(i + 1) } : null;
46
- return at(0);
47
- };
48
- /** @type {<T>(head: List<T>) => (tail: List<T>) => List<T>} */
49
- export const concat = head => tail => tail === null ? head : ({ head, tail });
50
- /** @type {<T>(list: List<T>) => NotLazy<T> } */
51
- const trampoline = list => {
52
- while (typeof list === 'function') {
53
- list = list();
54
- }
55
- return list;
56
- };
57
- /** @type {<T>(list: List<T>) => Result<T>} */
58
- export const next = head => {
59
- /** @type {typeof head} */
60
- let tail = null;
61
- while (true) {
62
- head = trampoline(head);
63
- if (head instanceof Array) {
64
- head = fromArray(head);
65
- }
66
- else if (head !== null && 'head' in head) {
67
- [head, tail] = [head.head, concat(head.tail)(tail)];
68
- continue;
69
- }
70
- if (head !== null) {
71
- return { first: head.first, tail: concat(head.tail)(tail) };
72
- }
73
- if (tail === null) {
74
- return null;
75
- }
76
- [head, tail] = [tail, null];
77
- }
78
- };
79
- /** @type {<T>(list: List<T>) => Iterable<T>} */
80
- export const iterable = list => ({
81
- *[Symbol.iterator]() {
82
- let i = list;
83
- while (true) {
84
- const r = next(i);
85
- if (r === null) {
86
- return;
87
- }
88
- yield r.first;
89
- i = r.tail;
90
- }
91
- }
92
- });
93
- const { from } = Array;
94
- /** @type {<T>(list: List<T>) => readonly T[]} */
95
- export const toArray = list => {
96
- const u = trampoline(list);
97
- return u instanceof Array ? u : from(iterable(u));
98
- };
99
- /** @type {<I, O>(step: (n: NonEmpty<I>) => List<O>) => (input: List<I>) => Thunk<O>} */
100
- const apply = f => input => () => {
101
- const n = next(input);
102
- if (n === null) {
103
- return null;
104
- }
105
- return f(n);
106
- };
107
- /** @type {<T>(n: NonEmpty<List<T>>) => List<T>} */
108
- const flatStep = ({ first, tail }) => concat(first)(flat(tail));
109
- /** @type {<T>(list: List<List<T>>) => Thunk<T>} */
110
- export const flat = apply(flatStep);
111
- /** @type {<I, O>(f: (value: I) => O) => (n: NonEmpty<I>) => List<O>} */
112
- const mapStep = f => ({ first, tail }) => ({ first: f(first), tail: map(f)(tail) });
113
- /** @type {<I, O>(f: (value: I) => O) => (input: List<I>) => Thunk<O>} */
114
- export const map = f => apply(mapStep(f));
115
- /** @type {<I, O>(f: (value: I) => List<O>) => (input: List<I>) => Thunk<O>} */
116
- export const flatMap = f => compose(map(f))(flat);
117
- /** @type {<T>(f: (value: T) => boolean) => (n: NonEmpty<T>) => List<T>} */
118
- const filterStep = f => ({ first, tail }) => {
119
- const newTail = filter(f)(tail);
120
- return f(first) ? { first, tail: newTail } : newTail;
121
- };
122
- /** @type {<T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>} */
123
- export const filter = f => apply(filterStep(f));
124
- /** @type {<I, O>(f: (value: I) => O|null) => (n: NonEmpty<I>) => List<O>} */
125
- const filterMapStep = f => n => {
126
- const [first, tail] = [f(n.first), filterMap(f)(n.tail)];
127
- return first === null ? tail : { first, tail };
128
- };
129
- /** @type {<I, O>(f: (value: I) => O|null) => (input: List<I>) => Thunk<O>} */
130
- export const filterMap = f => apply(filterMapStep(f));
131
- /** @type {<T>(f: (value: T) => boolean) => (n: NonEmpty<T>) => List<T>} */
132
- const takeWhileStep = f => ({ first, tail }) => f(first) ? { first, tail: takeWhile(f)(tail) } : null;
133
- /** @type {<T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>} */
134
- export const takeWhile = f => apply(takeWhileStep(f));
135
- /** @type {(n: number) => <T>(result: NonEmpty<T>) => List<T>} */
136
- const takeStep = n => ({ first, tail }) => 0 < n ? { first: first, tail: take(n - 1)(tail) } : null;
137
- /** @type {(n: number) => <T>(input: List<T>) => Thunk<T>} */
138
- export const take = n => apply(takeStep(n));
139
- /** @type {<T>(f: (value: T) => boolean) => (ne: NonEmpty<T>) => List<T>} */
140
- const dropWhileStep = f => ne => f(ne.first) ? dropWhile(f)(ne.tail) : ne;
141
- /** @type {<T>(f: (value: T) => boolean) => (input: List<T>) => Thunk<T>} */
142
- export const dropWhile = f => apply(dropWhileStep(f));
143
- /** @type {(n: number) => <T>(ne: NonEmpty<T>) => List<T>} */
144
- const dropStep = n => ne => 0 < n ? drop(n - 1)(ne.tail) : ne;
145
- /** @type {(n: number) => <T>(input: List<T>) => Thunk<T>} */
146
- export const drop = n => apply(dropStep(n));
147
- /** @type {<D>(def: D) => <T>(input: List<T>) => D|T} */
148
- export const first = def => input => {
149
- const ne = next(input);
150
- return ne === null ? def : ne.first;
151
- };
152
- /** @type {<D>(first: D) => <T>(tail: List<T>) => D|T} */
153
- export const last = first => tail => {
154
- /** @typedef {typeof tail extends List<infer T> ? T : never} T */
155
- /** @type {NonEmpty<typeof first|T>} */
156
- let i = { first, tail };
157
- while (true) {
158
- const result = next(i.tail);
159
- if (result === null) {
160
- return i.first;
161
- }
162
- i = result;
163
- }
164
- };
165
- /** @type {<D>(def: D) => <T>(f: (value: T) => boolean) => (input: List<T>) => D|T} */
166
- export const find = def => f => compose(filter(f))(first(def));
167
- /** @type {(input: List<boolean>) => boolean} */
168
- export const some = find(false)(identity);
169
- /** @type {<T>(input: List<T>) => boolean} */
170
- export const isEmpty = fn(map(() => true))
171
- .then(some)
172
- .then(logicalNot)
173
- .result;
174
- export const every = fn(map(logicalNot))
175
- .then(some)
176
- .then(logicalNot)
177
- .result;
178
- /** @type {<T>(value: T) => (sequence: List<T>) => boolean} */
179
- export const includes = value => compose(map(strictEqual(value)))(some);
180
- /** @type {(count: number) => Thunk<number>} */
181
- export const countdown = count => () => {
182
- if (count <= 0) {
183
- return null;
184
- }
185
- const first = count - 1;
186
- return { first, tail: countdown(first) };
187
- };
188
- /** @type {<T>(v: T) => (c: number) => Thunk<T>} */
189
- export const repeat = v => compose(countdown)(map(() => v));
190
- /** @type {<T>(list: List<T>) => List<T>} */
191
- export const cycle = list => () => {
192
- const i = next(list);
193
- return i === null ? null : { first: i.first, tail: concat(i.tail)(cycle(list)) };
194
- };
195
- /** @type {<I, O>(op: operator.Scan<I, O>) => (ne: NonEmpty<I>) => List<O>} */
196
- const scanStep = op => ne => {
197
- const [first, newOp] = op(ne.first);
198
- return { first, tail: scan(newOp)(ne.tail) };
199
- };
200
- /** @type {<I, O>(op: operator.Scan<I, O>) => (input: List<I>) => Thunk<O>} */
201
- export const scan = op => apply(scanStep(op));
202
- /** @type {<I, S, O>(op: operator.StateScan<I, S, O>) => (init: S) => (input: List<I>) => Thunk<O>} */
203
- export const stateScan = op => compose(stateScanToScan(op))(scan);
204
- /** @type {<I,O>(op: operator.Fold<I, O>) => (init: O) => (input: List<I>) => Thunk<O>} */
205
- export const foldScan = op => compose(foldToScan(op))(scan);
206
- /** @type {<I,O>(op: operator.Fold<I, O>) => (init: O) => (input: List<I>) => O} */
207
- export const fold = op => init => compose(foldScan(op)(init))(last(init));
208
- /** @type {<T>(op: operator.Reduce<T>) => <D>(def: D) => (input: List<T>) => D|T} */
209
- export const reduce = op => def => compose(scan(reduceToScan(op)))(last(def));
210
- /** @type {<T>(list: List<T>) => Thunk<number>} */
211
- const lengthList = list => () => {
212
- const notLazy = trampoline(list);
213
- if (notLazy === null) {
214
- return null;
215
- }
216
- if (notLazy instanceof Array) {
217
- return [notLazy.length];
218
- }
219
- const tail = lengthList(notLazy.tail);
220
- if ("first" in notLazy) {
221
- return { first: 1, tail };
222
- }
223
- return { head: lengthList(notLazy.head), tail };
224
- };
225
- const sum = reduce(addition)(0);
226
- /** @type {<T>(input: List<T>) => number} */
227
- export const length = compose(lengthList)(sum);
228
- /**
229
- * @template T
230
- * @typedef {readonly[number, T]} Entry
231
- */
232
- /** @type {(index: number) => <T>(value: T) => readonly[Entry<T>, number]} */
233
- const entryOperator = index => value => [[index, value], index + 1];
234
- /** @type {<T>(input: List<T>) => Thunk<Entry<T>>} */
235
- export const entries = input => {
236
- /** @typedef {typeof input extends List<infer T> ? T : never} T */
237
- /** @type {operator.StateScan<T, Number, Entry<T>>} */
238
- const o = entryOperator;
239
- return stateScan(o)(0)(input);
240
- };
241
- /** @type {<T>(value: T) => (prior: List<T>) => List<T>} */
242
- const reverseOperator = first => tail => ({ first, tail });
243
- /** @type {<T>(input: List<T>) => List<T>} */
244
- export const reverse = fold(reverseOperator)(null);
245
- /** @type {<A>(a: List<A>) => <B>(b: List<B>) => Thunk<readonly[A, B]>} */
246
- export const zip = a => b => () => {
247
- const aResult = next(a);
248
- if (aResult === null) {
249
- return null;
250
- }
251
- const bResult = next(b);
252
- if (bResult === null) {
253
- return null;
254
- }
255
- return { first: [aResult.first, bResult.first], tail: zip(aResult.tail)(bResult.tail) };
256
- };
257
- /** @type {<T>(e: operator.Equal<T>) => (a: List<T>) => (b: List<T>) => boolean} */
258
- export const equal = e => {
259
- /** @typedef {typeof e extends operator.Equal<infer T> ? T : never} T */
260
- /** @type {(a: List<T>) => (b: List<T>) => List<boolean>} */
261
- const f = a => b => () => {
262
- const [aResult, bResult] = [next(a), next(b)];
263
- return aResult === null || bResult === null
264
- ? { first: aResult === bResult, tail: null }
265
- : { first: e(aResult.first)(bResult.first), tail: f(aResult.tail)(bResult.tail) };
266
- };
267
- return a => b => every(f(a)(b));
268
- };
269
- export const empty = null;
@@ -1,38 +0,0 @@
1
- declare namespace _default {
2
- export { stringifyTest };
3
- export { cycle };
4
- export { countdown };
5
- export { flat };
6
- export { concat };
7
- export { flatMap };
8
- export { take };
9
- export { find };
10
- export { takeWhile };
11
- export { dropWhile };
12
- export { drop };
13
- export { additionTests };
14
- export { entries };
15
- export { reverse };
16
- export { zip };
17
- export { logic };
18
- export let strictEqual: (() => void)[];
19
- export let isEmpty: (() => void)[];
20
- export function length(): void;
21
- }
22
- export default _default;
23
- declare function stringifyTest(): void;
24
- declare function cycle(): void;
25
- declare function countdown(): void;
26
- declare function flat(): void;
27
- declare function concat(): void;
28
- declare function flatMap(): void;
29
- declare const take: (() => void)[];
30
- declare const find: (() => void)[];
31
- declare const takeWhile: (() => void)[];
32
- declare function dropWhile(): void;
33
- declare const drop: (() => void)[];
34
- declare const additionTests: (() => void)[];
35
- declare const entries: (() => void)[];
36
- declare const reverse: (() => void)[];
37
- declare const zip: (() => void)[];
38
- declare function logic(): (() => void)[];
@@ -1,401 +0,0 @@
1
- import * as _ from './module.f.mjs';
2
- import * as json from '../../json/module.f.mjs';
3
- import * as o from '../object/module.f.mjs';
4
- const { sort } = o;
5
- import * as operator from '../function/operator/module.f.mjs';
6
- const { addition, strictEqual, reduceToScan } = operator;
7
- /** @type {(sequence: _.List<json.Unknown>) => string} */
8
- const stringify = sequence => json.stringify(sort)(_.toArray(sequence));
9
- const stringifyTest = () => {
10
- const s = stringify([1, 2, 3]);
11
- if (s !== '[1,2,3]') {
12
- throw s;
13
- }
14
- };
15
- const cycle = () => {
16
- const x = stringify(_.toArray(_.take(10)(_.cycle([1, 2, 3]))));
17
- if (x !== '[1,2,3,1,2,3,1,2,3,1]') {
18
- throw x;
19
- }
20
- };
21
- const countdown = () => {
22
- const result = stringify(_.countdown(10));
23
- if (result !== '[9,8,7,6,5,4,3,2,1,0]') {
24
- throw result;
25
- }
26
- };
27
- const flat = () => {
28
- const result = stringify(_.flat([[1, 2, 3], [4, 5], [6], [], [7, 8, 9]]));
29
- if (result !== '[1,2,3,4,5,6,7,8,9]') {
30
- throw result;
31
- }
32
- };
33
- const concat = () => {
34
- const result = _.concat([1])([2]);
35
- const x = _.next(result);
36
- if (x === null) {
37
- throw x;
38
- }
39
- if (x.first !== 1) {
40
- throw x;
41
- }
42
- };
43
- const flatMap = () => {
44
- const result = stringify(_.flatMap(x => [x, x * 2, x * 3])([0, 1, 2, 3]));
45
- if (result !== '[0,0,0,1,2,3,2,4,6,3,6,9]') {
46
- throw result;
47
- }
48
- };
49
- const take = [
50
- () => {
51
- const result = stringify(_.take(3)([1, 2, 3, 4, 5, 6, 7, 8, 9]));
52
- if (result !== '[1,2,3]') {
53
- throw result;
54
- }
55
- },
56
- () => {
57
- const result = stringify(_.take(20)([1, 2, 3, 4, 5, 6, 7, 8, 9]));
58
- if (result !== '[1,2,3,4,5,6,7,8,9]') {
59
- throw result;
60
- }
61
- },
62
- () => {
63
- const result = stringify(_.take(0)([1, 2, 3, 4, 5, 6, 7, 8, 9]));
64
- if (result !== '[]') {
65
- throw result;
66
- }
67
- }
68
- ];
69
- const find = [
70
- () => {
71
- const result = _.find(null)(x => x % 2 === 0)([1, 3, 5, 7]);
72
- if (result !== null) {
73
- throw result;
74
- }
75
- },
76
- () => {
77
- const result = _.find(null)(x => x % 2 === 0)([1, 2, 3, 4]);
78
- if (result !== 2) {
79
- throw result;
80
- }
81
- }
82
- ];
83
- const takeWhile = [
84
- () => {
85
- const result = stringify(_.takeWhile(x => x < 10)([1, 2, 3, 4, 5, 10, 11]));
86
- if (result !== '[1,2,3,4,5]') {
87
- throw result;
88
- }
89
- },
90
- () => {
91
- const result = stringify(_.takeWhile(x => x < 6)([1, 2, 3, 4, 5, 6, 7, 8, 9]));
92
- if (result !== '[1,2,3,4,5]') {
93
- throw result;
94
- }
95
- }
96
- ];
97
- const dropWhile = () => {
98
- const result = stringify(_.dropWhile(x => x < 10)([1, 2, 3, 4, 5, 10, 11]));
99
- if (result !== '[10,11]') {
100
- throw result;
101
- }
102
- };
103
- const drop = [
104
- () => {
105
- const result = stringify(_.drop(3)([1, 2, 3, 4, 5, 10, 11]));
106
- if (result !== '[4,5,10,11]') {
107
- throw result;
108
- }
109
- },
110
- () => {
111
- const result = stringify(_.drop(0)([1, 2, 3, 4, 5, 10, 11]));
112
- if (result !== '[1,2,3,4,5,10,11]') {
113
- throw result;
114
- }
115
- },
116
- () => {
117
- const result = stringify(_.drop(10)([1, 2, 3, 4, 5, 10, 11]));
118
- if (result !== '[]') {
119
- throw result;
120
- }
121
- }
122
- ];
123
- const additionTests = [
124
- () => {
125
- const op = reduceToScan(addition);
126
- const result = stringify(_.scan(op)([2, 3, 4, 5]));
127
- if (result !== '[2,5,9,14]') {
128
- throw result;
129
- }
130
- },
131
- () => {
132
- const result = _.reduce(addition)(null)([2, 3, 4, 5]);
133
- if (result !== 14) {
134
- throw result;
135
- }
136
- },
137
- () => {
138
- const result = _.reduce(addition)(null)([]);
139
- if (result !== null) {
140
- throw result;
141
- }
142
- }
143
- ];
144
- const entries = [
145
- () => {
146
- const result = stringify(_.entries([]));
147
- if (result !== '[]') {
148
- throw result;
149
- }
150
- },
151
- () => {
152
- const result = stringify(_.entries(['hello', 'world']));
153
- if (result !== '[[0,"hello"],[1,"world"]]') {
154
- throw result;
155
- }
156
- }
157
- ];
158
- const reverse = [
159
- () => {
160
- const result = stringify(_.reverse([]));
161
- if (result !== '[]') {
162
- throw result;
163
- }
164
- },
165
- () => {
166
- const result = stringify(_.reverse([1, 2, 3, 4, 5]));
167
- if (result !== '[5,4,3,2,1]') {
168
- throw result;
169
- }
170
- }
171
- ];
172
- const zip = [
173
- () => {
174
- const result = stringify(_.zip([0, 1, 2])(['a', 'b', 'c', 'd']));
175
- if (result !== '[[0,"a"],[1,"b"],[2,"c"]]') {
176
- throw result;
177
- }
178
- },
179
- () => {
180
- const result = stringify(_.zip([0, 1, 2])(['a', 'b']));
181
- if (result !== '[[0,"a"],[1,"b"]]') {
182
- throw result;
183
- }
184
- }
185
- ];
186
- const logic = () => {
187
- const map5 = _.map(x => x > 5);
188
- return [
189
- () => {
190
- const result = _.some(map5([0, 1, 7]));
191
- if (!result) {
192
- throw result;
193
- }
194
- },
195
- () => {
196
- const result = _.some(map5([0, 1, 4]));
197
- if (result) {
198
- throw result;
199
- }
200
- },
201
- () => {
202
- const result = _.some(map5([]));
203
- if (result) {
204
- throw result;
205
- }
206
- },
207
- () => {
208
- const result = _.every(map5([0, 1, 7]));
209
- if (result) {
210
- throw result;
211
- }
212
- },
213
- () => {
214
- const result = _.every(map5([6, 11, 7]));
215
- if (!result) {
216
- throw result;
217
- }
218
- },
219
- () => {
220
- const result = _.every(map5([]));
221
- if (!result) {
222
- throw result;
223
- }
224
- }
225
- ];
226
- };
227
- // stress tests
228
- const stress = () => ({
229
- toArray: () => {
230
- // 200_000_000 is too much
231
- const n = 100_000_000;
232
- const result = _.toArray(_.countdown(n));
233
- if (result.length !== n) {
234
- throw result.length;
235
- }
236
- const len = _.length(_.filter(x => x > n)(result));
237
- if (len !== 0) {
238
- throw len;
239
- }
240
- },
241
- first: () => {
242
- // 100_000_000 is too much
243
- const n = 50_000_000;
244
- const result = _.toArray(_.countdown(n));
245
- if (result.length !== n) {
246
- throw result.length;
247
- }
248
- const first = _.first(null)(result);
249
- if (first !== n - 1) {
250
- throw first;
251
- }
252
- },
253
- concatBack: () => {
254
- /** @type {_.List<number>} */
255
- let sequence = [];
256
- // 20_000_000 is too much
257
- // 10_000_000 is too much for Deno 1
258
- for (let i = 0; i < 5_000_000; ++i) {
259
- sequence = _.concat(sequence)([i]);
260
- }
261
- const r = _.toArray(sequence);
262
- },
263
- flatToArray: () => {
264
- /** @type {_.List<number>} */
265
- let sequence = [];
266
- // 4_000_000 is too much
267
- for (let i = 0; i < 2_000_000; ++i) {
268
- sequence = _.flat([sequence, [i]]);
269
- }
270
- const r = _.toArray(sequence);
271
- },
272
- flatNext: () => {
273
- /** @type {_.List<number>} */
274
- let sequence = [];
275
- // 4_000_000 is too much
276
- for (let i = 0; i < 2_000_000; ++i) {
277
- sequence = _.flat([sequence, [i]]);
278
- }
279
- const a = _.next(sequence);
280
- },
281
- concatFront: () => {
282
- /** @type {_.List<number>} */
283
- let sequence = [];
284
- // 20_000_000 is too much
285
- for (let i = 0; i < 10_000_000; ++i) {
286
- sequence = _.concat([i])(sequence);
287
- }
288
- const a = _.next(sequence);
289
- },
290
- flatFront: () => {
291
- /** @type {_.List<number>} */
292
- let sequence = [];
293
- // 10_000_000 is too much
294
- for (let i = 0; i < 5_000_000; ++i) {
295
- sequence = _.flat([[i], sequence]);
296
- }
297
- const a = _.next(sequence);
298
- },
299
- filterMap: () => {
300
- // 100_000_000 is too much
301
- const n = 50_000_000;
302
- const result = _.toArray(_.countdown(n));
303
- if (result.length !== n) {
304
- throw result.length;
305
- }
306
- const len = _.length(_.filterMap(() => null)(result));
307
- if (len !== 0) {
308
- throw len;
309
- }
310
- },
311
- dropWhile: () => {
312
- // 50_000_000 is too much
313
- const n = 20_000_000;
314
- const result = _.toArray(_.countdown(n));
315
- if (result.length !== n) {
316
- throw result.length;
317
- }
318
- const len = _.length(_.dropWhile(() => true)(result));
319
- if (len !== 0) {
320
- throw len;
321
- }
322
- },
323
- reverse: () => {
324
- // 10_000_000 is too much
325
- const n = 5_000_000;
326
- const result = _.toArray(_.reverse(_.countdown(n)));
327
- if (result.length !== n) {
328
- throw result.length;
329
- }
330
- }
331
- });
332
- export default {
333
- stringifyTest,
334
- cycle,
335
- countdown,
336
- flat,
337
- concat,
338
- flatMap,
339
- take,
340
- find,
341
- takeWhile,
342
- dropWhile,
343
- drop,
344
- additionTests,
345
- entries,
346
- reverse,
347
- zip,
348
- logic,
349
- strictEqual: [
350
- () => {
351
- const result = _.equal(strictEqual)([1])([2, 3]);
352
- if (result) {
353
- throw result;
354
- }
355
- },
356
- () => {
357
- const result = _.equal(strictEqual)([1, 3])([1]);
358
- if (result) {
359
- throw result;
360
- }
361
- },
362
- () => {
363
- const result = _.equal(strictEqual)([15, 78])([15, 78]);
364
- if (!result) {
365
- throw result;
366
- }
367
- },
368
- () => {
369
- const result = _.equal(strictEqual)([])([]);
370
- if (!result) {
371
- throw result;
372
- }
373
- }
374
- ],
375
- isEmpty: [
376
- () => {
377
- const result = _.isEmpty(() => []);
378
- if (result !== true) {
379
- throw result;
380
- }
381
- },
382
- () => {
383
- const result = _.isEmpty(() => [2]);
384
- if (result !== false) {
385
- throw result;
386
- }
387
- }
388
- ],
389
- length: () => {
390
- if (_.length([1, 2, 3]) !== 3) {
391
- throw 3;
392
- }
393
- if (_.length(null) !== 0) {
394
- throw 0;
395
- }
396
- if (_.length(_.flat([[1, 3], null, () => [3], _.concat([12])([4, 89])])) !== 6) {
397
- throw 6;
398
- }
399
- },
400
- // stress
401
- };