functionalscript 0.3.4 → 0.3.5

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 (457) hide show
  1. package/com/cpp/module.f.d.ts +10 -0
  2. package/com/cpp/module.f.js +107 -0
  3. package/com/cpp/test.f.d.ts +2 -0
  4. package/com/cpp/{test.f.ts → test.f.js} +9 -11
  5. package/com/cpp/testlib.f.d.ts +2 -0
  6. package/com/cpp/testlib.f.js +5 -0
  7. package/com/cs/module.f.d.ts +12 -0
  8. package/com/cs/module.f.js +80 -0
  9. package/com/cs/test.f.d.ts +2 -0
  10. package/com/cs/{test.f.ts → test.f.js} +9 -11
  11. package/com/cs/testlib.f.d.ts +2 -0
  12. package/com/cs/testlib.f.js +5 -0
  13. package/com/rust/module.f.d.ts +15 -0
  14. package/com/rust/module.f.js +169 -0
  15. package/com/rust/test.f.d.ts +2 -0
  16. package/com/rust/{test.f.ts → test.f.js} +7 -7
  17. package/com/rust/testlib.f.d.ts +2 -0
  18. package/com/rust/testlib.f.js +5 -0
  19. package/com/test/build.f.d.ts +20 -0
  20. package/com/test/build.f.js +58 -0
  21. package/com/types/module.f.d.ts +28 -0
  22. package/com/types/module.f.js +8 -0
  23. package/com/types/testlib.f.d.ts +44 -0
  24. package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
  25. package/commonjs/build/module.f.d.ts +6 -0
  26. package/commonjs/build/module.f.js +69 -0
  27. package/commonjs/build/test.f.d.ts +2 -0
  28. package/commonjs/build/test.f.js +96 -0
  29. package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
  30. package/commonjs/module/function/module.f.js +4 -0
  31. package/commonjs/module/module.f.d.ts +18 -0
  32. package/commonjs/module/module.f.js +12 -0
  33. package/commonjs/module.f.d.ts +6 -0
  34. package/commonjs/module.f.js +1 -0
  35. package/commonjs/package/dependencies/module.f.d.ts +7 -0
  36. package/commonjs/package/dependencies/module.f.js +13 -0
  37. package/commonjs/package/dependencies/test.f.d.ts +2 -0
  38. package/commonjs/package/dependencies/test.f.js +15 -0
  39. package/commonjs/package/module.f.d.ts +17 -0
  40. package/commonjs/package/module.f.js +18 -0
  41. package/commonjs/package/test.f.d.ts +2 -0
  42. package/commonjs/package/test.f.js +27 -0
  43. package/commonjs/path/module.f.d.ts +24 -0
  44. package/commonjs/path/module.f.js +114 -0
  45. package/commonjs/path/test.f.d.ts +25 -0
  46. package/commonjs/path/{test.f.ts → test.f.js} +123 -89
  47. package/crypto/prime_field/module.f.d.ts +43 -0
  48. package/crypto/prime_field/module.f.js +78 -0
  49. package/crypto/prime_field/test.f.d.ts +13 -0
  50. package/crypto/prime_field/test.f.js +149 -0
  51. package/crypto/secp/module.f.d.ts +68 -0
  52. package/crypto/secp/module.f.js +127 -0
  53. package/crypto/secp/test.f.d.ts +5 -0
  54. package/crypto/secp/test.f.js +72 -0
  55. package/crypto/sha2/module.f.d.ts +13 -0
  56. package/crypto/sha2/module.f.js +145 -0
  57. package/crypto/sha2/test.f.d.ts +9 -0
  58. package/crypto/sha2/test.f.js +82 -0
  59. package/dev/module.f.d.ts +1 -0
  60. package/dev/module.f.js +1 -0
  61. package/dev/test/module.f.d.ts +20 -0
  62. package/dev/test/module.f.js +75 -0
  63. package/dev/test.f.d.ts +9 -0
  64. package/dev/{test.f.ts → test.f.js} +22 -24
  65. package/djs/module.f.d.ts +17 -0
  66. package/djs/module.f.js +63 -0
  67. package/djs/parser/module.f.d.ts +12 -0
  68. package/djs/parser/module.f.js +333 -0
  69. package/djs/parser/test.f.d.ts +12 -0
  70. package/djs/parser/test.f.js +717 -0
  71. package/djs/serializer/module.f.d.ts +9 -0
  72. package/djs/serializer/module.f.js +81 -0
  73. package/djs/test/input.f.d.ts +2 -0
  74. package/djs/test/input.f.js +4 -0
  75. package/djs/test/m.f.d.ts +2 -0
  76. package/djs/test/m.f.js +1 -0
  77. package/djs/test.f.d.ts +12 -0
  78. package/djs/test.f.js +84 -0
  79. package/djs/tokenizer/module.f.d.ts +8 -0
  80. package/djs/tokenizer/module.f.js +60 -0
  81. package/djs/tokenizer/test.f.d.ts +7 -0
  82. package/djs/tokenizer/test.f.js +529 -0
  83. package/fsc/module.f.d.ts +5 -0
  84. package/fsc/module.f.js +75 -0
  85. package/fsc/test.f.d.ts +4 -0
  86. package/fsc/test.f.js +19 -0
  87. package/fsm/module.f.d.ts +13 -0
  88. package/fsm/module.f.js +59 -0
  89. package/fsm/test.f.d.ts +5 -0
  90. package/fsm/test.f.js +137 -0
  91. package/html/module.f.d.ts +13 -0
  92. package/html/module.f.js +58 -0
  93. package/html/test.f.d.ts +9 -0
  94. package/html/test.f.js +42 -0
  95. package/issues/test.f.d.ts +16 -0
  96. package/issues/test.f.js +70 -0
  97. package/js/tokenizer/module.f.d.ts +86 -0
  98. package/js/tokenizer/module.f.js +503 -0
  99. package/js/tokenizer/test.f.d.ts +9 -0
  100. package/js/tokenizer/test.f.js +905 -0
  101. package/json/module.f.d.ts +20 -0
  102. package/json/module.f.js +68 -0
  103. package/json/parser/module.f.d.ts +5 -0
  104. package/json/parser/module.f.js +155 -0
  105. package/json/parser/test.f.d.ts +5 -0
  106. package/json/parser/test.f.js +328 -0
  107. package/json/serializer/module.f.d.ts +7 -0
  108. package/json/serializer/module.f.js +21 -0
  109. package/json/serializer/test.f.d.ts +8 -0
  110. package/json/serializer/test.f.js +87 -0
  111. package/json/test.f.d.ts +8 -0
  112. package/json/test.f.js +61 -0
  113. package/json/tokenizer/module.f.d.ts +8 -0
  114. package/json/tokenizer/module.f.js +52 -0
  115. package/json/tokenizer/test.f.d.ts +6 -0
  116. package/json/tokenizer/test.f.js +419 -0
  117. package/nanvm-lib/tests/test.f.d.ts +27 -0
  118. package/nanvm-lib/tests/test.f.js +84 -0
  119. package/nodejs/version/module.f.d.ts +11 -0
  120. package/nodejs/version/module.f.js +16 -0
  121. package/nodejs/version/test.f.d.ts +2 -0
  122. package/nodejs/version/{test.f.ts → test.f.js} +13 -22
  123. package/package.json +9 -5
  124. package/text/ascii/module.f.d.ts +129 -0
  125. package/text/ascii/module.f.js +148 -0
  126. package/text/ascii/test.f.d.ts +4 -0
  127. package/text/ascii/test.f.js +14 -0
  128. package/text/module.f.d.ts +8 -0
  129. package/text/module.f.js +10 -0
  130. package/text/sgr/module.f.d.ts +8 -0
  131. package/text/sgr/module.f.js +8 -0
  132. package/text/test.f.d.ts +2 -0
  133. package/text/test.f.js +18 -0
  134. package/text/utf16/module.f.d.ts +9 -0
  135. package/text/utf16/module.f.js +66 -0
  136. package/text/utf16/test.f.d.ts +6 -0
  137. package/text/utf16/test.f.js +144 -0
  138. package/text/utf8/module.f.d.ts +6 -0
  139. package/text/utf8/module.f.js +112 -0
  140. package/text/utf8/test.f.d.ts +6 -0
  141. package/text/utf8/test.f.js +175 -0
  142. package/types/array/module.f.d.ts +21 -0
  143. package/types/array/module.f.js +23 -0
  144. package/types/array/test.f.d.ts +10 -0
  145. package/types/array/test.f.js +116 -0
  146. package/types/bigfloat/module.f.d.ts +3 -0
  147. package/types/bigfloat/module.f.js +66 -0
  148. package/types/bigfloat/test.f.d.ts +6 -0
  149. package/types/bigfloat/test.f.js +349 -0
  150. package/types/bigint/module.f.d.ts +54 -0
  151. package/types/bigint/{module.f.ts → module.f.js} +42 -65
  152. package/types/bigint/test.f.d.ts +16 -0
  153. package/types/bigint/test.f.js +199 -0
  154. package/types/bit_vec/module.f.d.ts +134 -0
  155. package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
  156. package/types/bit_vec/test.f.d.ts +22 -0
  157. package/types/bit_vec/test.f.js +210 -0
  158. package/types/btree/find/module.f.d.ts +20 -0
  159. package/types/btree/find/module.f.js +84 -0
  160. package/types/btree/find/test.f.d.ts +2 -0
  161. package/types/btree/find/test.f.js +152 -0
  162. package/types/btree/module.f.d.ts +4 -0
  163. package/types/btree/module.f.js +31 -0
  164. package/types/btree/remove/module.f.d.ts +4 -0
  165. package/types/btree/remove/module.f.js +174 -0
  166. package/types/btree/remove/test.f.d.ts +5 -0
  167. package/types/btree/remove/test.f.js +634 -0
  168. package/types/btree/set/module.f.d.ts +3 -0
  169. package/types/btree/set/module.f.js +103 -0
  170. package/types/btree/set/test.f.d.ts +2 -0
  171. package/types/btree/set/test.f.js +360 -0
  172. package/types/btree/test.f.d.ts +8 -0
  173. package/types/btree/test.f.js +75 -0
  174. package/types/btree/types/module.f.d.ts +11 -0
  175. package/types/btree/types/module.f.js +1 -0
  176. package/types/byte_set/module.f.d.ts +16 -0
  177. package/types/byte_set/module.f.js +28 -0
  178. package/types/byte_set/test.f.d.ts +12 -0
  179. package/types/byte_set/test.f.js +122 -0
  180. package/types/function/compare/module.f.d.ts +10 -0
  181. package/types/function/compare/module.f.js +7 -0
  182. package/types/function/compare/test.f.d.ts +2 -0
  183. package/types/function/compare/test.f.js +8 -0
  184. package/types/function/module.f.d.ts +28 -0
  185. package/types/function/module.f.js +19 -0
  186. package/types/function/operator/module.f.d.ts +20 -0
  187. package/types/function/operator/module.f.js +18 -0
  188. package/types/function/test.f.d.ts +2 -0
  189. package/types/function/test.f.js +12 -0
  190. package/types/list/module.f.d.ts +50 -0
  191. package/types/list/module.f.js +171 -0
  192. package/types/list/test.f.d.ts +22 -0
  193. package/types/list/test.f.js +395 -0
  194. package/types/map/module.f.d.ts +14 -0
  195. package/types/map/module.f.js +31 -0
  196. package/types/map/test.f.d.ts +5 -0
  197. package/types/map/test.f.js +114 -0
  198. package/types/nibble_set/module.f.d.ts +10 -0
  199. package/types/nibble_set/module.f.js +9 -0
  200. package/types/nibble_set/test.f.d.ts +12 -0
  201. package/types/nibble_set/test.f.js +90 -0
  202. package/types/nullable/module.f.d.ts +3 -0
  203. package/types/nullable/module.f.js +2 -0
  204. package/types/nullable/test.f.d.ts +2 -0
  205. package/types/nullable/test.f.js +12 -0
  206. package/types/number/module.f.d.ts +6 -0
  207. package/types/number/module.f.js +8 -0
  208. package/types/number/test.f.d.ts +11 -0
  209. package/types/number/test.f.js +124 -0
  210. package/types/object/module.f.d.ts +10 -0
  211. package/types/object/module.f.js +12 -0
  212. package/types/object/test.f.d.ts +5 -0
  213. package/types/object/test.f.js +17 -0
  214. package/types/range/module.f.d.ts +3 -0
  215. package/types/range/module.f.js +2 -0
  216. package/types/range/test.f.d.ts +2 -0
  217. package/types/range/test.f.js +18 -0
  218. package/types/range_map/module.f.d.ts +14 -0
  219. package/types/range_map/module.f.js +51 -0
  220. package/types/range_map/test.f.d.ts +6 -0
  221. package/types/range_map/test.f.js +176 -0
  222. package/types/result/module.f.d.ts +7 -0
  223. package/types/result/module.f.js +8 -0
  224. package/types/sorted_list/module.f.d.ts +16 -0
  225. package/types/sorted_list/module.f.js +56 -0
  226. package/types/sorted_list/test.f.d.ts +5 -0
  227. package/types/sorted_list/test.f.js +64 -0
  228. package/types/sorted_set/module.f.d.ts +7 -0
  229. package/types/sorted_set/module.f.js +14 -0
  230. package/types/sorted_set/test.f.d.ts +6 -0
  231. package/types/sorted_set/test.f.js +78 -0
  232. package/types/string/module.f.d.ts +6 -0
  233. package/types/string/module.f.js +11 -0
  234. package/types/string/test.f.d.ts +15 -0
  235. package/types/string/test.f.js +58 -0
  236. package/types/string_set/module.f.d.ts +9 -0
  237. package/types/string_set/module.f.js +22 -0
  238. package/types/string_set/test.f.d.ts +5 -0
  239. package/types/string_set/test.f.js +65 -0
  240. package/.github/FUNDING.yml +0 -12
  241. package/.github/dependabot.yml +0 -11
  242. package/.github/workflows/ci.yml +0 -88
  243. package/.github/workflows/npm-publish.yml +0 -53
  244. package/CHANGELOG.md +0 -29
  245. package/Cargo.lock +0 -18
  246. package/Cargo.toml +0 -7
  247. package/com/README.md +0 -3
  248. package/com/cpp/README.md +0 -80
  249. package/com/cpp/module.f.ts +0 -180
  250. package/com/cpp/nanocom.hpp +0 -195
  251. package/com/cpp/testlib.f.ts +0 -8
  252. package/com/cs/module.f.ts +0 -145
  253. package/com/cs/testlib.f.ts +0 -8
  254. package/com/proposals.md +0 -28
  255. package/com/rust/module.f.ts +0 -287
  256. package/com/rust/nanocom/Cargo.lock +0 -7
  257. package/com/rust/nanocom/Cargo.toml +0 -15
  258. package/com/rust/nanocom/README.md +0 -56
  259. package/com/rust/nanocom/src/class.rs +0 -6
  260. package/com/rust/nanocom/src/cobject.rs +0 -90
  261. package/com/rust/nanocom/src/guid.rs +0 -15
  262. package/com/rust/nanocom/src/hresult.rs +0 -7
  263. package/com/rust/nanocom/src/interface.rs +0 -9
  264. package/com/rust/nanocom/src/iunknown.rs +0 -13
  265. package/com/rust/nanocom/src/lib.rs +0 -20
  266. package/com/rust/nanocom/src/object.rs +0 -34
  267. package/com/rust/nanocom/src/ref.rs +0 -57
  268. package/com/rust/nanocom/src/vmt.rs +0 -7
  269. package/com/rust/nanocom/tests/it.rs +0 -186
  270. package/com/rust/nanocom/tests/itmod.rs +0 -195
  271. package/com/rust/testlib.f.ts +0 -8
  272. package/com/test/build.f.ts +0 -111
  273. package/com/test/build.ts +0 -45
  274. package/com/test/cpp/main.cpp +0 -74
  275. package/com/test/cs/Program.cs +0 -31
  276. package/com/test/cs/cs.csproj +0 -16
  277. package/com/test/rust/Cargo.toml +0 -12
  278. package/com/test/rust/src/lib.rs +0 -56
  279. package/com/types/module.f.ts +0 -62
  280. package/commonjs/README.md +0 -94
  281. package/commonjs/build/module.f.ts +0 -100
  282. package/commonjs/build/test.f.ts +0 -107
  283. package/commonjs/module/module.f.ts +0 -41
  284. package/commonjs/module.f.ts +0 -7
  285. package/commonjs/module.ts +0 -31
  286. package/commonjs/package/dependencies/module.f.ts +0 -22
  287. package/commonjs/package/dependencies/test.f.ts +0 -8
  288. package/commonjs/package/module.f.ts +0 -31
  289. package/commonjs/package/test.f.ts +0 -12
  290. package/commonjs/path/README.md +0 -17
  291. package/commonjs/path/module.f.ts +0 -171
  292. package/commonjs/test.ts +0 -64
  293. package/crypto/README.md +0 -3
  294. package/crypto/prime_field/module.f.ts +0 -114
  295. package/crypto/prime_field/test.f.ts +0 -95
  296. package/crypto/secp/module.f.ts +0 -182
  297. package/crypto/secp/test.f.ts +0 -68
  298. package/crypto/sha2/module.f.ts +0 -215
  299. package/crypto/sha2/test.f.ts +0 -83
  300. package/deno.json +0 -71
  301. package/dev/README.md +0 -8
  302. package/dev/index.ts +0 -3
  303. package/dev/module.f.ts +0 -1
  304. package/dev/module.ts +0 -195
  305. package/dev/test/module.f.ts +0 -135
  306. package/dev/test.ts +0 -53
  307. package/djs/README.md +0 -54
  308. package/djs/module.f.ts +0 -76
  309. package/djs/parser/module.f.ts +0 -509
  310. package/djs/parser/test.f.ts +0 -461
  311. package/djs/serializer/module.f.ts +0 -90
  312. package/djs/test.f.ts +0 -67
  313. package/djs/tokenizer/module.f.ts +0 -99
  314. package/djs/tokenizer/test.f.ts +0 -364
  315. package/doc/LANGUAGE.md +0 -255
  316. package/doc/README.md +0 -61
  317. package/doc/byte-code.md +0 -59
  318. package/doc/fa.md +0 -174
  319. package/doc/predefined.md +0 -143
  320. package/doc/proposals.md +0 -21
  321. package/doc/vm/README.md +0 -24
  322. package/doc/vm-rearchitecture.md +0 -129
  323. package/doc/vm.md +0 -150
  324. package/fsc/README.md +0 -111
  325. package/fsc/module.f.ts +0 -122
  326. package/fsc/test.f.ts +0 -21
  327. package/fsm/README.md +0 -113
  328. package/fsm/module.f.ts +0 -107
  329. package/fsm/test.f.ts +0 -139
  330. package/funding.json +0 -61
  331. package/html/README.md +0 -32
  332. package/html/module.f.ts +0 -109
  333. package/html/test.f.ts +0 -37
  334. package/issues/01-test-debug.md +0 -3
  335. package/issues/02-esm.md +0 -8
  336. package/issues/03-djs.md +0 -57
  337. package/issues/05-publish.md +0 -40
  338. package/issues/11-fs-load.md +0 -13
  339. package/issues/17-djs-extension.md +0 -6
  340. package/issues/README.md +0 -42
  341. package/issues/lang/1000-json.md +0 -50
  342. package/issues/lang/2110-default-export.md +0 -11
  343. package/issues/lang/2120-const.md +0 -14
  344. package/issues/lang/2130-default-import.md +0 -10
  345. package/issues/lang/2210-block-comment.md +0 -12
  346. package/issues/lang/2220-namespace-import.md +0 -25
  347. package/issues/lang/2310-undefined.md +0 -7
  348. package/issues/lang/2320-bigint.md +0 -7
  349. package/issues/lang/2330-property-accessor.md +0 -225
  350. package/issues/lang/2340-operators.md +0 -41
  351. package/issues/lang/2350-grouping.md +0 -11
  352. package/issues/lang/2360-built-in.md +0 -81
  353. package/issues/lang/2410-identifier-property.md +0 -9
  354. package/issues/lang/2420-line-comment.md +0 -10
  355. package/issues/lang/2430-trailing-comma.md +0 -13
  356. package/issues/lang/2440-shorthand.md +0 -8
  357. package/issues/lang/2450-destructuring.md +0 -12
  358. package/issues/lang/3110-function.md +0 -35
  359. package/issues/lang/3120-parameters.md +0 -9
  360. package/issues/lang/3130-body-const.md +0 -12
  361. package/issues/lang/3220-let.md +0 -11
  362. package/issues/lang/3240-export.md +0 -44
  363. package/issues/lang/3370-type-inference.md +0 -69
  364. package/issues/lang/3380-promise.md +0 -22
  365. package/issues/lang/3390-class.md +0 -3
  366. package/issues/lang/3410-expression.md +0 -12
  367. package/issues/lang/3420-one-parameter.md +0 -10
  368. package/issues/lang/3430-assignments.md +0 -23
  369. package/issues/lang/README.md +0 -193
  370. package/issues/test.f.ts +0 -58
  371. package/js/tokenizer/module.f.ts +0 -882
  372. package/js/tokenizer/test.f.ts +0 -617
  373. package/json/html/README.md +0 -49
  374. package/json/module.f.ts +0 -94
  375. package/json/parser/module.f.ts +0 -221
  376. package/json/parser/test.f.ts +0 -255
  377. package/json/serializer/module.f.ts +0 -74
  378. package/json/serializer/test.f.ts +0 -64
  379. package/json/test.f.ts +0 -48
  380. package/json/tokenizer/module.f.ts +0 -85
  381. package/json/tokenizer/test.f.ts +0 -290
  382. package/nanvm-lib/Cargo.toml +0 -6
  383. package/nanvm-lib/src/extension.rs +0 -130
  384. package/nanvm-lib/src/interface.rs +0 -133
  385. package/nanvm-lib/src/lib.rs +0 -7
  386. package/nanvm-lib/src/naive.rs +0 -236
  387. package/nanvm-lib/src/nanenum.rs +0 -236
  388. package/nanvm-lib/src/nullish.rs +0 -7
  389. package/nanvm-lib/src/sign.rs +0 -5
  390. package/nanvm-lib/src/simple.rs +0 -32
  391. package/nanvm-lib/tests/test.f.ts +0 -80
  392. package/nanvm-lib/tests/test.rs +0 -108
  393. package/nodejs/version/main.ts +0 -4
  394. package/nodejs/version/module.f.ts +0 -42
  395. package/text/README.md +0 -110
  396. package/text/ascii/module.f.ts +0 -219
  397. package/text/ascii/test.f.ts +0 -14
  398. package/text/module.f.ts +0 -30
  399. package/text/sgr/README.md +0 -3
  400. package/text/sgr/module.f.ts +0 -11
  401. package/text/test.f.ts +0 -19
  402. package/text/utf16/module.f.ts +0 -120
  403. package/text/utf16/test.f.ts +0 -107
  404. package/text/utf8/module.f.ts +0 -116
  405. package/text/utf8/test.f.ts +0 -125
  406. package/tsconfig.json +0 -104
  407. package/types/array/module.f.ts +0 -89
  408. package/types/array/test.f.ts +0 -88
  409. package/types/bigfloat/module.f.ts +0 -93
  410. package/types/bigfloat/test.f.ts +0 -218
  411. package/types/bigint/README.md +0 -35
  412. package/types/bigint/test.f.ts +0 -144
  413. package/types/bit_vec/README.md +0 -18
  414. package/types/bit_vec/test.f.ts +0 -129
  415. package/types/btree/README.md +0 -160
  416. package/types/btree/find/module.f.ts +0 -92
  417. package/types/btree/find/test.f.ts +0 -122
  418. package/types/btree/module.f.ts +0 -35
  419. package/types/btree/remove/module.f.ts +0 -151
  420. package/types/btree/remove/test.f.ts +0 -498
  421. package/types/btree/set/module.f.ts +0 -89
  422. package/types/btree/set/test.f.ts +0 -415
  423. package/types/btree/test.f.ts +0 -92
  424. package/types/btree/types/module.f.ts +0 -27
  425. package/types/byte_set/module.f.ts +0 -73
  426. package/types/byte_set/test.f.ts +0 -84
  427. package/types/function/compare/module.f.ts +0 -26
  428. package/types/function/compare/test.f.ts +0 -7
  429. package/types/function/module.f.ts +0 -43
  430. package/types/function/operator/module.f.ts +0 -65
  431. package/types/function/test.f.ts +0 -20
  432. package/types/list/module.f.ts +0 -350
  433. package/types/list/test.f.ts +0 -327
  434. package/types/map/module.f.ts +0 -65
  435. package/types/map/test.f.ts +0 -76
  436. package/types/nibble_set/module.f.ts +0 -34
  437. package/types/nibble_set/test.f.ts +0 -57
  438. package/types/nullable/module.f.ts +0 -9
  439. package/types/nullable/test.f.ts +0 -9
  440. package/types/number/module.f.ts +0 -20
  441. package/types/number/test.f.ts +0 -194
  442. package/types/object/module.f.ts +0 -30
  443. package/types/object/test.f.ts +0 -14
  444. package/types/range/module.f.ts +0 -10
  445. package/types/range/test.f.ts +0 -9
  446. package/types/range_map/module.f.ts +0 -70
  447. package/types/range_map/test.f.ts +0 -189
  448. package/types/result/module.f.ts +0 -20
  449. package/types/result/module.ts +0 -18
  450. package/types/sorted_list/module.f.ts +0 -83
  451. package/types/sorted_list/test.f.ts +0 -57
  452. package/types/sorted_set/module.f.ts +0 -36
  453. package/types/sorted_set/test.f.ts +0 -67
  454. package/types/string/module.f.ts +0 -26
  455. package/types/string/test.f.ts +0 -43
  456. package/types/string_set/module.f.ts +0 -37
  457. package/types/string_set/test.f.ts +0 -34
