functionalscript 0.1.609 → 0.2.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 (393) hide show
  1. package/com/cpp/module.f.mjs +20 -25
  2. package/com/cpp/testlib.f.mjs +3 -4
  3. package/com/cs/module.f.mjs +18 -23
  4. package/com/cs/testlib.f.mjs +3 -5
  5. package/com/rust/module.f.mjs +25 -30
  6. package/com/rust/testlib.f.mjs +3 -5
  7. package/com/test/build.f.mjs +2 -2
  8. package/com/test/build.mjs +4 -4
  9. package/com/types/module.f.mjs +5 -12
  10. package/commonjs/build/module.f.mjs +23 -28
  11. package/commonjs/build/test.f.mjs +4 -4
  12. package/commonjs/module/function/module.f.mjs +0 -2
  13. package/commonjs/module/module.f.mjs +2 -9
  14. package/commonjs/module.f.mjs +0 -2
  15. package/commonjs/module.mjs +2 -7
  16. package/commonjs/package/dependencies/module.f.mjs +5 -10
  17. package/commonjs/package/dependencies/test.f.mjs +1 -1
  18. package/commonjs/package/module.f.mjs +6 -13
  19. package/commonjs/package/test.f.mjs +1 -1
  20. package/commonjs/path/module.f.mjs +12 -23
  21. package/commonjs/path/test.f.mjs +11 -11
  22. package/commonjs/test.mjs +1 -1
  23. package/dev/module.f.mjs +1 -4
  24. package/dev/module.mjs +1 -1
  25. package/dev/test/module.f.mjs +4 -6
  26. package/djs/module.f.mjs +12 -19
  27. package/djs/parser/module.f.mjs +18 -24
  28. package/djs/parser/test.f.mjs +9 -9
  29. package/djs/test.f.mjs +4 -4
  30. package/djs/tokenizer/module.f.mjs +18 -23
  31. package/djs/tokenizer/test.f.mjs +6 -6
  32. package/fsc/module.f.mjs +17 -24
  33. package/fsc/test.f.mjs +3 -3
  34. package/fsm/module.f.mjs +27 -38
  35. package/fsm/test.f.mjs +8 -8
  36. package/html/module.f.mjs +14 -23
  37. package/html/test.f.mjs +4 -4
  38. package/js/tokenizer/module.f.mjs +55 -62
  39. package/js/tokenizer/test.f.mjs +6 -6
  40. package/json/module.f.mjs +18 -31
  41. package/json/parser/module.f.mjs +9 -14
  42. package/json/parser/test.f.mjs +7 -7
  43. package/json/serializer/module.f.mjs +14 -29
  44. package/json/serializer/test.f.mjs +2 -2
  45. package/json/test.f.mjs +3 -3
  46. package/json/tokenizer/module.f.mjs +14 -19
  47. package/json/tokenizer/test.f.mjs +6 -6
  48. package/jsr.json +59 -59
  49. package/nodejs/version/main.mjs +1 -1
  50. package/nodejs/version/module.f.mjs +2 -7
  51. package/nodejs/version/test.f.mjs +3 -3
  52. package/out/com/cpp/module.f.d.mts +4 -0
  53. package/out/com/cpp/module.f.mjs +123 -0
  54. package/out/com/cpp/test.f.mjs +40 -0
  55. package/out/com/cpp/testlib.f.mjs +7 -0
  56. package/out/com/cs/module.f.d.mts +4 -0
  57. package/out/com/cs/module.f.mjs +95 -0
  58. package/out/com/cs/test.f.mjs +43 -0
  59. package/out/com/cs/testlib.f.mjs +7 -0
  60. package/{com → out/com}/rust/module.f.d.mts +3 -7
  61. package/out/com/rust/module.f.mjs +213 -0
  62. package/out/com/rust/test.f.mjs +123 -0
  63. package/out/com/rust/testlib.f.mjs +7 -0
  64. package/{com → out/com}/test/build.f.d.mts +2 -2
  65. package/out/com/test/build.f.mjs +98 -0
  66. package/out/com/test/build.mjs +40 -0
  67. package/{com → out/com}/types/module.f.d.mts +5 -10
  68. package/out/com/types/module.f.mjs +51 -0
  69. package/out/com/types/testlib.f.mjs +30 -0
  70. package/out/commonjs/build/module.f.d.mts +20 -0
  71. package/out/commonjs/build/module.f.mjs +107 -0
  72. package/out/commonjs/build/test.f.mjs +102 -0
  73. package/{commonjs → out/commonjs}/module/function/module.f.d.mts +0 -2
  74. package/out/commonjs/module/function/module.f.mjs +15 -0
  75. package/{commonjs → out/commonjs}/module/module.f.d.mts +16 -21
  76. package/out/commonjs/module/module.f.mjs +48 -0
  77. package/out/commonjs/module.d.mts +3 -0
  78. package/{commonjs → out/commonjs}/module.f.d.mts +0 -2
  79. package/out/commonjs/module.f.mjs +10 -0
  80. package/out/commonjs/module.mjs +26 -0
  81. package/out/commonjs/package/dependencies/module.f.d.mts +6 -0
  82. package/out/commonjs/package/dependencies/module.f.mjs +21 -0
  83. package/out/commonjs/package/dependencies/test.f.mjs +15 -0
  84. package/out/commonjs/package/module.f.d.mts +21 -0
  85. package/out/commonjs/package/module.f.mjs +40 -0
  86. package/out/commonjs/package/test.f.mjs +27 -0
  87. package/{commonjs → out/commonjs}/path/module.f.d.mts +25 -32
  88. package/out/commonjs/path/module.f.mjs +171 -0
  89. package/out/commonjs/path/test.f.mjs +231 -0
  90. package/out/commonjs/test.mjs +87 -0
  91. package/out/dev/index.mjs +2 -0
  92. package/out/dev/module.f.d.mts +1 -0
  93. package/out/dev/module.f.mjs +2 -0
  94. package/out/dev/module.mjs +167 -0
  95. package/{dev → out/dev}/test/module.f.d.mts +2 -3
  96. package/out/dev/test/module.f.mjs +134 -0
  97. package/out/dev/test.f.mjs +58 -0
  98. package/out/dev/test.mjs +52 -0
  99. package/{djs → out/djs}/module.f.d.mts +13 -18
  100. package/out/djs/module.f.mjs +75 -0
  101. package/{djs → out/djs}/parser/module.f.d.mts +11 -15
  102. package/out/djs/parser/module.f.mjs +432 -0
  103. package/out/djs/parser/test.f.mjs +535 -0
  104. package/out/djs/test.f.mjs +84 -0
  105. package/out/djs/tokenizer/module.f.d.mts +13 -0
  106. package/out/djs/tokenizer/module.f.mjs +87 -0
  107. package/out/djs/tokenizer/test.f.mjs +480 -0
  108. package/out/fsc/module.f.d.mts +7 -0
  109. package/out/fsc/module.f.mjs +105 -0
  110. package/out/fsc/test.f.mjs +19 -0
  111. package/out/fsm/module.f.d.mts +14 -0
  112. package/out/fsm/module.f.mjs +80 -0
  113. package/out/fsm/test.f.mjs +138 -0
  114. package/out/html/module.f.d.mts +15 -0
  115. package/out/html/module.f.mjs +94 -0
  116. package/out/html/test.f.mjs +45 -0
  117. package/out/issues/test.f.mjs +66 -0
  118. package/{js → out/js}/tokenizer/module.f.d.mts +10 -15
  119. package/out/js/tokenizer/module.f.mjs +686 -0
  120. package/out/js/tokenizer/test.f.mjs +844 -0
  121. package/out/json/module.f.d.mts +33 -0
  122. package/out/json/module.f.mjs +89 -0
  123. package/{json → out/json}/parser/module.f.d.mts +9 -13
  124. package/out/json/parser/module.f.mjs +224 -0
  125. package/out/json/parser/test.f.mjs +321 -0
  126. package/out/json/serializer/module.f.d.mts +36 -0
  127. package/out/json/serializer/module.f.mjs +67 -0
  128. package/out/json/serializer/test.f.mjs +87 -0
  129. package/out/json/test.f.mjs +61 -0
  130. package/out/json/tokenizer/module.f.d.mts +13 -0
  131. package/out/json/tokenizer/module.f.mjs +78 -0
  132. package/out/json/tokenizer/test.f.mjs +420 -0
  133. package/out/nanvm-lib/tests/test.f.mjs +87 -0
  134. package/out/nodejs/version/main.mjs +3 -0
  135. package/{nodejs → out/nodejs}/version/module.f.d.mts +4 -9
  136. package/out/nodejs/version/module.f.mjs +34 -0
  137. package/out/nodejs/version/test.f.mjs +97 -0
  138. package/{prime_field → out/prime_field}/module.f.d.mts +20 -23
  139. package/out/prime_field/module.f.mjs +87 -0
  140. package/out/prime_field/test.f.mjs +145 -0
  141. package/{secp → out/secp}/module.f.d.mts +27 -28
  142. package/out/secp/module.f.mjs +113 -0
  143. package/out/secp/test.f.mjs +63 -0
  144. package/out/sha2/module.f.d.mts +15 -0
  145. package/out/sha2/module.f.mjs +172 -0
  146. package/out/sha2/test.f.mjs +86 -0
  147. package/out/text/ascii/module.f.d.mts +70 -0
  148. package/out/text/ascii/module.f.mjs +154 -0
  149. package/out/text/ascii/test.f.mjs +14 -0
  150. package/out/text/module.f.d.mts +13 -0
  151. package/out/text/module.f.mjs +19 -0
  152. package/out/text/sgr/module.f.d.mts +12 -0
  153. package/out/text/sgr/module.f.mjs +17 -0
  154. package/out/text/test.f.mjs +19 -0
  155. package/out/text/utf16/module.f.d.mts +12 -0
  156. package/out/text/utf16/module.f.mjs +86 -0
  157. package/out/text/utf16/test.f.mjs +145 -0
  158. package/out/text/utf8/module.f.d.mts +10 -0
  159. package/out/text/utf8/module.f.mjs +126 -0
  160. package/out/text/utf8/test.f.mjs +175 -0
  161. package/{types → out/types}/array/module.f.d.mts +14 -24
  162. package/out/types/array/module.f.mjs +95 -0
  163. package/out/types/array/test.f.mjs +116 -0
  164. package/out/types/bigfloat/module.f.d.mts +6 -0
  165. package/out/types/bigfloat/module.f.mjs +77 -0
  166. package/out/types/bigfloat/test.f.mjs +349 -0
  167. package/out/types/bigint/module.f.d.mts +29 -0
  168. package/{types/bigint/module.f.d.mts → out/types/bigint/module.f.mjs} +64 -27
  169. package/out/types/bigint/test.f.mjs +192 -0
  170. package/{types → out/types}/btree/find/module.f.d.mts +20 -26
  171. package/out/types/btree/find/module.f.mjs +137 -0
  172. package/out/types/btree/find/test.f.mjs +156 -0
  173. package/out/types/btree/module.f.d.mts +5 -0
  174. package/out/types/btree/module.f.mjs +34 -0
  175. package/{types → out/types}/btree/remove/module.f.d.mts +7 -12
  176. package/out/types/btree/remove/module.f.mjs +209 -0
  177. package/out/types/btree/remove/test.f.mjs +638 -0
  178. package/{types → out/types}/btree/set/module.f.d.mts +3 -7
  179. package/out/types/btree/set/module.f.mjs +114 -0
  180. package/out/types/btree/set/test.f.mjs +390 -0
  181. package/out/types/btree/test.f.mjs +83 -0
  182. package/{types → out/types}/btree/types/module.f.d.mts +0 -2
  183. package/out/types/btree/types/module.f.mjs +50 -0
  184. package/out/types/byte_set/module.f.d.mts +25 -0
  185. package/out/types/byte_set/module.f.mjs +42 -0
  186. package/out/types/byte_set/test.f.mjs +123 -0
  187. package/{types → out/types}/function/compare/module.f.d.mts +9 -15
  188. package/out/types/function/compare/module.f.mjs +22 -0
  189. package/out/types/function/compare/test.f.mjs +8 -0
  190. package/{types → out/types}/function/module.f.d.mts +20 -27
  191. package/out/types/function/module.f.mjs +44 -0
  192. package/{types → out/types}/function/operator/module.f.d.mts +28 -43
  193. package/out/types/function/operator/module.f.mjs +60 -0
  194. package/out/types/function/test.f.mjs +15 -0
  195. package/out/types/list/module.f.d.mts +82 -0
  196. package/out/types/list/module.f.mjs +269 -0
  197. package/out/types/list/test.f.mjs +401 -0
  198. package/out/types/map/module.f.d.mts +21 -0
  199. package/out/types/map/module.f.mjs +54 -0
  200. package/out/types/map/test.f.mjs +115 -0
  201. package/out/types/nibble_set/module.f.d.mts +16 -0
  202. package/out/types/nibble_set/module.f.mjs +19 -0
  203. package/out/types/nibble_set/test.f.mjs +90 -0
  204. package/out/types/nullable/module.f.d.mts +9 -0
  205. package/out/types/nullable/module.f.mjs +9 -0
  206. package/out/types/nullable/test.f.mjs +12 -0
  207. package/out/types/number/module.f.d.mts +7 -0
  208. package/out/types/number/module.f.mjs +12 -0
  209. package/out/types/number/test.f.mjs +126 -0
  210. package/out/types/object/module.f.d.mts +22 -0
  211. package/out/types/object/module.f.mjs +27 -0
  212. package/out/types/object/test.f.mjs +17 -0
  213. package/out/types/range/module.f.d.mts +6 -0
  214. package/out/types/range/module.f.mjs +6 -0
  215. package/out/types/range/test.f.mjs +18 -0
  216. package/{types → out/types}/range_map/module.f.d.mts +9 -15
  217. package/out/types/range_map/module.f.mjs +84 -0
  218. package/out/types/range_map/test.f.mjs +201 -0
  219. package/out/types/result/module.d.mts +7 -0
  220. package/{types → out/types}/result/module.f.d.mts +6 -12
  221. package/out/types/result/module.f.mjs +25 -0
  222. package/out/types/result/module.mjs +16 -0
  223. package/{types → out/types}/sorted_list/module.f.d.mts +22 -28
  224. package/out/types/sorted_list/module.f.mjs +102 -0
  225. package/out/types/sorted_list/test.f.mjs +66 -0
  226. package/{types → out/types}/sorted_set/module.f.d.mts +6 -12
  227. package/out/types/sorted_set/module.f.mjs +29 -0
  228. package/out/types/sorted_set/test.f.mjs +80 -0
  229. package/out/types/string/module.f.d.mts +9 -0
  230. package/out/types/string/module.f.mjs +17 -0
  231. package/out/types/string/test.f.mjs +58 -0
  232. package/out/types/string_set/module.f.d.mts +13 -0
  233. package/out/types/string_set/module.f.mjs +29 -0
  234. package/out/types/string_set/test.f.mjs +65 -0
  235. package/package.json +5 -4
  236. package/prime_field/module.f.mjs +9 -12
  237. package/prime_field/test.f.mjs +1 -1
  238. package/secp/module.f.mjs +38 -39
  239. package/secp/test.f.mjs +4 -4
  240. package/sha2/module.f.mjs +7 -20
  241. package/sha2/test.f.mjs +4 -4
  242. package/text/ascii/module.f.mjs +5 -10
  243. package/text/ascii/test.f.mjs +3 -3
  244. package/text/module.f.mjs +7 -14
  245. package/text/sgr/module.f.mjs +2 -4
  246. package/text/test.f.mjs +3 -3
  247. package/text/utf16/module.f.mjs +17 -28
  248. package/text/utf16/test.f.mjs +5 -5
  249. package/text/utf8/module.f.mjs +9 -16
  250. package/text/utf8/test.f.mjs +4 -4
  251. package/tsconfig.json +2 -2
  252. package/types/array/module.f.mjs +8 -25
  253. package/types/array/test.f.mjs +3 -3
  254. package/types/bigfloat/module.f.mjs +3 -10
  255. package/types/bigfloat/test.f.mjs +1 -1
  256. package/types/bigint/module.f.mjs +11 -30
  257. package/types/bigint/test.f.mjs +1 -1
  258. package/types/btree/find/module.f.mjs +8 -17
  259. package/types/btree/find/test.f.mjs +7 -7
  260. package/types/btree/module.f.mjs +6 -11
  261. package/types/btree/remove/module.f.mjs +10 -17
  262. package/types/btree/remove/test.f.mjs +5 -5
  263. package/types/btree/set/module.f.mjs +4 -9
  264. package/types/btree/set/test.f.mjs +4 -4
  265. package/types/btree/test.f.mjs +9 -9
  266. package/types/btree/types/module.f.mjs +0 -2
  267. package/types/byte_set/module.f.mjs +14 -39
  268. package/types/byte_set/test.f.mjs +5 -5
  269. package/types/function/compare/module.f.mjs +3 -12
  270. package/types/function/compare/test.f.mjs +1 -1
  271. package/types/function/module.f.mjs +4 -15
  272. package/types/function/operator/module.f.mjs +14 -41
  273. package/types/function/test.f.mjs +1 -1
  274. package/types/list/module.f.mjs +45 -114
  275. package/types/list/test.f.mjs +10 -10
  276. package/types/map/module.f.mjs +15 -30
  277. package/types/map/test.f.mjs +2 -2
  278. package/types/nibble_set/module.f.mjs +7 -24
  279. package/types/nibble_set/test.f.mjs +2 -2
  280. package/types/nullable/module.f.mjs +2 -9
  281. package/types/nullable/test.f.mjs +1 -1
  282. package/types/number/module.f.mjs +8 -19
  283. package/types/number/test.f.mjs +1 -1
  284. package/types/object/module.f.mjs +9 -20
  285. package/types/object/test.f.mjs +1 -1
  286. package/types/range/module.f.mjs +2 -9
  287. package/types/range/test.f.mjs +1 -1
  288. package/types/range_map/module.f.mjs +9 -18
  289. package/types/range_map/test.f.mjs +32 -32
  290. package/types/result/module.f.mjs +3 -12
  291. package/types/result/module.mjs +2 -2
  292. package/types/sorted_list/module.f.mjs +10 -19
  293. package/types/sorted_list/test.f.mjs +7 -7
  294. package/types/sorted_set/module.f.mjs +7 -16
  295. package/types/sorted_set/test.f.mjs +7 -7
  296. package/types/string/module.f.mjs +10 -21
  297. package/types/string/test.f.mjs +2 -2
  298. package/types/string_set/module.f.mjs +12 -27
  299. package/types/string_set/test.f.mjs +1 -1
  300. package/com/cpp/module.f.d.mts +0 -8
  301. package/com/cs/module.f.d.mts +0 -8
  302. package/commonjs/build/module.f.d.mts +0 -24
  303. package/commonjs/module.d.mts +0 -7
  304. package/commonjs/package/dependencies/module.f.d.mts +0 -10
  305. package/commonjs/package/module.f.d.mts +0 -27
  306. package/dev/module.f.d.mts +0 -4
  307. package/djs/tokenizer/module.f.d.mts +0 -17
  308. package/fsc/module.f.d.mts +0 -12
  309. package/fsm/module.f.d.mts +0 -21
  310. package/html/module.f.d.mts +0 -20
  311. package/json/module.f.d.mts +0 -41
  312. package/json/serializer/module.f.d.mts +0 -45
  313. package/json/tokenizer/module.f.d.mts +0 -17
  314. package/sha2/module.f.d.mts +0 -23
  315. package/text/ascii/module.f.d.mts +0 -73
  316. package/text/module.f.d.mts +0 -18
  317. package/text/sgr/module.f.d.mts +0 -14
  318. package/text/utf16/module.f.d.mts +0 -19
  319. package/text/utf8/module.f.d.mts +0 -15
  320. package/types/bigfloat/module.f.d.mts +0 -11
  321. package/types/btree/module.f.d.mts +0 -9
  322. package/types/byte_set/module.f.d.mts +0 -38
  323. package/types/list/module.f.d.mts +0 -117
  324. package/types/map/module.f.d.mts +0 -30
  325. package/types/nibble_set/module.f.d.mts +0 -26
  326. package/types/nullable/module.f.d.mts +0 -14
  327. package/types/number/module.f.d.mts +0 -13
  328. package/types/object/module.f.d.mts +0 -29
  329. package/types/range/module.f.d.mts +0 -11
  330. package/types/result/module.d.mts +0 -7
  331. package/types/string/module.f.d.mts +0 -15
  332. package/types/string_set/module.f.d.mts +0 -21
  333. /package/{com → out/com}/cpp/test.f.d.mts +0 -0
  334. /package/{com → out/com}/cpp/testlib.f.d.mts +0 -0
  335. /package/{com → out/com}/cs/test.f.d.mts +0 -0
  336. /package/{com → out/com}/cs/testlib.f.d.mts +0 -0
  337. /package/{com → out/com}/rust/test.f.d.mts +0 -0
  338. /package/{com → out/com}/rust/testlib.f.d.mts +0 -0
  339. /package/{com → out/com}/test/build.d.mts +0 -0
  340. /package/{com → out/com}/types/testlib.f.d.mts +0 -0
  341. /package/{commonjs → out/commonjs}/build/test.f.d.mts +0 -0
  342. /package/{commonjs → out/commonjs}/package/dependencies/test.f.d.mts +0 -0
  343. /package/{commonjs → out/commonjs}/package/test.f.d.mts +0 -0
  344. /package/{commonjs → out/commonjs}/path/test.f.d.mts +0 -0
  345. /package/{commonjs → out/commonjs}/test.d.mts +0 -0
  346. /package/{dev → out/dev}/index.d.mts +0 -0
  347. /package/{dev → out/dev}/module.d.mts +0 -0
  348. /package/{dev → out/dev}/test.d.mts +0 -0
  349. /package/{dev → out/dev}/test.f.d.mts +0 -0
  350. /package/{djs → out/djs}/parser/test.f.d.mts +0 -0
  351. /package/{djs → out/djs}/test.f.d.mts +0 -0
  352. /package/{djs → out/djs}/tokenizer/test.f.d.mts +0 -0
  353. /package/{fsc → out/fsc}/test.f.d.mts +0 -0
  354. /package/{fsm → out/fsm}/test.f.d.mts +0 -0
  355. /package/{html → out/html}/test.f.d.mts +0 -0
  356. /package/{issues → out/issues}/test.f.d.mts +0 -0
  357. /package/{js → out/js}/tokenizer/test.f.d.mts +0 -0
  358. /package/{json → out/json}/parser/test.f.d.mts +0 -0
  359. /package/{json → out/json}/serializer/test.f.d.mts +0 -0
  360. /package/{json → out/json}/test.f.d.mts +0 -0
  361. /package/{json → out/json}/tokenizer/test.f.d.mts +0 -0
  362. /package/{nanvm-lib → out/nanvm-lib}/tests/test.f.d.mts +0 -0
  363. /package/{nodejs → out/nodejs}/version/main.d.mts +0 -0
  364. /package/{nodejs → out/nodejs}/version/test.f.d.mts +0 -0
  365. /package/{prime_field → out/prime_field}/test.f.d.mts +0 -0
  366. /package/{secp → out/secp}/test.f.d.mts +0 -0
  367. /package/{sha2 → out/sha2}/test.f.d.mts +0 -0
  368. /package/{text → out/text}/ascii/test.f.d.mts +0 -0
  369. /package/{text → out/text}/test.f.d.mts +0 -0
  370. /package/{text → out/text}/utf16/test.f.d.mts +0 -0
  371. /package/{text → out/text}/utf8/test.f.d.mts +0 -0
  372. /package/{types → out/types}/array/test.f.d.mts +0 -0
  373. /package/{types → out/types}/bigfloat/test.f.d.mts +0 -0
  374. /package/{types → out/types}/bigint/test.f.d.mts +0 -0
  375. /package/{types → out/types}/btree/find/test.f.d.mts +0 -0
  376. /package/{types → out/types}/btree/remove/test.f.d.mts +0 -0
  377. /package/{types → out/types}/btree/set/test.f.d.mts +0 -0
  378. /package/{types → out/types}/btree/test.f.d.mts +0 -0
  379. /package/{types → out/types}/byte_set/test.f.d.mts +0 -0
  380. /package/{types → out/types}/function/compare/test.f.d.mts +0 -0
  381. /package/{types → out/types}/function/test.f.d.mts +0 -0
  382. /package/{types → out/types}/list/test.f.d.mts +0 -0
  383. /package/{types → out/types}/map/test.f.d.mts +0 -0
  384. /package/{types → out/types}/nibble_set/test.f.d.mts +0 -0
  385. /package/{types → out/types}/nullable/test.f.d.mts +0 -0
  386. /package/{types → out/types}/number/test.f.d.mts +0 -0
  387. /package/{types → out/types}/object/test.f.d.mts +0 -0
  388. /package/{types → out/types}/range/test.f.d.mts +0 -0
  389. /package/{types → out/types}/range_map/test.f.d.mts +0 -0
  390. /package/{types → out/types}/sorted_list/test.f.d.mts +0 -0
  391. /package/{types → out/types}/sorted_set/test.f.d.mts +0 -0
  392. /package/{types → out/types}/string/test.f.d.mts +0 -0
  393. /package/{types → out/types}/string_set/test.f.d.mts +0 -0
