functionalscript 0.2.0 → 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 (248) hide show
  1. package/dev/module.mjs +1 -1
  2. package/jsr.json +59 -59
  3. package/out/com/cpp/module.f.mjs +123 -0
  4. package/out/com/cpp/test.f.mjs +40 -0
  5. package/out/com/cpp/testlib.f.mjs +7 -0
  6. package/out/com/cs/module.f.mjs +95 -0
  7. package/out/com/cs/test.f.mjs +43 -0
  8. package/out/com/cs/testlib.f.mjs +7 -0
  9. package/out/com/rust/module.f.mjs +213 -0
  10. package/out/com/rust/test.f.mjs +123 -0
  11. package/out/com/rust/testlib.f.mjs +7 -0
  12. package/out/com/test/build.f.mjs +98 -0
  13. package/out/com/test/build.mjs +40 -0
  14. package/out/com/types/module.f.mjs +51 -0
  15. package/out/com/types/testlib.f.mjs +30 -0
  16. package/out/commonjs/build/module.f.mjs +107 -0
  17. package/out/commonjs/build/test.f.mjs +102 -0
  18. package/out/commonjs/module/function/module.f.mjs +15 -0
  19. package/out/commonjs/module/module.f.mjs +48 -0
  20. package/out/commonjs/module.f.mjs +10 -0
  21. package/out/commonjs/module.mjs +26 -0
  22. package/out/commonjs/package/dependencies/module.f.mjs +21 -0
  23. package/out/commonjs/package/dependencies/test.f.mjs +15 -0
  24. package/out/commonjs/package/module.f.mjs +40 -0
  25. package/out/commonjs/package/test.f.mjs +27 -0
  26. package/out/commonjs/path/module.f.mjs +171 -0
  27. package/out/commonjs/path/test.f.mjs +231 -0
  28. package/out/commonjs/test.mjs +87 -0
  29. package/out/dev/index.mjs +2 -0
  30. package/out/dev/module.f.mjs +2 -0
  31. package/out/dev/module.mjs +167 -0
  32. package/out/dev/test/module.f.mjs +134 -0
  33. package/out/dev/test.f.mjs +58 -0
  34. package/out/dev/test.mjs +52 -0
  35. package/out/djs/module.f.mjs +75 -0
  36. package/out/djs/parser/module.f.mjs +432 -0
  37. package/out/djs/parser/test.f.mjs +535 -0
  38. package/out/djs/test.f.mjs +84 -0
  39. package/out/djs/tokenizer/module.f.mjs +87 -0
  40. package/out/djs/tokenizer/test.f.mjs +480 -0
  41. package/out/fsc/module.f.mjs +105 -0
  42. package/out/fsc/test.f.mjs +19 -0
  43. package/out/fsm/module.f.mjs +80 -0
  44. package/out/fsm/test.f.mjs +138 -0
  45. package/out/html/module.f.mjs +94 -0
  46. package/out/html/test.f.mjs +45 -0
  47. package/out/issues/test.f.mjs +66 -0
  48. package/out/js/tokenizer/module.f.mjs +686 -0
  49. package/out/js/tokenizer/test.f.mjs +844 -0
  50. package/out/json/module.f.mjs +89 -0
  51. package/out/json/parser/module.f.mjs +224 -0
  52. package/out/json/parser/test.f.mjs +321 -0
  53. package/out/json/serializer/module.f.mjs +67 -0
  54. package/out/json/serializer/test.f.mjs +87 -0
  55. package/out/json/test.f.mjs +61 -0
  56. package/out/json/tokenizer/module.f.mjs +78 -0
  57. package/out/json/tokenizer/test.f.mjs +420 -0
  58. package/out/nanvm-lib/tests/test.f.mjs +87 -0
  59. package/out/nodejs/version/main.mjs +3 -0
  60. package/out/nodejs/version/module.f.mjs +34 -0
  61. package/out/nodejs/version/test.f.mjs +97 -0
  62. package/out/prime_field/module.f.mjs +87 -0
  63. package/out/prime_field/test.f.mjs +145 -0
  64. package/out/secp/module.f.mjs +113 -0
  65. package/out/secp/test.f.mjs +63 -0
  66. package/out/sha2/module.f.mjs +172 -0
  67. package/out/sha2/test.f.mjs +86 -0
  68. package/out/text/ascii/module.f.mjs +154 -0
  69. package/out/text/ascii/test.f.mjs +14 -0
  70. package/out/text/module.f.mjs +19 -0
  71. package/out/text/sgr/module.f.mjs +17 -0
  72. package/out/text/test.f.mjs +19 -0
  73. package/out/text/utf16/module.f.mjs +86 -0
  74. package/out/text/utf16/test.f.mjs +145 -0
  75. package/out/text/utf8/module.f.mjs +126 -0
  76. package/out/text/utf8/test.f.mjs +175 -0
  77. package/out/types/array/module.f.mjs +95 -0
  78. package/out/types/array/test.f.mjs +116 -0
  79. package/out/types/bigfloat/module.f.mjs +77 -0
  80. package/out/types/bigfloat/test.f.mjs +349 -0
  81. package/out/types/bigint/module.f.mjs +114 -0
  82. package/out/types/bigint/test.f.mjs +192 -0
  83. package/out/types/btree/find/module.f.mjs +137 -0
  84. package/out/types/btree/find/test.f.mjs +156 -0
  85. package/out/types/btree/module.f.mjs +34 -0
  86. package/out/types/btree/remove/module.f.mjs +209 -0
  87. package/out/types/btree/remove/test.f.mjs +638 -0
  88. package/out/types/btree/set/module.f.mjs +114 -0
  89. package/out/types/btree/set/test.f.mjs +390 -0
  90. package/out/types/btree/test.f.mjs +83 -0
  91. package/out/types/btree/types/module.f.mjs +50 -0
  92. package/out/types/byte_set/module.f.mjs +42 -0
  93. package/out/types/byte_set/test.f.mjs +123 -0
  94. package/out/types/function/compare/module.f.mjs +22 -0
  95. package/out/types/function/compare/test.f.mjs +8 -0
  96. package/out/types/function/module.f.mjs +44 -0
  97. package/out/types/function/operator/module.f.mjs +60 -0
  98. package/out/types/function/test.f.mjs +15 -0
  99. package/out/types/list/module.f.mjs +269 -0
  100. package/out/types/list/test.f.mjs +401 -0
  101. package/out/types/map/module.f.mjs +54 -0
  102. package/out/types/map/test.f.mjs +115 -0
  103. package/out/types/nibble_set/module.f.mjs +19 -0
  104. package/out/types/nibble_set/test.f.mjs +90 -0
  105. package/out/types/nullable/module.f.mjs +9 -0
  106. package/out/types/nullable/test.f.mjs +12 -0
  107. package/out/types/number/module.f.mjs +12 -0
  108. package/out/types/number/test.f.mjs +126 -0
  109. package/out/types/object/module.f.mjs +27 -0
  110. package/out/types/object/test.f.mjs +17 -0
  111. package/out/types/range/module.f.mjs +6 -0
  112. package/out/types/range/test.f.mjs +18 -0
  113. package/out/types/range_map/module.f.mjs +84 -0
  114. package/out/types/range_map/test.f.mjs +201 -0
  115. package/out/types/result/module.f.mjs +25 -0
  116. package/out/types/result/module.mjs +16 -0
  117. package/out/types/sorted_list/module.f.mjs +102 -0
  118. package/out/types/sorted_list/test.f.mjs +66 -0
  119. package/out/types/sorted_set/module.f.mjs +29 -0
  120. package/out/types/sorted_set/test.f.mjs +80 -0
  121. package/out/types/string/module.f.mjs +17 -0
  122. package/out/types/string/test.f.mjs +58 -0
  123. package/out/types/string_set/module.f.mjs +29 -0
  124. package/out/types/string_set/test.f.mjs +65 -0
  125. package/package.json +5 -4
  126. package/tsconfig.json +2 -2
  127. /package/{com → out/com}/cpp/module.f.d.mts +0 -0
  128. /package/{com → out/com}/cpp/test.f.d.mts +0 -0
  129. /package/{com → out/com}/cpp/testlib.f.d.mts +0 -0
  130. /package/{com → out/com}/cs/module.f.d.mts +0 -0
  131. /package/{com → out/com}/cs/test.f.d.mts +0 -0
  132. /package/{com → out/com}/cs/testlib.f.d.mts +0 -0
  133. /package/{com → out/com}/rust/module.f.d.mts +0 -0
  134. /package/{com → out/com}/rust/test.f.d.mts +0 -0
  135. /package/{com → out/com}/rust/testlib.f.d.mts +0 -0
  136. /package/{com → out/com}/test/build.d.mts +0 -0
  137. /package/{com → out/com}/test/build.f.d.mts +0 -0
  138. /package/{com → out/com}/types/module.f.d.mts +0 -0
  139. /package/{com → out/com}/types/testlib.f.d.mts +0 -0
  140. /package/{commonjs → out/commonjs}/build/module.f.d.mts +0 -0
  141. /package/{commonjs → out/commonjs}/build/test.f.d.mts +0 -0
  142. /package/{commonjs → out/commonjs}/module/function/module.f.d.mts +0 -0
  143. /package/{commonjs → out/commonjs}/module/module.f.d.mts +0 -0
  144. /package/{commonjs → out/commonjs}/module.d.mts +0 -0
  145. /package/{commonjs → out/commonjs}/module.f.d.mts +0 -0
  146. /package/{commonjs → out/commonjs}/package/dependencies/module.f.d.mts +0 -0
  147. /package/{commonjs → out/commonjs}/package/dependencies/test.f.d.mts +0 -0
  148. /package/{commonjs → out/commonjs}/package/module.f.d.mts +0 -0
  149. /package/{commonjs → out/commonjs}/package/test.f.d.mts +0 -0
  150. /package/{commonjs → out/commonjs}/path/module.f.d.mts +0 -0
  151. /package/{commonjs → out/commonjs}/path/test.f.d.mts +0 -0
  152. /package/{commonjs → out/commonjs}/test.d.mts +0 -0
  153. /package/{dev → out/dev}/index.d.mts +0 -0
  154. /package/{dev → out/dev}/module.d.mts +0 -0
  155. /package/{dev → out/dev}/module.f.d.mts +0 -0
  156. /package/{dev → out/dev}/test/module.f.d.mts +0 -0
  157. /package/{dev → out/dev}/test.d.mts +0 -0
  158. /package/{dev → out/dev}/test.f.d.mts +0 -0
  159. /package/{djs → out/djs}/module.f.d.mts +0 -0
  160. /package/{djs → out/djs}/parser/module.f.d.mts +0 -0
  161. /package/{djs → out/djs}/parser/test.f.d.mts +0 -0
  162. /package/{djs → out/djs}/test.f.d.mts +0 -0
  163. /package/{djs → out/djs}/tokenizer/module.f.d.mts +0 -0
  164. /package/{djs → out/djs}/tokenizer/test.f.d.mts +0 -0
  165. /package/{fsc → out/fsc}/module.f.d.mts +0 -0
  166. /package/{fsc → out/fsc}/test.f.d.mts +0 -0
  167. /package/{fsm → out/fsm}/module.f.d.mts +0 -0
  168. /package/{fsm → out/fsm}/test.f.d.mts +0 -0
  169. /package/{html → out/html}/module.f.d.mts +0 -0
  170. /package/{html → out/html}/test.f.d.mts +0 -0
  171. /package/{issues → out/issues}/test.f.d.mts +0 -0
  172. /package/{js → out/js}/tokenizer/module.f.d.mts +0 -0
  173. /package/{js → out/js}/tokenizer/test.f.d.mts +0 -0
  174. /package/{json → out/json}/module.f.d.mts +0 -0
  175. /package/{json → out/json}/parser/module.f.d.mts +0 -0
  176. /package/{json → out/json}/parser/test.f.d.mts +0 -0
  177. /package/{json → out/json}/serializer/module.f.d.mts +0 -0
  178. /package/{json → out/json}/serializer/test.f.d.mts +0 -0
  179. /package/{json → out/json}/test.f.d.mts +0 -0
  180. /package/{json → out/json}/tokenizer/module.f.d.mts +0 -0
  181. /package/{json → out/json}/tokenizer/test.f.d.mts +0 -0
  182. /package/{nanvm-lib → out/nanvm-lib}/tests/test.f.d.mts +0 -0
  183. /package/{nodejs → out/nodejs}/version/main.d.mts +0 -0
  184. /package/{nodejs → out/nodejs}/version/module.f.d.mts +0 -0
  185. /package/{nodejs → out/nodejs}/version/test.f.d.mts +0 -0
  186. /package/{prime_field → out/prime_field}/module.f.d.mts +0 -0
  187. /package/{prime_field → out/prime_field}/test.f.d.mts +0 -0
  188. /package/{secp → out/secp}/module.f.d.mts +0 -0
  189. /package/{secp → out/secp}/test.f.d.mts +0 -0
  190. /package/{sha2 → out/sha2}/module.f.d.mts +0 -0
  191. /package/{sha2 → out/sha2}/test.f.d.mts +0 -0
  192. /package/{text → out/text}/ascii/module.f.d.mts +0 -0
  193. /package/{text → out/text}/ascii/test.f.d.mts +0 -0
  194. /package/{text → out/text}/module.f.d.mts +0 -0
  195. /package/{text → out/text}/sgr/module.f.d.mts +0 -0
  196. /package/{text → out/text}/test.f.d.mts +0 -0
  197. /package/{text → out/text}/utf16/module.f.d.mts +0 -0
  198. /package/{text → out/text}/utf16/test.f.d.mts +0 -0
  199. /package/{text → out/text}/utf8/module.f.d.mts +0 -0
  200. /package/{text → out/text}/utf8/test.f.d.mts +0 -0
  201. /package/{types → out/types}/array/module.f.d.mts +0 -0
  202. /package/{types → out/types}/array/test.f.d.mts +0 -0
  203. /package/{types → out/types}/bigfloat/module.f.d.mts +0 -0
  204. /package/{types → out/types}/bigfloat/test.f.d.mts +0 -0
  205. /package/{types → out/types}/bigint/module.f.d.mts +0 -0
  206. /package/{types → out/types}/bigint/test.f.d.mts +0 -0
  207. /package/{types → out/types}/btree/find/module.f.d.mts +0 -0
  208. /package/{types → out/types}/btree/find/test.f.d.mts +0 -0
  209. /package/{types → out/types}/btree/module.f.d.mts +0 -0
  210. /package/{types → out/types}/btree/remove/module.f.d.mts +0 -0
  211. /package/{types → out/types}/btree/remove/test.f.d.mts +0 -0
  212. /package/{types → out/types}/btree/set/module.f.d.mts +0 -0
  213. /package/{types → out/types}/btree/set/test.f.d.mts +0 -0
  214. /package/{types → out/types}/btree/test.f.d.mts +0 -0
  215. /package/{types → out/types}/btree/types/module.f.d.mts +0 -0
  216. /package/{types → out/types}/byte_set/module.f.d.mts +0 -0
  217. /package/{types → out/types}/byte_set/test.f.d.mts +0 -0
  218. /package/{types → out/types}/function/compare/module.f.d.mts +0 -0
  219. /package/{types → out/types}/function/compare/test.f.d.mts +0 -0
  220. /package/{types → out/types}/function/module.f.d.mts +0 -0
  221. /package/{types → out/types}/function/operator/module.f.d.mts +0 -0
  222. /package/{types → out/types}/function/test.f.d.mts +0 -0
  223. /package/{types → out/types}/list/module.f.d.mts +0 -0
  224. /package/{types → out/types}/list/test.f.d.mts +0 -0
  225. /package/{types → out/types}/map/module.f.d.mts +0 -0
  226. /package/{types → out/types}/map/test.f.d.mts +0 -0
  227. /package/{types → out/types}/nibble_set/module.f.d.mts +0 -0
  228. /package/{types → out/types}/nibble_set/test.f.d.mts +0 -0
  229. /package/{types → out/types}/nullable/module.f.d.mts +0 -0
  230. /package/{types → out/types}/nullable/test.f.d.mts +0 -0
  231. /package/{types → out/types}/number/module.f.d.mts +0 -0
  232. /package/{types → out/types}/number/test.f.d.mts +0 -0
  233. /package/{types → out/types}/object/module.f.d.mts +0 -0
  234. /package/{types → out/types}/object/test.f.d.mts +0 -0
  235. /package/{types → out/types}/range/module.f.d.mts +0 -0
  236. /package/{types → out/types}/range/test.f.d.mts +0 -0
  237. /package/{types → out/types}/range_map/module.f.d.mts +0 -0
  238. /package/{types → out/types}/range_map/test.f.d.mts +0 -0
  239. /package/{types → out/types}/result/module.d.mts +0 -0
  240. /package/{types → out/types}/result/module.f.d.mts +0 -0
  241. /package/{types → out/types}/sorted_list/module.f.d.mts +0 -0
  242. /package/{types → out/types}/sorted_list/test.f.d.mts +0 -0
  243. /package/{types → out/types}/sorted_set/module.f.d.mts +0 -0
  244. /package/{types → out/types}/sorted_set/test.f.d.mts +0 -0
  245. /package/{types → out/types}/string/module.f.d.mts +0 -0
  246. /package/{types → out/types}/string/test.f.d.mts +0 -0
  247. /package/{types → out/types}/string_set/module.f.d.mts +0 -0
  248. /package/{types → out/types}/string_set/test.f.d.mts +0 -0