@@ -0,0 +1,144 @@
1
+ import * as encoding from "./module.f.js";
2
+ import * as json from "../../json/module.f.js";
3
+ import * as o from "../../types/object/module.f.js";
4
+ const { sort } = o;
5
+ import * as list from "../../types/list/module.f.js";
6
+ const stringify = a => json.stringify(sort)(a);
7
+ export default {
8
+ toCodePointList: [
9
+ () => {
10
+ const result = stringify(list.toArray(encoding.toCodePointList([-1, 65536])));
11
+ if (result !== '[4294967295,4294967295]') {
12
+ throw result;
13
+ }
14
+ },
15
+ () => {
16
+ const result = stringify(list.toArray(encoding.toCodePointList([0, 36, 8364, 55295, 57344, 65535])));
17
+ if (result !== '[0,36,8364,55295,57344,65535]') {
18
+ throw result;
19
+ }
20
+ },
21
+ () => {
22
+ const result = stringify(list.toArray(encoding.toCodePointList([56320, 57343])));
23
+ if (result !== '[-2147427328,-2147426305]') {
24
+ throw result;
25
+ }
26
+ },
27
+ () => {
28
+ const result = stringify(list.toArray(encoding.toCodePointList([55296, 56320, 55297, 56375, 55378, 57186, 56319, 57343])));
29
+ if (result !== '[65536,66615,150370,1114111]') {
30
+ throw result;
31
+ }
32
+ },
33
+ () => {
34
+ const result = stringify(list.toArray(encoding.toCodePointList([55296, 55296])));
35
+ if (result !== '[-2147428352,-2147428352]') {
36
+ throw result;
37
+ }
38
+ },
39
+ () => {
40
+ const result = stringify(list.toArray(encoding.toCodePointList([55296, 0])));
41
+ if (result !== '[-2147428352,0]') {
42
+ throw result;
43
+ }
44
+ },
45
+ () => {
46
+ const result = stringify(list.toArray(encoding.toCodePointList([56320])));
47
+ if (result !== '[-2147427328]') {
48
+ throw result;
49
+ }
50
+ },
51
+ () => {
52
+ const result = stringify(list.toArray(encoding.toCodePointList([56320, 0])));
53
+ if (result !== '[-2147427328,0]') {
54
+ throw result;
55
+ }
56
+ }
57
+ ],
58
+ fromCodePointList: [
59
+ () => {
60
+ const result = stringify(list.toArray(encoding.fromCodePointList([0])));
61
+ if (result !== '[0]') {
62
+ throw result;
63
+ }
64
+ },
65
+ () => {
66
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x24])));
67
+ if (result !== '[36]') {
68
+ throw result;
69
+ }
70
+ },
71
+ () => {
72
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x20AC])));
73
+ if (result !== '[8364]') {
74
+ throw result;
75
+ }
76
+ },
77
+ () => {
78
+ const result = stringify(list.toArray(encoding.fromCodePointList([0xd7ff])));
79
+ if (result !== '[55295]') {
80
+ throw result;
81
+ }
82
+ },
83
+ () => {
84
+ const result = stringify(list.toArray(encoding.fromCodePointList([0xe000])));
85
+ if (result !== '[57344]') {
86
+ throw result;
87
+ }
88
+ },
89
+ () => {
90
+ const result = stringify(list.toArray(encoding.fromCodePointList([0xffff])));
91
+ if (result !== '[65535]') {
92
+ throw result;
93
+ }
94
+ },
95
+ () => {
96
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x10000])));
97
+ if (result !== '[55296,56320]') {
98
+ throw result;
99
+ }
100
+ },
101
+ () => {
102
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x10437])));
103
+ if (result !== '[55297,56375]') {
104
+ throw result;
105
+ }
106
+ },
107
+ () => {
108
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x24B62])));
109
+ if (result !== '[55378,57186]') {
110
+ throw result;
111
+ }
112
+ },
113
+ () => {
114
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x10ffff])));
115
+ if (result !== '[56319,57343]') {
116
+ throw result;
117
+ }
118
+ },
119
+ () => {
120
+ const result = stringify(list.toArray(encoding.fromCodePointList([-1, 0xd800, 0xdfff, 0x110000])));
121
+ if (result !== '[65535,55296,57343,0]') {
122
+ throw result;
123
+ }
124
+ }
125
+ ],
126
+ string: [
127
+ () => {
128
+ const utf16List = encoding.stringToList("Hello world!😂🚜🚲");
129
+ const result = encoding.listToString(utf16List);
130
+ if (result !== "Hello world!😂🚜🚲") {
131
+ throw result;
132
+ }
133
+ },
134
+ () => {
135
+ const a = encoding.stringToList("Hello world!😂🚜🚲");
136
+ const b = encoding.toCodePointList(a);
137
+ const c = encoding.fromCodePointList(b);
138
+ const result = encoding.listToString(c);
139
+ if (result !== "Hello world!😂🚜🚲") {
140
+ throw result;
141
+ }
142
+ }
143
+ ]
144
+ };
@@ -0,0 +1,6 @@
1
+ import { type List, type Thunk } from '../../types/list/module.f.ts';
2
+ type u8 = number;
3
+ type i32 = number;
4
+ export declare const fromCodePointList: (input: List<number>) => Thunk<number>;
5
+ export declare const toCodePointList: (input: List<u8>) => List<i32>;
6
+ export {};
@@ -0,0 +1,112 @@
1
+ import { flatMap, flat, stateScan } from "../../types/list/module.f.js";
2
+ import * as operator from "../../types/function/operator/module.f.js";
3
+ import * as Array from "../../types/array/module.f.js";
4
+ const errorMask = 0b1000_0000_0000_0000_0000_0000_0000_0000;
5
+ const codePointToUtf8 = input => {
6
+ if (input >= 0x0000 && input <= 0x007f) {
7
+ return [input & 0b01111_1111];
8
+ }
9
+ if (input >= 0x0080 && input <= 0x07ff) {
10
+ return [input >> 6 | 0b1100_0000, input & 0b0011_1111 | 0b1000_0000];
11
+ }
12
+ if (input >= 0x0800 && input <= 0xffff) {
13
+ return [input >> 12 | 0b1110_0000, input >> 6 & 0b0011_1111 | 0b1000_0000, input & 0b0011_1111 | 0b1000_0000];
14
+ }
15
+ if (input >= 0x10000 && input <= 0x10ffff) {
16
+ return [input >> 18 | 0b1111_0000, input >> 12 & 0b0011_1111 | 0b1000_0000, input >> 6 & 0b0011_1111 | 0b1000_0000, input & 0b0011_1111 | 0b1000_0000];
17
+ }
18
+ if ((input & errorMask) !== 0) {
19
+ if ((input & 0b1000_0000_0000_0000) !== 0) {
20
+ return [input >> 12 & 0b0000_0111 | 0b1111_0000, input >> 6 & 0b0011_1111 | 0b1000_0000, input & 0b0011_1111 | 0b1000_0000];
21
+ }
22
+ if ((input & 0b0000_0100_0000_0000) !== 0) {
23
+ return [input >> 6 & 0b0000_1111 | 0b1110_0000, input & 0b0011_1111 | 0b1000_0000];
24
+ }
25
+ if ((input & 0b0000_0010_0000_0000) !== 0) {
26
+ return [input >> 6 & 0b0000_0111 | 0b1111_0000, input & 0b0011_1111 | 0b1000_0000];
27
+ }
28
+ if ((input & 0b0000_0000_1000_0000) !== 0) {
29
+ return [input & 0b1111_1111];
30
+ }
31
+ }
32
+ return [errorMask];
33
+ };
34
+ export const fromCodePointList = flatMap(codePointToUtf8);
35
+ const utf8StateToError = state => {
36
+ let x;
37
+ switch (state.length) {
38
+ case 1: {
39
+ [x] = state;
40
+ break;
41
+ }
42
+ case 2: {
43
+ const [s0, s1] = state;
44
+ x = s0 < 0b1111_0000
45
+ ? ((s0 & 0b0000_1111) << 6) + (s1 & 0b0011_1111) + 0b0000_0100_0000_0000
46
+ : ((s0 & 0b0000_0111) << 6) + (s1 & 0b0011_1111) + 0b0000_0010_0000_0000;
47
+ break;
48
+ }
49
+ case 3: {
50
+ const [s0, s1, s2] = state;
51
+ x = ((s0 & 0b0000_0111) << 12) + ((s1 & 0b0011_1111) << 6) + (s2 & 0b0011_1111) + 0b1000_0000_0000_0000;
52
+ break;
53
+ }
54
+ default:
55
+ throw 'invalid state';
56
+ }
57
+ return x | errorMask;
58
+ };
59
+ const utf8ByteToCodePointOp = state => byte => {
60
+ if (byte < 0x00 || byte > 0xff) {
61
+ return [[errorMask], state];
62
+ }
63
+ if (state === null) {
64
+ if (byte < 0b1000_0000) {
65
+ return [[byte], null];
66
+ }
67
+ if (byte >= 0b1100_0010 && byte <= 0b1111_0100) {
68
+ return [[], [byte]];
69
+ }
70
+ return [[byte | errorMask], null];
71
+ }
72
+ if (byte >= 0b1000_0000 && byte < 0b1100_0000) {
73
+ switch (state.length) {
74
+ case 1: {
75
+ const [s0] = state;
76
+ if (s0 < 0b1110_0000) {
77
+ return [[((s0 & 0b0001_1111) << 6) + (byte & 0b0011_1111)], null];
78
+ }
79
+ if (s0 < 0b1111_1000) {
80
+ return [[], [s0, byte]];
81
+ }
82
+ break;
83
+ }
84
+ case 2: {
85
+ const [s0, s1] = state;
86
+ if (s0 < 0b1111_0000) {
87
+ return [[((s0 & 0b0000_1111) << 12) + ((s1 & 0b0011_1111) << 6) + (byte & 0b0011_1111)], null];
88
+ }
89
+ if (s0 < 0b1111_1000) {
90
+ return [[], [s0, s1, byte]];
91
+ }
92
+ break;
93
+ }
94
+ case 3: {
95
+ const [s0, s1, s2] = state;
96
+ return [[((s0 & 0b0000_0111) << 18) + ((s1 & 0b0011_1111) << 12) + ((s2 & 0b0011_1111) << 6) + (byte & 0b0011_1111)], null];
97
+ }
98
+ }
99
+ }
100
+ const error = utf8StateToError(state);
101
+ if (byte < 0b1000_0000) {
102
+ return [[error, byte], null];
103
+ }
104
+ if (byte >= 0b1100_0010 && byte <= 0b1111_0100) {
105
+ return [[error], [byte]];
106
+ }
107
+ return [[error, byte | errorMask], null];
108
+ };
109
+ const utf8EofToCodePointOp = state => [state === null ? null : [utf8StateToError(state)], null];
110
+ const utf8ByteOrEofToCodePointOp = state => input => input === null ? utf8EofToCodePointOp(state) : utf8ByteToCodePointOp(state)(input);
111
+ const eofList = [null];
112
+ export const toCodePointList = input => flat(stateScan(utf8ByteOrEofToCodePointOp)(null)(flat([input, eofList])));
@@ -0,0 +1,6 @@
1
+ declare const _default: {
2
+ toCodePoint: (() => void)[];
3
+ fromCodePointList: (() => void)[];
4
+ toFrom: (() => void)[];
5
+ };
6
+ export default _default;
@@ -0,0 +1,175 @@
1
+ import * as encoding from "./module.f.js";
2
+ import * as json from "../../json/module.f.js";
3
+ import * as o from "../../types/object/module.f.js";
4
+ const { sort } = o;
5
+ import * as list from "../../types/list/module.f.js";
6
+ const stringify = json.stringify(sort);
7
+ export default {
8
+ toCodePoint: [
9
+ () => {
10
+ const result = stringify(list.toArray(encoding.toCodePointList([-1, 256])));
11
+ if (result !== '[2147483648,2147483648]') {
12
+ throw result;
13
+ }
14
+ },
15
+ () => {
16
+ const result = stringify(list.toArray(encoding.toCodePointList([128, 193, 245, 255])));
17
+ if (result !== '[-2147483520,-2147483455,-2147483403,-2147483393]') {
18
+ throw result;
19
+ }
20
+ },
21
+ () => {
22
+ const result = stringify(list.toArray(encoding.toCodePointList([0, 1, 127])));
23
+ if (result !== '[0,1,127]') {
24
+ throw result;
25
+ }
26
+ },
27
+ () => {
28
+ const result = stringify(list.toArray(encoding.toCodePointList([194, 128, 194, 169, 223, 191])));
29
+ if (result !== '[128,169,2047]') {
30
+ throw result;
31
+ }
32
+ },
33
+ () => {
34
+ const result = stringify(list.toArray(encoding.toCodePointList([194, 194, 127, 194, 192, 194])));
35
+ if (result !== '[-2147483454,-2147483454,127,-2147483454,-2147483456,-2147483454]') {
36
+ throw result;
37
+ }
38
+ },
39
+ () => {
40
+ const result = stringify(list.toArray(encoding.toCodePointList([224, 160, 128, 224, 160, 129, 239, 191, 191])));
41
+ if (result !== '[2048,2049,65535]') {
42
+ throw result;
43
+ }
44
+ },
45
+ () => {
46
+ const result = stringify(list.toArray(encoding.toCodePointList([224, 224, 160, 127, 239, 191])));
47
+ if (result !== '[-2147483424,-2147482592,127,-2147481601]') {
48
+ throw result;
49
+ }
50
+ },
51
+ () => {
52
+ const result = stringify(list.toArray(encoding.toCodePointList([240, 144, 128, 128, 240, 144, 128, 129, 244, 143, 191, 191])));
53
+ if (result !== '[65536,65537,1114111]') {
54
+ throw result;
55
+ }
56
+ },
57
+ () => {
58
+ const result = stringify(list.toArray(encoding.toCodePointList([240, 240, 160, 127, 244, 191])));
59
+ if (result !== '[-2147483408,-2147483104,127,-2147482817]') {
60
+ throw result;
61
+ }
62
+ },
63
+ () => {
64
+ const result = stringify(list.toArray(encoding.toCodePointList([240, 160, 160, 244, 160, 160])));
65
+ if (result !== '[-2147448800,-2147432416]') {
66
+ throw result;
67
+ }
68
+ }
69
+ ],
70
+ fromCodePointList: [
71
+ () => {
72
+ const result = stringify(list.toArray(encoding.fromCodePointList([0, 1, 0x7F])));
73
+ if (result !== '[0,1,127]') {
74
+ throw result;
75
+ }
76
+ },
77
+ () => {
78
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x80])));
79
+ if (result !== '[194,128]') {
80
+ throw result;
81
+ }
82
+ },
83
+ () => {
84
+ const result = stringify(list.toArray(encoding.fromCodePointList([0xa9])));
85
+ if (result !== '[194,169]') {
86
+ throw result;
87
+ }
88
+ },
89
+ () => {
90
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x7ff])));
91
+ if (result !== '[223,191]') {
92
+ throw result;
93
+ }
94
+ },
95
+ () => {
96
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x800])));
97
+ if (result !== '[224,160,128]') {
98
+ throw result;
99
+ }
100
+ },
101
+ () => {
102
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x801])));
103
+ if (result !== '[224,160,129]') {
104
+ throw result;
105
+ }
106
+ },
107
+ () => {
108
+ const result = stringify(list.toArray(encoding.fromCodePointList([0xffff])));
109
+ if (result !== '[239,191,191]') {
110
+ throw result;
111
+ }
112
+ },
113
+ () => {
114
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x10000])));
115
+ if (result !== '[240,144,128,128]') {
116
+ throw result;
117
+ }
118
+ },
119
+ () => {
120
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x10001])));
121
+ if (result !== '[240,144,128,129]') {
122
+ throw result;
123
+ }
124
+ },
125
+ () => {
126
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x10FFFF])));
127
+ if (result !== '[244,143,191,191]') {
128
+ throw result;
129
+ }
130
+ },
131
+ () => {
132
+ const result = stringify(list.toArray(encoding.fromCodePointList([0x110000, 2147483648])));
133
+ if (result !== '[2147483648,2147483648]') {
134
+ throw result;
135
+ }
136
+ }
137
+ ],
138
+ toFrom: [
139
+ () => {
140
+ const codePointList = encoding.toCodePointList([128, 193, 245, 255]);
141
+ const result = stringify(list.toArray(encoding.fromCodePointList(codePointList)));
142
+ if (result !== '[128,193,245,255]') {
143
+ throw result;
144
+ }
145
+ },
146
+ () => {
147
+ const codePointList = encoding.toCodePointList([194, 194, 127, 194, 192, 194]);
148
+ const result = stringify(list.toArray(encoding.fromCodePointList(codePointList)));
149
+ if (result !== '[194,194,127,194,192,194]') {
150
+ throw result;
151
+ }
152
+ },
153
+ () => {
154
+ const codePointList = encoding.toCodePointList([224, 224, 160, 127, 239, 191]);
155
+ const result = stringify(list.toArray(encoding.fromCodePointList(codePointList)));
156
+ if (result !== '[224,224,160,127,239,191]') {
157
+ throw result;
158
+ }
159
+ },
160
+ () => {
161
+ const codePointList = encoding.toCodePointList([240, 240, 160, 127, 244, 191]);
162
+ const result = stringify(list.toArray(encoding.fromCodePointList(codePointList)));
163
+ if (result !== '[240,240,160,127,244,191]') {
164
+ throw result;
165
+ }
166
+ },
167
+ () => {
168
+ const codePointList = encoding.toCodePointList([240, 160, 160, 244, 160, 160]);
169
+ const result = stringify(list.toArray(encoding.fromCodePointList(codePointList)));
170
+ if (result !== '[240,160,160,244,160,160]') {
171
+ throw result;
172
+ }
173
+ }
174
+ ]
175
+ };
@@ -0,0 +1,21 @@
1
+ export type Array1<T> = readonly [T];
2
+ type Index1 = 0;
3
+ export type Array2<T> = readonly [T, T];
4
+ type Index2 = 0 | 1;
5
+ export type Array3<T> = readonly [T, T, T];
6
+ export type Index3 = 0 | 1 | 2;
7
+ export type Array4<T> = readonly [T, T, T, T];
8
+ type Index4 = 0 | 1 | 2 | 3;
9
+ export type Array5<T> = readonly [T, T, T, T, T];
10
+ export type Array8<T> = readonly [T, T, T, T, T, T, T, T];
11
+ export type Array16<T> = readonly [T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T];
12
+ export type Index5 = 0 | 1 | 2 | 3 | 4;
13
+ export type KeyOf<T> = T extends Array1<infer _> ? Index1 : T extends Array2<infer _> ? Index2 : T extends Array3<infer _> ? Index3 : T extends Array4<infer _> ? Index4 : T extends Array5<infer _> ? Index5 : T extends readonly (infer _)[] ? number : never;
14
+ export declare const at: (index: number) => <T>(a: readonly T[]) => T | null;
15
+ export declare const first: <T>(_: readonly T[]) => T | null;
16
+ export declare const last: <T>(_: readonly T[]) => T | null;
17
+ export declare const tail: <T>(_: readonly T[]) => readonly T[] | null;
18
+ export declare const splitFirst: <T>(a: readonly T[]) => readonly [T, readonly T[]] | null;
19
+ export declare const head: <T>(_: readonly T[]) => readonly T[] | null;
20
+ export declare const splitLast: <T>(_: readonly T[]) => readonly [readonly T[], T] | null;
21
+ export {};
@@ -0,0 +1,23 @@
1
+ import * as option from "../nullable/module.f.js";
2
+ const { map } = option;
3
+ const uncheckTail = a => a.slice(1);
4
+ const uncheckHead = a => a.slice(0, -1);
5
+ export const at = i => a => {
6
+ const r = a[i];
7
+ return r === void 0 ? null : r;
8
+ };
9
+ export const first = at(0);
10
+ export const last = a => at(a.length - 1)(a);
11
+ export const tail = a => a.length === 0 ? null : uncheckTail(a);
12
+ export const splitFirst = (a) => {
13
+ const split = first => [first, uncheckTail(a)];
14
+ return map(split)(first(a));
15
+ };
16
+ export const head = a => a.length === 0 ? null : uncheckHead(a);
17
+ export const splitLast = a => {
18
+ const lastA = last(a);
19
+ if (lastA === null) {
20
+ return null;
21
+ }
22
+ return [uncheckHead(a), lastA];
23
+ };
@@ -0,0 +1,10 @@
1
+ declare const _default: {
2
+ stringify: () => void;
3
+ at: (() => void)[];
4
+ first: (() => void)[];
5
+ last: (() => void)[];
6
+ head: (() => void)[];
7
+ tail: (() => void)[];
8
+ splitFirst: (() => void)[];
9
+ };
10
+ export default _default;
@@ -0,0 +1,116 @@
1
+ import * as _ from "./module.f.js";
2
+ import * as json from "../../json/module.f.js";
3
+ import * as o from "../object/module.f.js";
4
+ const { sort } = o;
5
+ const stringify = json.stringify(sort);
6
+ export default {
7
+ stringify: () => {
8
+ const result = stringify([1, 20, 300]);
9
+ if (result !== '[1,20,300]') {
10
+ throw result;
11
+ }
12
+ },
13
+ at: [
14
+ () => {
15
+ const result = _.at(2)([1, 20, 300]);
16
+ if (result !== 300) {
17
+ throw result;
18
+ }
19
+ },
20
+ () => {
21
+ const result = _.at(3)([1, 20, 300]);
22
+ if (result !== null) {
23
+ throw result;
24
+ }
25
+ }
26
+ ],
27
+ first: [
28
+ () => {
29
+ const result = _.first([1, 20, 300]);
30
+ if (result !== 1) {
31
+ throw result;
32
+ }
33
+ },
34
+ () => {
35
+ const result = _.first([]);
36
+ if (result !== null) {
37
+ throw result;
38
+ }
39
+ }
40
+ ],
41
+ last: [
42
+ () => {
43
+ const result = _.last([1, 20, 300]);
44
+ if (result !== 300) {
45
+ throw result;
46
+ }
47
+ },
48
+ () => {
49
+ const result = _.last([]);
50
+ if (result !== null) {
51
+ throw result;
52
+ }
53
+ }
54
+ ],
55
+ head: [
56
+ () => {
57
+ const result = _.head([1, 20, 300]);
58
+ if (result === null) {
59
+ throw result;
60
+ }
61
+ const str = stringify(result);
62
+ if (str !== '[1,20]') {
63
+ throw str;
64
+ }
65
+ },
66
+ () => {
67
+ const result = _.head([]);
68
+ if (result !== null) {
69
+ throw result;
70
+ }
71
+ }
72
+ ],
73
+ tail: [
74
+ () => {
75
+ const result = _.tail([1, 20, 300]);
76
+ const str = stringify(result);
77
+ if (str !== '[20,300]') {
78
+ throw str;
79
+ }
80
+ },
81
+ () => {
82
+ const result = _.tail([]);
83
+ if (result !== null) {
84
+ throw result;
85
+ }
86
+ }
87
+ ],
88
+ splitFirst: [
89
+ () => {
90
+ const result = _.splitFirst([1, 20, 300]);
91
+ const str = stringify(result);
92
+ if (str !== '[1,[20,300]]') {
93
+ throw str;
94
+ }
95
+ },
96
+ () => {
97
+ const result = _.splitFirst([]);
98
+ if (result !== null) {
99
+ throw result;
100
+ }
101
+ },
102
+ () => {
103
+ const result = _.splitLast([1, 20, 300]);
104
+ const str = stringify(result);
105
+ if (str !== '[[1,20],300]') {
106
+ throw str;
107
+ }
108
+ },
109
+ () => {
110
+ const result = _.splitLast([]);
111
+ if (result !== null) {
112
+ throw result;
113
+ }
114
+ }
115
+ ]
116
+ };
@@ -0,0 +1,3 @@
1
+ export type BigFloat = readonly [bigint, number];
2
+ export declare const multiply: (b: BigFloat) => (mul: bigint) => BigFloat;
3
+ export declare const decToBin: (dec: BigFloat) => BigFloat;
@@ -0,0 +1,66 @@
1
+ import * as bi from "../bigint/module.f.js";
2
+ const { abs, sign } = bi;
3
+ const twoPow53 = 9007199254740992n;
4
+ const twoPow54 = 18014398509481984n;
5
+ const increaseMantissa = ([m, e]) => min => {
6
+ if (m === 0n) {
7
+ return [m, e];
8
+ }
9
+ const s = sign(m);
10
+ m = abs(m);
11
+ while (true) {
12
+ if (m >= min) {
13
+ return [BigInt(s) * m, e];
14
+ }
15
+ m = m << 1n;
16
+ e--;
17
+ }
18
+ };
19
+ const decreaseMantissa = ([m, e]) => max => {
20
+ if (m === 0n) {
21
+ return [m, e];
22
+ }
23
+ const s = sign(m);
24
+ m = abs(m);
25
+ while (true) {
26
+ if (m < max) {
27
+ return [BigInt(s) * m, e];
28
+ }
29
+ m = m >> 1n;
30
+ e++;
31
+ }
32
+ };
33
+ const pow = base => exp => base ** BigInt(exp);
34
+ const pow5 = pow(5n);
35
+ export const multiply = ([m, e]) => mul => [m * mul, e];
36
+ const divide = ([m, e]) => div => [[m / div, e], m % div];
37
+ const round53 = ([[m, e], r]) => {
38
+ const mabs = abs(m);
39
+ const s = BigInt(sign(m));
40
+ const [m54, e54] = decreaseMantissa([mabs, e])(twoPow54);
41
+ const o54 = m54 & 1n;
42
+ const m53 = m54 >> 1n;
43
+ const e53 = e54 + 1;
44
+ if (o54 === 1n && r === 0n && mabs === m54 >> BigInt(e - e54)) {
45
+ const odd = m53 & 1n;
46
+ return multiply([m53 + odd, e53])(s);
47
+ }
48
+ return multiply([m53 + o54, e53])(s);
49
+ };
50
+ export const decToBin = dec => {
51
+ if (dec[0] === 0n) {
52
+ return [0n, 0];
53
+ }
54
+ if (dec[1] >= 0) {
55
+ const bin = [dec[0] * pow5(dec[1]), dec[1]];
56
+ const inc = increaseMantissa(bin)(twoPow53);
57
+ return round53([inc, 0n]);
58
+ }
59
+ const p = pow5(-dec[1]);
60
+ const [m, e] = increaseMantissa(dec)(p * twoPow53);
61
+ const mAbs = abs(m);
62
+ const s = BigInt(sign(m));
63
+ const qr = divide([mAbs, e])(p);
64
+ const r53 = round53(qr);
65
+ return multiply(r53)(s);
66
+ };