@@ -0,0 +1,269 @@
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;
@@ -0,0 +1,401 @@
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
+ };
@@ -0,0 +1,21 @@
1
+ /** @type {(name: string) => <T>(map: Map<T>) => T|null} */
2
+ export const at: (name: string) => <T>(map: Map<T>) => T | null;
3
+ /** @type {<T>(reduce: Operator.Reduce<T>) => (name: string) => (value: T) => (map: Map<T>) => Map<T>} */
4
+ export const setReduce: <T>(reduce: Operator.Reduce<T>) => (name: string) => (value: T) => (map: Map<T>) => Map<T>;
5
+ /** @type {(name: string) => <T>(value: T) => (map: Map<T>) => Map<T>} */
6
+ export const setReplace: (name: string) => <T>(value: T) => (map: Map<T>) => Map<T>;
7
+ /** @type {<T>(map: Map<T>) => list.List<Entry<T>>} */
8
+ export const entries: <T>(map: Map<T>) => list.List<Entry<T>>;
9
+ /** @type {<T>(entries: list.List<Entry<T>>) => Map<T>} */
10
+ export const fromEntries: <T>(entries: list.List<Entry<T>>) => Map<T>;
11
+ /** @type {(name: string) => <T>(map: Map<T>) => Map<T>} */
12
+ export const remove: (name: string) => <T>(map: Map<T>) => Map<T>;
13
+ export const empty: null;
14
+ export type Sign = Compare.Sign;
15
+ export type Cmp<T> = Compare.Compare<T>;
16
+ export type Entry<T> = readonly [string, T];
17
+ export type Map<T> = BtreeTypes.Tree<Entry<T>>;
18
+ import * as Operator from '../function/operator/module.f.mjs';
19
+ import * as list from '../list/module.f.mjs';
20
+ import * as Compare from '../function/compare/module.f.mjs';
21
+ import * as BtreeTypes from '../btree/types/module.f.mjs';