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,80 +0,0 @@
1
- import * as _ from './module.f.mjs';
2
- import * as compare from '../function/compare/module.f.mjs';
3
- const { unsafeCmp } = compare;
4
- import * as json from '../../json/module.f.mjs';
5
- import * as object from '../object/module.f.mjs';
6
- const { sort } = object;
7
- import * as list from '../list/module.f.mjs';
8
- const { toArray, countdown, length } = list;
9
- import * as Map from '../map/module.f.mjs';
10
- import * as f from '../function/module.f.mjs';
11
- const { flip } = f;
12
- /** @type {(a: readonly json.Unknown[]) => string} */
13
- const stringify = a => json.stringify(sort)(a);
14
- /** @type {<T>(a: T) => (b: T) => Map.Sign} */
15
- const reverseCmp = flip(unsafeCmp);
16
- export default {
17
- union: [
18
- () => {
19
- const result = stringify(toArray(_.union(unsafeCmp)([2, 3, 4])([1, 3, 5])));
20
- if (result !== '[1,2,3,4,5]') {
21
- throw result;
22
- }
23
- },
24
- () => {
25
- const result = stringify(toArray(_.union(unsafeCmp)([1, 2, 3])([])));
26
- if (result !== '[1,2,3]') {
27
- throw result;
28
- }
29
- },
30
- () => {
31
- const n = 10_000;
32
- const sortedSet = toArray(countdown(n));
33
- const result = _.union(reverseCmp)(sortedSet)(sortedSet);
34
- const len = length(result);
35
- if (len != n) {
36
- throw result;
37
- }
38
- }
39
- ],
40
- intersect: [
41
- () => {
42
- const result = stringify(toArray(_.intersect(unsafeCmp)([2, 3, 4])([1, 3, 5])));
43
- if (result !== '[3]') {
44
- throw result;
45
- }
46
- },
47
- () => {
48
- const result = stringify(toArray(_.intersect(unsafeCmp)([1, 2, 3])([])));
49
- if (result !== '[]') {
50
- throw result;
51
- }
52
- }
53
- ],
54
- has: [
55
- () => {
56
- const result = _.has(unsafeCmp)(0)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
57
- if (!result) {
58
- throw result;
59
- }
60
- },
61
- () => {
62
- const result = _.has(unsafeCmp)(3)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
63
- if (result) {
64
- throw result;
65
- }
66
- },
67
- () => {
68
- const result = _.has(unsafeCmp)(77)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
69
- if (result) {
70
- throw result;
71
- }
72
- },
73
- () => {
74
- const result = _.has(unsafeCmp)(80)([0, 10, 20, 30, 40, 50, 60, 70, 80, 90]);
75
- if (!result) {
76
- throw result;
77
- }
78
- }
79
- ]
80
- };
@@ -1,9 +0,0 @@
1
- export const join: f.Func<string, (input: list.List<string>) => string>;
2
- export const concat: (input: list.List<string>) => string;
3
- /** @type {(n: string) => (v: number) => string} */
4
- export const repeat: (n: string) => (v: number) => string;
5
- /** @type {(a: string) => (b: string) => compare.Sign} */
6
- export const cmp: (a: string) => (b: string) => compare.Sign;
7
- import * as list from '../list/module.f.mjs';
8
- import * as f from '../function/module.f.mjs';
9
- import * as compare from '../function/compare/module.f.mjs';
@@ -1,17 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as list from '../list/module.f.mjs';
3
- const { reduce: listReduce, repeat: listRepeat } = list;
4
- import * as f from '../function/module.f.mjs';
5
- const { compose } = f;
6
- import * as compare from '../function/compare/module.f.mjs';
7
- const { unsafeCmp } = compare;
8
- import * as op from '../function/operator/module.f.mjs';
9
- const { join: joinOp, concat: concatOp } = op;
10
- /** @type {(o: op.Reduce<string>) => (input: list.List<string>) => string} */
11
- const reduce = o => listReduce(o)('');
12
- export const join = compose(joinOp)(reduce);
13
- export const concat = reduce(concatOp);
14
- /** @type {(n: string) => (v: number) => string} */
15
- export const repeat = v => compose(listRepeat(v))(concat);
16
- /** @type {(a: string) => (b: string) => compare.Sign} */
17
- export const cmp = unsafeCmp;
@@ -1,15 +0,0 @@
1
- declare namespace _default {
2
- let join: {
3
- 0: () => void;
4
- 1: () => void;
5
- 3: () => void;
6
- };
7
- function concat(): void;
8
- let repeatList: {
9
- 0: () => void;
10
- 5: () => void;
11
- };
12
- function repeat(): void;
13
- function cmp(): void;
14
- }
15
- export default _default;
@@ -1,58 +0,0 @@
1
- import * as _ from './module.f.mjs';
2
- const { join, concat, repeat, cmp } = _;
3
- import * as list from '../list/module.f.mjs';
4
- const { repeat: repeatList } = list;
5
- export default {
6
- join: {
7
- 0: () => {
8
- const result = join('/')([]);
9
- if (result !== '') {
10
- throw result;
11
- }
12
- },
13
- 1: () => {
14
- const result = join('/')(['']);
15
- if (result !== '') {
16
- throw result;
17
- }
18
- },
19
- 3: () => {
20
- const result = join(' ')(['hello', 'world', '!']);
21
- if (result !== 'hello world !') {
22
- throw result;
23
- }
24
- }
25
- },
26
- concat: () => {
27
- const result = concat(['hello', 'world']);
28
- if (result !== 'helloworld') {
29
- throw result;
30
- }
31
- },
32
- repeatList: {
33
- 0: () => {
34
- const s = join('.')(repeatList('x')(0));
35
- if (s != '') {
36
- throw s;
37
- }
38
- },
39
- 5: () => {
40
- const s = join('.')(repeatList('x')(5));
41
- if (s != 'x.x.x.x.x') {
42
- throw s;
43
- }
44
- }
45
- },
46
- repeat: () => {
47
- const s = repeat('x')(5);
48
- if (s != 'xxxxx') {
49
- throw s;
50
- }
51
- },
52
- cmp: () => {
53
- const result = cmp('3')('4');
54
- if (result !== -1) {
55
- throw result;
56
- }
57
- }
58
- };
@@ -1,13 +0,0 @@
1
- export const values: <T>(tree: BtreeTypes.Tree<T>) => list.List<T>;
2
- export const empty: null;
3
- /** @typedef {BtreeTypes.Tree<string>} StringSet */
4
- /** @type {(value: string) => (set: StringSet) => boolean} */
5
- export const contains: (value: string) => (set: StringSet) => boolean;
6
- /** @type {(value: string) => (s: StringSet) => StringSet} */
7
- export const set: (value: string) => (s: StringSet) => StringSet;
8
- export const fromValues: (input: list.List<string>) => StringSet;
9
- /** @type {(value: string) => (s: StringSet) => StringSet} */
10
- export const remove: (value: string) => (s: StringSet) => StringSet;
11
- export type StringSet = BtreeTypes.Tree<string>;
12
- import * as BtreeTypes from '../btree/types/module.f.mjs';
13
- import * as list from '../list/module.f.mjs';
@@ -1,29 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as BtreeTypes from '../btree/types/module.f.mjs';
3
- import * as btree from '../btree/module.f.mjs';
4
- import * as btf from '../btree/find/module.f.mjs';
5
- const { find, isFound } = btf;
6
- import * as btr from '../btree/remove/module.f.mjs';
7
- const { remove: btreeRemove } = btr;
8
- import * as bts from '../btree/set/module.f.mjs';
9
- const { set: btreeSet } = bts;
10
- export const {
11
- /** @type {(s: StringSet) => list.List<string>} */
12
- values, empty, } = btree;
13
- import * as string from "../string/module.f.mjs";
14
- const { cmp } = string;
15
- import * as list from '../list/module.f.mjs';
16
- const { fold } = list;
17
- import * as f from '../function/module.f.mjs';
18
- const { compose } = f;
19
- /** @typedef {BtreeTypes.Tree<string>} StringSet */
20
- /** @type {(value: string) => (set: StringSet) => boolean} */
21
- export const contains = value => {
22
- const f = find(cmp(value));
23
- return s => s !== null && isFound(f(s).first);
24
- };
25
- /** @type {(value: string) => (s: StringSet) => StringSet} */
26
- export const set = value => btreeSet(cmp(value))(() => value);
27
- export const fromValues = fold(set)(null);
28
- /** @type {(value: string) => (s: StringSet) => StringSet} */
29
- export const remove = compose(cmp)(btreeRemove);
@@ -1,5 +0,0 @@
1
- declare namespace _default {
2
- function contains(): void;
3
- function remove(): void;
4
- }
5
- export default _default;
@@ -1,65 +0,0 @@
1
- import * as _ from './module.f.mjs';
2
- export default {
3
- contains: () => {
4
- const r = _.set('hello')(null);
5
- if (!_.contains('hello')(r)) {
6
- throw r;
7
- }
8
- if (_.contains('hello1')(r)) {
9
- throw r;
10
- }
11
- },
12
- remove: () => {
13
- let r = _.set('hello')(null);
14
- r = _.set('world')(r);
15
- r = _.set('HELLO')(r);
16
- r = _.set('WORLD!')(r);
17
- if (!_.contains('hello')(r)) {
18
- throw r;
19
- }
20
- if (_.contains('hello1')(r)) {
21
- throw r;
22
- }
23
- if (!_.contains('HELLO')(r)) {
24
- throw r;
25
- }
26
- if (_.contains('WORLD')(r)) {
27
- throw r;
28
- }
29
- if (!_.contains('world')(r)) {
30
- throw r;
31
- }
32
- if (_.contains('world!')(r)) {
33
- throw r;
34
- }
35
- if (!_.contains('WORLD!')(r)) {
36
- throw r;
37
- }
38
- //
39
- r = _.remove('hello')(r);
40
- if (_.contains('hello')(r)) {
41
- throw r;
42
- }
43
- if (!_.contains('world')(r)) {
44
- throw r;
45
- }
46
- r = _.remove('world')(r);
47
- if (_.contains('world')(r)) {
48
- throw r;
49
- }
50
- if (!_.contains('HELLO')(r)) {
51
- throw r;
52
- }
53
- r = _.remove('HELLO')(r);
54
- if (_.contains('HELLO')(r)) {
55
- throw r;
56
- }
57
- if (!_.contains('WORLD!')(r)) {
58
- throw r;
59
- }
60
- r = _.remove('WORLD!')(r);
61
- if (r !== null) {
62
- throw r;
63
- }
64
- }
65
- };
package/text/module.f.mjs DELETED
@@ -1,27 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as list from '../types/list/module.f.mjs'
3
- const { flatMap } = list
4
-
5
- /** @typedef {ItemThunk|ItemArray} Block */
6
-
7
- /** @typedef {readonly Item[]} ItemArray */
8
-
9
- /** @typedef {() => list.List<Item>} ItemThunk */
10
-
11
- /** @typedef {string|ItemArray|ItemThunk} Item */
12
-
13
- /** @type {(indent: string) => (text: Block) => list.List<string>} */
14
- export const flat = indent => {
15
-
16
- /** @type {(prefix: string) => (text: Block) => list.List<string>} */
17
- const f = prefix => {
18
- /** @type {(item: Item) => list.List<string>} */
19
- const g = item => typeof (item) === 'string' ? [`${prefix}${item}`] : f(`${prefix}${indent}`)(item)
20
- return flatMap(g)
21
- }
22
-
23
- return f('')
24
- }
25
-
26
- /** @type {(type: string) => (name: string) => (body: Block) => Block} */
27
- export const curly = type => name => body => [`${type} ${name}`, '{', body, '}']
@@ -1,96 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as list from '../../types/list/module.f.mjs'
3
- import * as operator from '../../types/function/operator/module.f.mjs'
4
- import * as range from '../../types/range/module.f.mjs'
5
- const { contains } = range
6
- import * as f from '../../types/function/module.f.mjs'
7
- const { fn } = f
8
- const { map, flat, stateScan, reduce, flatMap, empty } = list
9
-
10
- /** @typedef {u16|null} WordOrEof */
11
-
12
- /** @typedef {number|null} Utf16State */
13
-
14
- /** @typedef {number} u16 */
15
-
16
- /** @typedef {number} i32 */
17
-
18
- const lowBmp = contains([0x0000, 0xd7ff])
19
- const highBmp = contains([0xe000, 0xffff])
20
-
21
- /** @type {(codePoint: i32) => boolean} */
22
- const isBmpCodePoint = codePoint => lowBmp(codePoint) || highBmp(codePoint)
23
-
24
- /** @type {(codePoint: i32) => boolean} */
25
- const isHighSurrogate = contains([0xd800, 0xdbff])
26
-
27
- /** @type {(codePoint: i32) => boolean} */
28
- const isLowSurrogate = contains([0xdc00, 0xdfff])
29
-
30
- const errorMask = 0b1000_0000_0000_0000_0000_0000_0000_0000
31
-
32
- /** @type {(a: i32) => boolean} */
33
- const isSupplementaryPlane = contains([0x01_0000, 0x10_ffff])
34
-
35
- /** @type {(input: i32) => list.List<u16>} */
36
- const codePointToUtf16 = codePoint => {
37
- if (isBmpCodePoint(codePoint)) { return [codePoint] }
38
- if (isSupplementaryPlane(codePoint)) {
39
- const n = codePoint - 0x1_0000
40
- const high = (n >> 10) + 0xd800
41
- const low = (n & 0b0011_1111_1111) + 0xdc00
42
- return [high, low]
43
- }
44
- return [codePoint & 0xffff]
45
- }
46
-
47
- export const fromCodePointList = flatMap(codePointToUtf16)
48
-
49
- const u16 = contains([0x0000, 0xFFFF])
50
-
51
- /** @type {operator.StateScan<u16, Utf16State, list.List<i32>>} */
52
- const utf16ByteToCodePointOp = state => word => {
53
- if (!u16(word)) {
54
- return [[0xffffffff], state]
55
- }
56
- if (state === null) {
57
- if (isBmpCodePoint(word)) { return [[word], null] }
58
- if (isHighSurrogate(word)) { return [[], word] }
59
- return [[word | errorMask], null]
60
- }
61
- if (isLowSurrogate(word)) {
62
- const high = state - 0xd800
63
- const low = word - 0xdc00
64
- return [[(high << 10) + low + 0x10000], null]
65
- }
66
- if (isBmpCodePoint(word)) { return [[state | errorMask, word], null] }
67
- if (isHighSurrogate(word)) { return [[state | errorMask], word] }
68
- return [[state | errorMask, word | errorMask], null]
69
- }
70
-
71
- /** @type {(state: Utf16State) => readonly[list.List<i32>, Utf16State]} */
72
- const utf16EofToCodePointOp = state => [state === null ? empty : [state | errorMask], null]
73
-
74
- /** @type {operator.StateScan<WordOrEof, Utf16State, list.List<i32>>} */
75
- const utf16ByteOrEofToCodePointOp = state => input => input === null ? utf16EofToCodePointOp(state) : utf16ByteToCodePointOp(state)(input)
76
-
77
- /** @type {list.List<WordOrEof>} */
78
- const eofList = [null]
79
-
80
- /** @type {(input: list.List<u16>) => list.List<i32>} */
81
- export const toCodePointList = input => flat(stateScan(utf16ByteOrEofToCodePointOp)(null)(flat([input, eofList])))
82
-
83
- /** @type {(s: string) => list.List<u16>} */
84
- export const stringToList = s => {
85
- /** @type {(i: number) => list.Result<number>} */
86
- const at = i => {
87
- const first = s.charCodeAt(i)
88
- return isNaN(first) ? empty : { first, tail: () => at(i + 1) }
89
- }
90
- return at(0)
91
- }
92
-
93
- /** @type {(input: list.List<u16>) => string} */
94
- export const listToString = fn(map(String.fromCharCode))
95
- .then(reduce(operator.concat)(''))
96
- .result
@@ -1,119 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import * as option from '../nullable/module.f.mjs'
3
- const { map } = option
4
-
5
- /**
6
- * @template T
7
- * @typedef {readonly[T]} Array1
8
- */
9
-
10
- /** @typedef {0} Index1 */
11
-
12
- /**
13
- * @template T
14
- * @typedef {readonly[T, T]} Array2
15
- */
16
-
17
- /**
18
- * @template T0
19
- * @template T1
20
- * @typedef {readonly[T0, T1]} Tuple2
21
- */
22
-
23
- /** @typedef {0|1} Index2 */
24
-
25
- /**
26
- * @template T
27
- * @typedef {readonly[T, T, T]} Array3
28
- */
29
-
30
- /**
31
- * @template T0
32
- * @template T1
33
- * @template T2
34
- * @typedef {readonly[T0, T1, T2]} Tuple3
35
- */
36
-
37
- /** @typedef {0|1|2} Index3 */
38
-
39
- /**
40
- * @template T
41
- * @typedef {readonly[T, T, T, T]} Array4
42
- */
43
-
44
- /** @typedef {0|1|2|3} Index4 */
45
-
46
- /**
47
- * @template T
48
- * @typedef {readonly[T, T, T, T, T]} Array5
49
- */
50
-
51
- /**
52
- * @template T
53
- * @typedef {readonly[T, T, T, T, T, T, T, T]} Array8
54
- */
55
-
56
- /**
57
- * @template T
58
- * @typedef {readonly[T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T]} Array16
59
- */
60
-
61
- /** @typedef {0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15} Index16 */
62
-
63
- /**
64
- * @template T
65
- * @typedef {Array1<T>| Array2<T> | Array3<T> | Array4<T> | Array5<T>} Array1_5
66
- */
67
-
68
- /** @typedef {0|1|2|3|4} Index5 */
69
-
70
- /**
71
- * @template T
72
- * @typedef {T extends Array1<infer _> ? Index1 :
73
- * T extends Array2<infer _> ? Index2 :
74
- * T extends Array3<infer _> ? Index3 :
75
- * T extends Array4<infer _> ? Index4 :
76
- * T extends Array5<infer _> ? Index5 :
77
- * T extends readonly (infer _)[] ? number :
78
- * never
79
- * } KeyOf
80
- */
81
-
82
- /** @type {<T>(_: readonly T[]) => readonly T[]} */
83
- const uncheckTail = a => a.slice(1)
84
-
85
- /** @type {<T>(_: readonly T[]) => readonly T[]} */
86
- const uncheckHead = a => a.slice(0, -1)
87
-
88
- /** @type {(index: number) => <T>(a: readonly T[]) => T|null} */
89
- export const at = i => a => {
90
- const r = a[i]
91
- return r === void 0 ? null : r
92
- }
93
-
94
- /** @type {<T>(_: readonly T[]) => T|null} */
95
- export const first = at(0)
96
-
97
- /** @type {<T>(_: readonly T[]) => T|null} */
98
- export const last = a => at(a.length - 1)(a)
99
-
100
- /** @type {<T>(_: readonly T[]) => readonly T[] | null} */
101
- export const tail = a => a.length === 0 ? null : uncheckTail(a)
102
-
103
- /** @type {<T>(_: readonly T[]) => readonly[T, readonly T[]]|null} */
104
- export const splitFirst = a => {
105
- /** @typedef {typeof a[0]} T*/
106
- /** @type {(_: T) => readonly[T, readonly T[]]} */
107
- const split = first => [first, uncheckTail(a)]
108
- return map(split)(first(a))
109
- }
110
-
111
- /** @type {<T>(_: readonly T[]) => readonly T[]|null} */
112
- export const head = a => a.length === 0 ? null : uncheckHead(a)
113
-
114
- /** @type {<T>(_: readonly T[]) => readonly[readonly T[], T]|null} */
115
- export const splitLast = a => {
116
- const lastA = last(a)
117
- if (lastA === null) { return null }
118
- return [uncheckHead(a), lastA]
119
- }
@@ -1,90 +0,0 @@
1
- // @ts-self-types="./module.f.d.mts"
2
- import { log2 } from '../bigint/module.f.mjs'
3
-
4
- /**
5
- * A vector of bits represented as a `bigint`.
6
- *
7
- * @typedef {bigint} Vec
8
- */
9
-
10
- /**
11
- * An empty vector of bits.
12
- */
13
- export const empty = 1n
14
-
15
- /**
16
- * Calculates the length of the given vector of bits.
17
- */
18
- export const len = log2
19
-
20
- /**
21
- * Extract an unsigned integer of the given `uintLen` from the given vector.
22
- *
23
- * @type {(uintLen: bigint) => (v: Vec) => bigint}
24
- *
25
- * @example
26
- *
27
- * ```js
28
- * const vector = 0b110101n;
29
- * const extract3Bits = uint(3n);
30
- * const result = extract3Bits(vector); // result is 0b101n (5n)
31
- * ```
32
- */
33
- export const uint = uintLen => {
34
- const mask = (1n << uintLen) - 1n
35
- return data => data & mask
36
- }
37
-
38
- /**
39
- * Creates a vector of bits of the given `vecLen` from the given unsigned integer.
40
- *
41
- * @type {(vecLen: bigint) => (ui: bigint) => Vec}
42
- *
43
- * @example
44
- *
45
- * ```js
46
- * const createVector = vec(4n);
47
- * const vector = createVector(5n); // vector is 0b10101n
48
- * ```
49
- */
50
- export const vec = vecLen => {
51
- const stop = 1n << vecLen
52
- const mask = stop - 1n
53
- return data => (data & mask) | stop
54
- }
55
-
56
- /**
57
- * Appends the vector `b` to the back of the vector `a`.
58
- *
59
- * @type {(a: Vec) => (b: Vec) => Vec}
60
- *
61
- * @example
62
- *
63
- * ```js
64
- * const vec8 = vec(8n)
65
- * const a = vec8(0x345n)
66
- * const b = vec8(0x789n)
67
- * const ab = appendBack(a)(b) // 0x18945n
68
- * ```
69
- */
70
- export const appendBack = a => {
71
- const aLen = len(a)
72
- return b => a | (b << aLen)
73
- }
74
-
75
- /**
76
- * Removes the first `len` bits from the given vector.
77
- *
78
- * @type {(len: bigint) => (v: Vec) => Vec}
79
- *
80
- * @example
81
- *
82
- * ```js
83
- * const v = vec(17n)(0x12345n) // v = 0x32345n
84
- * const r = removeFront(9n)(v) // r = 0x191n
85
- * ```
86
- */
87
- export const removeFront = len => v => {
88
- const r = v >> len
89
- return r === 0n ? empty : r
90
- }
@@ -1,41 +0,0 @@
1
- import { empty, len, appendBack, vec, uint, removeFront } from './module.f.mjs'
2
-
3
- export default {
4
- uintExample: () => {
5
- const vector = 0b110101n;
6
- const extract3Bits = uint(3n);
7
- const result = extract3Bits(vector); // result is 0b101n (5n)
8
- if (result !== 0b101n) { throw result }
9
- },
10
- vecExample: () => {
11
- const createVector = vec(4n);
12
- const vector = createVector(5n); // vector is 0b10101n
13
- if (vector !== 0b10101n) { throw vector }
14
- },
15
- length: () => {
16
- const i = len(empty)
17
- if (i !== 0n) { throw i}
18
- },
19
- bitset: () => {
20
- const v = vec(8n)(0x5FEn)
21
- if (v !== 0x1FEn) { throw v }
22
- if (len(v) !== 8n) { throw 'len' }
23
- const u = uint(8n)(v)
24
- if (u !== 0xFEn) { throw v }
25
- },
26
- appendBack: () => {
27
- const vec8 = vec(8n)
28
- const a = vec8(0x345n)
29
- const b = vec8(0x789n)
30
- const ab = appendBack(a)(b)
31
- if (ab !== 0x18945n) { throw ab }
32
- const s = len(ab)
33
- if (s !== 16n) { throw `appendBack: ${s}` }
34
- },
35
- removeBack: () => {
36
- const v = vec(17n)(0x12345n)
37
- if (v !== 0x32345n) { throw v.toString(16) }
38
- const r = removeFront(9n)(v)
39
- if (r !== 0x191n) { throw r.toString(16) }
40
- }
41
- }