@@ -0,0 +1,175 @@
1
+ import * as encoding from './module.f.mjs';
2
+ import * as json from '../../json/module.f.mjs';
3
+ import * as o from '../../types/object/module.f.mjs';
4
+ const { sort } = o;
5
+ import * as list from '../../types/list/module.f.mjs';
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,95 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as option from '../nullable/module.f.mjs';
3
+ const { map } = option;
4
+ /**
5
+ * @template T
6
+ * @typedef {readonly[T]} Array1
7
+ */
8
+ /** @typedef {0} Index1 */
9
+ /**
10
+ * @template T
11
+ * @typedef {readonly[T, T]} Array2
12
+ */
13
+ /**
14
+ * @template T0
15
+ * @template T1
16
+ * @typedef {readonly[T0, T1]} Tuple2
17
+ */
18
+ /** @typedef {0|1} Index2 */
19
+ /**
20
+ * @template T
21
+ * @typedef {readonly[T, T, T]} Array3
22
+ */
23
+ /**
24
+ * @template T0
25
+ * @template T1
26
+ * @template T2
27
+ * @typedef {readonly[T0, T1, T2]} Tuple3
28
+ */
29
+ /** @typedef {0|1|2} Index3 */
30
+ /**
31
+ * @template T
32
+ * @typedef {readonly[T, T, T, T]} Array4
33
+ */
34
+ /** @typedef {0|1|2|3} Index4 */
35
+ /**
36
+ * @template T
37
+ * @typedef {readonly[T, T, T, T, T]} Array5
38
+ */
39
+ /**
40
+ * @template T
41
+ * @typedef {readonly[T, T, T, T, T, T, T, T]} Array8
42
+ */
43
+ /**
44
+ * @template T
45
+ * @typedef {readonly[T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T]} Array16
46
+ */
47
+ /** @typedef {0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15} Index16 */
48
+ /**
49
+ * @template T
50
+ * @typedef {Array1<T>| Array2<T> | Array3<T> | Array4<T> | Array5<T>} Array1_5
51
+ */
52
+ /** @typedef {0|1|2|3|4} Index5 */
53
+ /**
54
+ * @template T
55
+ * @typedef {T extends Array1<infer _> ? Index1 :
56
+ * T extends Array2<infer _> ? Index2 :
57
+ * T extends Array3<infer _> ? Index3 :
58
+ * T extends Array4<infer _> ? Index4 :
59
+ * T extends Array5<infer _> ? Index5 :
60
+ * T extends readonly (infer _)[] ? number :
61
+ * never
62
+ * } KeyOf
63
+ */
64
+ /** @type {<T>(_: readonly T[]) => readonly T[]} */
65
+ const uncheckTail = a => a.slice(1);
66
+ /** @type {<T>(_: readonly T[]) => readonly T[]} */
67
+ const uncheckHead = a => a.slice(0, -1);
68
+ /** @type {(index: number) => <T>(a: readonly T[]) => T|null} */
69
+ export const at = i => a => {
70
+ const r = a[i];
71
+ return r === void 0 ? null : r;
72
+ };
73
+ /** @type {<T>(_: readonly T[]) => T|null} */
74
+ export const first = at(0);
75
+ /** @type {<T>(_: readonly T[]) => T|null} */
76
+ export const last = a => at(a.length - 1)(a);
77
+ /** @type {<T>(_: readonly T[]) => readonly T[] | null} */
78
+ export const tail = a => a.length === 0 ? null : uncheckTail(a);
79
+ /** @type {<T>(_: readonly T[]) => readonly[T, readonly T[]]|null} */
80
+ export const splitFirst = a => {
81
+ /** @typedef {typeof a[0]} T*/
82
+ /** @type {(_: T) => readonly[T, readonly T[]]} */
83
+ const split = first => [first, uncheckTail(a)];
84
+ return map(split)(first(a));
85
+ };
86
+ /** @type {<T>(_: readonly T[]) => readonly T[]|null} */
87
+ export const head = a => a.length === 0 ? null : uncheckHead(a);
88
+ /** @type {<T>(_: readonly T[]) => readonly[readonly T[], T]|null} */
89
+ export const splitLast = a => {
90
+ const lastA = last(a);
91
+ if (lastA === null) {
92
+ return null;
93
+ }
94
+ return [uncheckHead(a), lastA];
95
+ };
@@ -0,0 +1,116 @@
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
+ 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,77 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as bi from '../bigint/module.f.mjs';
3
+ const { abs, sign } = bi;
4
+ /** @typedef {readonly[bigint,number]} BigFloat */
5
+ /** @typedef {readonly[BigFloat,bigint]} BigFloatWithRemainder */
6
+ const twoPow53 = 9007199254740992n;
7
+ const twoPow54 = 18014398509481984n;
8
+ /** @type {(value: BigFloat) => (min: bigint) => BigFloat} */
9
+ const increaseMantissa = ([m, e]) => min => {
10
+ if (m === 0n) {
11
+ return [m, e];
12
+ }
13
+ const s = sign(m);
14
+ m = abs(m);
15
+ while (true) {
16
+ if (m >= min) {
17
+ return [BigInt(s) * m, e];
18
+ }
19
+ m = m << 1n;
20
+ e--;
21
+ }
22
+ };
23
+ /** @type {(value: BigFloat) => (max: bigint) => BigFloat} */
24
+ const decreaseMantissa = ([m, e]) => max => {
25
+ if (m === 0n) {
26
+ return [m, e];
27
+ }
28
+ const s = sign(m);
29
+ m = abs(m);
30
+ while (true) {
31
+ if (m < max) {
32
+ return [BigInt(s) * m, e];
33
+ }
34
+ m = m >> 1n;
35
+ e++;
36
+ }
37
+ };
38
+ /** @type {(base: bigint) => (exp: number) => bigint} */
39
+ const pow = base => exp => base ** BigInt(exp);
40
+ const pow5 = pow(5n);
41
+ /** @type {(b: BigFloat) => (mul: bigint) => BigFloat} */
42
+ export const multiply = ([m, e]) => mul => [m * mul, e];
43
+ /** @type {(b: BigFloat) => (div: bigint) => BigFloatWithRemainder} */
44
+ const divide = ([m, e]) => div => [[m / div, e], m % div];
45
+ /** @type {(b: BigFloatWithRemainder) => BigFloat} */
46
+ const round53 = ([[m, e], r]) => {
47
+ const mabs = abs(m);
48
+ const s = BigInt(sign(m));
49
+ const [m54, e54] = decreaseMantissa([mabs, e])(twoPow54);
50
+ const o54 = m54 & 1n;
51
+ const m53 = m54 >> 1n;
52
+ const e53 = e54 + 1;
53
+ if (o54 === 1n && r === 0n && mabs === m54 >> BigInt(e - e54)) {
54
+ const odd = m53 & 1n;
55
+ return multiply([m53 + odd, e53])(s);
56
+ }
57
+ return multiply([m53 + o54, e53])(s);
58
+ };
59
+ /** @type {(dec: BigFloat) => BigFloat} */
60
+ export const decToBin = dec => {
61
+ if (dec[0] === 0n) {
62
+ return [0n, 0];
63
+ }
64
+ if (dec[1] >= 0) {
65
+ /** @type {BigFloat} */
66
+ const bin = [dec[0] * pow5(dec[1]), dec[1]];
67
+ const inc = increaseMantissa(bin)(twoPow53);
68
+ return round53([inc, 0n]);
69
+ }
70
+ const p = pow5(-dec[1]);
71
+ const [m, e] = increaseMantissa(dec)(p * twoPow53);
72
+ const mAbs = abs(m);
73
+ const s = BigInt(sign(m));
74
+ const qr = divide([mAbs, e])(p);
75
+ const r53 = round53(qr);
76
+ return multiply(r53)(s);
77
+ };