functionalscript 0.2.0 → 0.2.2

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,114 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as _ from '../types/module.f.mjs';
3
+ import * as btreeFind from '../find/module.f.mjs';
4
+ const { find } = btreeFind;
5
+ import * as Cmp from '../../function/compare/module.f.mjs';
6
+ import * as list from '../../list/module.f.mjs';
7
+ const { fold } = list;
8
+ /**
9
+ * @template T
10
+ * @typedef {_.Branch1<T> | _.Branch3<T>} Branch1To3
11
+ */
12
+ /** @type {<T>(b: _.Branch5<T> | _.Branch7<T>) => Branch1To3<T>} */
13
+ const b57 = b => b.length === 5 ? [b] : [[b[0], b[1], b[2]], b[3], [b[4], b[5], b[6]]];
14
+ /** @type {<T>(i: btreeFind.PathItem<T>) => (a: Branch1To3<T>) => Branch1To3<T>} */
15
+ const reduceOp = ([i, x]) => a => {
16
+ switch (i) {
17
+ case 0: {
18
+ switch (x.length) {
19
+ case 3: {
20
+ return [[...a, x[1], x[2]]];
21
+ }
22
+ case 5: {
23
+ return b57([...a, x[1], x[2], x[3], x[4]]);
24
+ }
25
+ }
26
+ }
27
+ case 2: {
28
+ switch (x.length) {
29
+ case 3: {
30
+ return [[x[0], x[1], ...a]];
31
+ }
32
+ case 5: {
33
+ return b57([x[0], x[1], ...a, x[3], x[4]]);
34
+ }
35
+ }
36
+ }
37
+ case 4: {
38
+ return b57([x[0], x[1], x[2], x[3], ...a]);
39
+ }
40
+ }
41
+ };
42
+ const reduceBranch = fold(reduceOp);
43
+ /** @type {<T>(c: Cmp.Compare<T>) => (g: (value: T | null) => T) => (node: _.Node<T>) => _.Node<T>} */
44
+ const nodeSet = c => g => node => {
45
+ const { first, tail } = find(c)(node);
46
+ const [i, x] = first;
47
+ /** @typedef {typeof c extends Cmp.Compare<infer T> ? T : never} T */
48
+ /** @type {() => Branch1To3<T>} */
49
+ const f = () => {
50
+ switch (i) {
51
+ case 0: {
52
+ // insert
53
+ const value = g(null);
54
+ switch (x.length) {
55
+ case 1: {
56
+ return [[value, x[0]]];
57
+ }
58
+ case 2: {
59
+ return [[value], x[0], [x[1]]];
60
+ }
61
+ }
62
+ }
63
+ case 1: {
64
+ // replace
65
+ switch (x.length) {
66
+ case 1: {
67
+ return [[g(x[0])]];
68
+ }
69
+ case 2: {
70
+ return [[g(x[0]), x[1]]];
71
+ }
72
+ case 3: {
73
+ return [[x[0], g(x[1]), x[2]]];
74
+ }
75
+ case 5: {
76
+ return [[x[0], g(x[1]), x[2], x[3], x[4]]];
77
+ }
78
+ }
79
+ }
80
+ case 2: {
81
+ // insert
82
+ const value = g(null);
83
+ switch (x.length) {
84
+ case 1: {
85
+ return [[x[0], value]];
86
+ }
87
+ case 2: {
88
+ return [[x[0]], value, [x[1]]];
89
+ }
90
+ }
91
+ }
92
+ case 3: {
93
+ // replace
94
+ switch (x.length) {
95
+ case 2: {
96
+ return [[x[0], g(x[1])]];
97
+ }
98
+ case 5: {
99
+ return [[x[0], x[1], x[2], g(x[3]), x[4]]];
100
+ }
101
+ }
102
+ }
103
+ case 4: {
104
+ // insert
105
+ const [v0, v1] = x;
106
+ return [[v0], v1, [g(null)]];
107
+ }
108
+ }
109
+ };
110
+ const r = reduceBranch(f())(tail);
111
+ return r.length === 1 ? r[0] : r;
112
+ };
113
+ /** @type {<T>(c: Cmp.Compare<T>) => (f: (value: T|null) => T) => (tree: _.Tree<T>) => _.Node<T>} */
114
+ export const set = c => f => tree => tree === null ? [f(null)] : nodeSet(c)(f)(tree);
@@ -0,0 +1,390 @@
1
+ import * as _ from './module.f.mjs';
2
+ import * as BTree from '../types/module.f.mjs';
3
+ import * as s from '../../string/module.f.mjs';
4
+ const { cmp } = s;
5
+ import * as json from '../../../json/module.f.mjs';
6
+ import * as o from '../../object/module.f.mjs';
7
+ const { sort } = o;
8
+ /** @type {(node: BTree.Node<string>) => (value: string) => BTree.Node<string>} */
9
+ const set = node => value => _.set(cmp(value))(() => value)(node);
10
+ const jsonStr = json.stringify(sort);
11
+ const test = [
12
+ () => {
13
+ /** @type {BTree.Node<string>} */
14
+ let _map = ['1'];
15
+ for (let i = 2; i <= 10; i++)
16
+ _map = set(_map)((i * i).toString());
17
+ const r = jsonStr(_map);
18
+ if (r !== '[[["1","100"],"16",["25","36"]],"4",[["49"],"64",["81","9"]]]') {
19
+ throw r;
20
+ }
21
+ },
22
+ () => {
23
+ /** @type {BTree.Node<string>} */
24
+ let _map = ['1'];
25
+ for (let i = 2; i <= 11; i++)
26
+ _map = set(_map)((i * i).toString());
27
+ const r = jsonStr(_map);
28
+ if (r !== '[[["1"],"100",["121"],"16",["25","36"]],"4",[["49"],"64",["81","9"]]]') {
29
+ throw r;
30
+ }
31
+ },
32
+ () => {
33
+ /** @type {BTree.Node<string>} */
34
+ let _map = ['1'];
35
+ for (let i = 2; i <= 12; i++)
36
+ _map = set(_map)((i * i).toString());
37
+ const r = jsonStr(_map);
38
+ if (r !== '[[["1"],"100",["121","144"],"16",["25","36"]],"4",[["49"],"64",["81","9"]]]') {
39
+ throw r;
40
+ }
41
+ },
42
+ () => {
43
+ /** @type {BTree.Node<string>} */
44
+ let _map = ['1'];
45
+ for (let i = 2; i <= 13; i++)
46
+ _map = set(_map)((i * i).toString());
47
+ const r = jsonStr(_map);
48
+ if (r !== '[[["1"],"100",["121","144"]],"16",[["169"],"25",["36"]],"4",[["49"],"64",["81","9"]]]') {
49
+ throw r;
50
+ }
51
+ },
52
+ () => {
53
+ /** @type {BTree.Node<string>} */
54
+ let _map = ['1'];
55
+ for (let i = 2; i <= 14; i++)
56
+ _map = set(_map)((i * i).toString());
57
+ const r = jsonStr(_map);
58
+ if (r !== '[[["1"],"100",["121","144"]],"16",[["169","196"],"25",["36"]],"4",[["49"],"64",["81","9"]]]') {
59
+ throw r;
60
+ }
61
+ },
62
+ () => {
63
+ /** @type {BTree.Node<string>} */
64
+ let _map = ['1'];
65
+ for (let i = 2; i <= 15; i++)
66
+ _map = set(_map)((i * i).toString());
67
+ const r = jsonStr(_map);
68
+ if (r !== '[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"],"25",["36"]],"4",[["49"],"64",["81","9"]]]') {
69
+ throw r;
70
+ }
71
+ },
72
+ () => {
73
+ /** @type {BTree.Node<string>} */
74
+ let _map = ['1'];
75
+ for (let i = 2; i <= 16; i++)
76
+ _map = set(_map)((i * i).toString());
77
+ const r = jsonStr(_map);
78
+ if (r !== '[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"],"25",["256","36"]],"4",[["49"],"64",["81","9"]]]') {
79
+ throw r;
80
+ }
81
+ },
82
+ () => {
83
+ /** @type {BTree.Node<string>} */
84
+ let _map = ['1'];
85
+ for (let i = 2; i <= 17; i++)
86
+ _map = set(_map)((i * i).toString());
87
+ const r = jsonStr(_map);
88
+ if (r !== '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],"25",[[["256"],"289",["36"]],"4",[["49"],"64",["81","9"]]]]') {
89
+ throw r;
90
+ }
91
+ },
92
+ () => {
93
+ /** @type {BTree.Node<string>} */
94
+ let _map = ['1'];
95
+ for (let i = 2; i <= 18; i++)
96
+ _map = set(_map)((i * i).toString());
97
+ const r = jsonStr(_map);
98
+ if (r !==
99
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],"25",[[["256"],"289",["324","36"]],"4",[["49"],"64",["81","9"]]]]') {
100
+ throw r;
101
+ }
102
+ },
103
+ () => {
104
+ /** @type {BTree.Node<string>} */
105
+ let _map = ['1'];
106
+ for (let i = 2; i <= 19; i++)
107
+ _map = set(_map)((i * i).toString());
108
+ const r = jsonStr(_map);
109
+ if (r !==
110
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],"25",[[["256"],"289",["324"],"36",["361"]],"4",[["49"],"64",["81","9"]]]]') {
111
+ throw r;
112
+ }
113
+ },
114
+ () => {
115
+ /** @type {BTree.Node<string>} */
116
+ let _map = ['1'];
117
+ for (let i = 2; i <= 20; i++)
118
+ _map = set(_map)((i * i).toString());
119
+ const r = jsonStr(_map);
120
+ if (r !==
121
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
122
+ '"25",' +
123
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400","49"],"64",["81","9"]]]]') {
124
+ throw r;
125
+ }
126
+ },
127
+ () => {
128
+ /** @type {BTree.Node<string>} */
129
+ let _map = ['1'];
130
+ for (let i = 2; i <= 21; i++)
131
+ _map = set(_map)((i * i).toString());
132
+ const r = jsonStr(_map);
133
+ if (r !==
134
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
135
+ '"25",' +
136
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["49"],"64",["81","9"]]]]') {
137
+ throw r;
138
+ }
139
+ },
140
+ () => {
141
+ /** @type {BTree.Node<string>} */
142
+ let _map = ['1'];
143
+ for (let i = 2; i <= 22; i++)
144
+ _map = set(_map)((i * i).toString());
145
+ const r = jsonStr(_map);
146
+ if (r !==
147
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
148
+ '"25",' +
149
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484","49"],"64",["81","9"]]]]') {
150
+ throw r;
151
+ }
152
+ },
153
+ () => {
154
+ /** @type {BTree.Node<string>} */
155
+ let _map = ['1'];
156
+ for (let i = 2; i <= 23; i++)
157
+ _map = set(_map)((i * i).toString());
158
+ const r = jsonStr(_map);
159
+ if (r !==
160
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
161
+ '"25",' +
162
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]],"49",[["529"],"64",["81","9"]]]]') {
163
+ throw r;
164
+ }
165
+ },
166
+ () => {
167
+ /** @type {BTree.Node<string>} */
168
+ let _map = ['1'];
169
+ for (let i = 2; i <= 24; i++)
170
+ _map = set(_map)((i * i).toString());
171
+ const r = jsonStr(_map);
172
+ if (r !==
173
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
174
+ '"25",' +
175
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]],"49",[["529","576"],"64",["81","9"]]]]') {
176
+ throw r;
177
+ }
178
+ },
179
+ () => {
180
+ /** @type {BTree.Node<string>} */
181
+ let _map = ['1'];
182
+ for (let i = 2; i <= 25; i++)
183
+ _map = set(_map)((i * i).toString());
184
+ const r = jsonStr(_map);
185
+ if (r !==
186
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
187
+ '"25",' +
188
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]],"49",[["529"],"576",["625"],"64",["81","9"]]]]') {
189
+ throw r;
190
+ }
191
+ },
192
+ () => {
193
+ /** @type {BTree.Node<string>} */
194
+ let _map = ['1'];
195
+ for (let i = 2; i <= 26; i++)
196
+ _map = set(_map)((i * i).toString());
197
+ const r = jsonStr(_map);
198
+ if (r !==
199
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
200
+ '"25",' +
201
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
202
+ '"49",' +
203
+ '[[["529"],"576",["625"]],"64",[["676"],"81",["9"]]]]') {
204
+ throw r;
205
+ }
206
+ },
207
+ () => {
208
+ /** @type {BTree.Node<string>} */
209
+ let _map = ['1'];
210
+ for (let i = 2; i <= 27; i++)
211
+ _map = set(_map)((i * i).toString());
212
+ const r = jsonStr(_map);
213
+ if (r !==
214
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
215
+ '"25",' +
216
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
217
+ '"49",' +
218
+ '[[["529"],"576",["625"]],"64",[["676","729"],"81",["9"]]]]') {
219
+ throw r;
220
+ }
221
+ },
222
+ () => {
223
+ /** @type {BTree.Node<string>} */
224
+ let _map = ['1'];
225
+ for (let i = 2; i <= 28; i++)
226
+ _map = set(_map)((i * i).toString());
227
+ const r = jsonStr(_map);
228
+ if (r !==
229
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
230
+ '"25",' +
231
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
232
+ '"49",' +
233
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"],"81",["9"]]]]') {
234
+ throw r;
235
+ }
236
+ },
237
+ () => {
238
+ /** @type {BTree.Node<string>} */
239
+ let _map = ['1'];
240
+ for (let i = 2; i <= 29; i++)
241
+ _map = set(_map)((i * i).toString());
242
+ const r = jsonStr(_map);
243
+ if (r !==
244
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
245
+ '"25",' +
246
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
247
+ '"49",' +
248
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"],"81",["841","9"]]]]') {
249
+ throw r;
250
+ }
251
+ },
252
+ () => {
253
+ /** @type {BTree.Node<string>} */
254
+ let _map = ['1'];
255
+ for (let i = 2; i <= 30; i++)
256
+ _map = set(_map)((i * i).toString());
257
+ const r = jsonStr(_map);
258
+ if (r !==
259
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
260
+ '"25",' +
261
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
262
+ '"49",' +
263
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900"]]]]') {
264
+ throw r;
265
+ }
266
+ },
267
+ () => {
268
+ /** @type {BTree.Node<string>} */
269
+ let _map = ['1'];
270
+ for (let i = 2; i <= 31; i++)
271
+ _map = set(_map)((i * i).toString());
272
+ const r = jsonStr(_map);
273
+ if (r !==
274
+ '[[[["1"],"100",["121","144"]],"16",[["169"],"196",["225"]]],' +
275
+ '"25",' +
276
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
277
+ '"49",' +
278
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900","961"]]]]') {
279
+ throw r;
280
+ }
281
+ },
282
+ () => {
283
+ /** @type {BTree.Node<string>} */
284
+ let _map = ['1'];
285
+ for (let i = 2; i <= 32; i++)
286
+ _map = set(_map)((i * i).toString());
287
+ const r = jsonStr(_map);
288
+ if (r !==
289
+ '[[[["1"],"100",["1024"],"121",["144"]],"16",[["169"],"196",["225"]]],' +
290
+ '"25",' +
291
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
292
+ '"49",' +
293
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900","961"]]]]') {
294
+ throw r;
295
+ }
296
+ },
297
+ () => {
298
+ /** @type {BTree.Node<string>} */
299
+ let _map = ['1'];
300
+ for (let i = 2; i <= 33; i++)
301
+ _map = set(_map)((i * i).toString());
302
+ const r = jsonStr(_map);
303
+ if (r !==
304
+ '[[[["1"],"100",["1024","1089"],"121",["144"]],"16",[["169"],"196",["225"]]],' +
305
+ '"25",' +
306
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
307
+ '"49",' +
308
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900","961"]]]]') {
309
+ throw r;
310
+ }
311
+ },
312
+ () => {
313
+ /** @type {BTree.Node<string>} */
314
+ let _map = ['1'];
315
+ for (let i = 2; i <= 34; i++)
316
+ _map = set(_map)((i * i).toString());
317
+ const r = jsonStr(_map);
318
+ if (r !==
319
+ '[[[["1"],"100",["1024"]],"1089",[["1156"],"121",["144"]],"16",[["169"],"196",["225"]]],' +
320
+ '"25",' +
321
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
322
+ '"49",' +
323
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900","961"]]]]') {
324
+ throw r;
325
+ }
326
+ },
327
+ () => {
328
+ /** @type {BTree.Node<string>} */
329
+ let _map = ['1'];
330
+ for (let i = 2; i <= 35; i++)
331
+ _map = set(_map)((i * i).toString());
332
+ const r = jsonStr(_map);
333
+ if (r !==
334
+ '[[[["1"],"100",["1024"]],"1089",[["1156"],"121",["1225","144"]],"16",[["169"],"196",["225"]]],' +
335
+ '"25",' +
336
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
337
+ '"49",' +
338
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900","961"]]]]') {
339
+ throw r;
340
+ }
341
+ },
342
+ () => {
343
+ /** @type {BTree.Node<string>} */
344
+ let _map = ['1'];
345
+ for (let i = 2; i <= 36; i++)
346
+ _map = set(_map)((i * i).toString());
347
+ const r = jsonStr(_map);
348
+ if (r !==
349
+ '[[[["1"],"100",["1024"]],"1089",[["1156"],"121",["1225"],"1296",["144"]],"16",[["169"],"196",["225"]]],' +
350
+ '"25",' +
351
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
352
+ '"49",' +
353
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900","961"]]]]') {
354
+ throw r;
355
+ }
356
+ },
357
+ () => {
358
+ /** @type {BTree.Node<string>} */
359
+ let _map = ['1'];
360
+ for (let i = 2; i <= 37; i++)
361
+ _map = set(_map)((i * i).toString());
362
+ const r = jsonStr(_map);
363
+ if (r !==
364
+ '[[[["1"],"100",["1024"]],"1089",[["1156"],"121",["1225"],"1296",["1369","144"]],"16",[["169"],"196",["225"]]],' +
365
+ '"25",' +
366
+ '[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
367
+ '"49",' +
368
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900","961"]]]]') {
369
+ throw r;
370
+ }
371
+ },
372
+ () => {
373
+ /** @type {BTree.Node<string>} */
374
+ let _map = ['1'];
375
+ for (let i = 2; i <= 38; i++)
376
+ _map = set(_map)((i * i).toString());
377
+ const r = jsonStr(_map);
378
+ if (r !==
379
+ '[[[[["1"],"100",["1024"]],"1089",[["1156"],"121",["1225"]]],' +
380
+ '"1296",' +
381
+ '[[["1369"],"144",["1444"]],"16",[["169"],"196",["225"]]]],' +
382
+ '"25",' +
383
+ '[[[["256"],"289",["324"],"36",["361"]],"4",[["400"],"441",["484"]]],' +
384
+ '"49",' +
385
+ '[[["529"],"576",["625"]],"64",[["676"],"729",["784"]],"81",[["841"],"9",["900","961"]]]]]') {
386
+ throw r;
387
+ }
388
+ }
389
+ ];
390
+ export default test;
@@ -0,0 +1,83 @@
1
+ import * as BTree from './types/module.f.mjs';
2
+ import * as _ from './module.f.mjs';
3
+ const { values } = _;
4
+ import * as json from '../../json/module.f.mjs';
5
+ import * as o from '../object/module.f.mjs';
6
+ const { sort } = o;
7
+ import * as str from '../string/module.f.mjs';
8
+ const { cmp } = str;
9
+ import * as list from '../list/module.f.mjs';
10
+ import * as s from './set/module.f.mjs';
11
+ import * as f from './find/module.f.mjs';
12
+ const jsonStr = json.stringify(sort);
13
+ /** @type {(sequence: list.List<json.Unknown>) => string} */
14
+ const stringify = sequence => jsonStr(list.toArray(sequence));
15
+ /** @type {(node: BTree.Node<string>) => (value: string) => BTree.Node<string>} */
16
+ const set = node => value => s.set(cmp(value))(() => value)(node);
17
+ const valueTest1 = () => {
18
+ /** @type {BTree.Node<string>} */
19
+ let _map = ['a'];
20
+ _map = set(_map)('b');
21
+ _map = set(_map)('c');
22
+ _map = set(_map)('d');
23
+ _map = set(_map)('e');
24
+ _map = set(_map)('f');
25
+ let result = stringify(values(_map));
26
+ if (result !== '["a","b","c","d","e","f"]') {
27
+ throw result;
28
+ }
29
+ };
30
+ const valuesTest2 = () => {
31
+ /** @type {BTree.Node<string>} */
32
+ let _map = ['1'];
33
+ for (let i = 2; i <= 10; i++)
34
+ _map = set(_map)((i * i).toString());
35
+ let result = stringify(values(_map));
36
+ if (result !== '["1","100","16","25","36","4","49","64","81","9"]') {
37
+ throw result;
38
+ }
39
+ };
40
+ const findTrue = () => {
41
+ /** @type {BTree.Node<string>} */
42
+ let _map = ['a'];
43
+ _map = set(_map)('b');
44
+ _map = set(_map)('c');
45
+ const result = f.value(f.find(cmp('b'))(_map).first);
46
+ if (result !== 'b') {
47
+ throw result;
48
+ }
49
+ };
50
+ const find = () => {
51
+ /** @type {BTree.Node<string>} */
52
+ let _map = ['a'];
53
+ _map = set(_map)('b');
54
+ _map = set(_map)('c');
55
+ const result = f.value(f.find(cmp('e'))(_map).first);
56
+ if (result !== null) {
57
+ throw result;
58
+ }
59
+ };
60
+ const test = () => {
61
+ /** @type {BTree.Node<string>} */
62
+ let _map = ['a'];
63
+ _map = set(_map)('b');
64
+ _map = set(_map)('c');
65
+ _map = set(_map)('d');
66
+ _map = set(_map)('e');
67
+ _map = set(_map)('f');
68
+ //
69
+ {
70
+ /** @type {list.Result<string>} */
71
+ let _item = list.next(values(_map));
72
+ while (_item !== null) {
73
+ _item = list.next(_item.tail);
74
+ }
75
+ }
76
+ };
77
+ export default {
78
+ valueTest1,
79
+ valuesTest2,
80
+ findTrue,
81
+ find,
82
+ test,
83
+ };
@@ -0,0 +1,50 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ export {};
3
+ /**
4
+ * @template T
5
+ * @typedef {readonly[T]} Array1
6
+ */
7
+ /**
8
+ * @template T
9
+ * @typedef {readonly[T,T]} Array2
10
+ */
11
+ /**
12
+ * @template T
13
+ * @typedef {readonly[T,T,T]} Array3
14
+ */
15
+ /** @typedef {0|1} Index2 */
16
+ /** @typedef {0|1|2} Index3 */
17
+ /** @typedef {0|1|2|3|4} Index5 */
18
+ //
19
+ /**
20
+ * @template T
21
+ * @typedef {Array1<T>} Leaf1
22
+ */
23
+ /**
24
+ * @template T
25
+ * @typedef {Array2<T>} Leaf2
26
+ */
27
+ /**
28
+ * @template T
29
+ * @typedef {readonly [Node<T>, T, Node<T>]} Branch3
30
+ */
31
+ /**
32
+ * @template T
33
+ * @typedef {readonly [Node<T>, T, Node<T>, T, Node<T>]} Branch5
34
+ */
35
+ /**
36
+ * @template T
37
+ * @typedef { Leaf1<T> | Leaf2<T> | Branch3<T> | Branch5<T>} Node
38
+ */
39
+ /**
40
+ * @template T
41
+ * @typedef {Node<T> | null} Tree
42
+ */
43
+ /**
44
+ * @template T
45
+ * @typedef {readonly[Node<T>]} Branch1
46
+ */
47
+ /**
48
+ * @template T
49
+ * @typedef { readonly[...Branch5<T>, T, Node<T>] } Branch7
50
+ */
@@ -0,0 +1,42 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as f from '../function/module.f.mjs';
3
+ const { compose } = f;
4
+ import * as RangeMap from '../range_map/module.f.mjs';
5
+ import * as SortedSet from '../sorted_set/module.f.mjs';
6
+ import * as list from '../list/module.f.mjs';
7
+ const { reverse, countdown, flat, map } = list;
8
+ /** @typedef {bigint} ByteSet */
9
+ /** @typedef {number} Byte */
10
+ /** @type {(n: Byte) => (s: ByteSet) => boolean} */
11
+ export const has = n => s => ((s >> BigInt(n)) & 1n) === 1n;
12
+ // create a set
13
+ export const empty = 0n;
14
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
15
+ export const universe = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn;
16
+ /** @type {(n: Byte) => ByteSet} */
17
+ export const one = n => 1n << BigInt(n);
18
+ /** @type {(r: readonly[Byte, Byte]) => ByteSet} */
19
+ export const range = ([b, e]) => one(e - b + 1) - 1n << BigInt(b);
20
+ // set operations
21
+ /** @type {(a: ByteSet) => (b: ByteSet) => ByteSet} */
22
+ export const union = a => b => a | b;
23
+ /** @type {(a: ByteSet) => (b: ByteSet) => ByteSet} */
24
+ const intersect = a => b => a & b;
25
+ /** @type {(n: ByteSet) => ByteSet} */
26
+ export const complement = n => universe ^ n;
27
+ /** @type {(a: ByteSet) => (b: ByteSet) => ByteSet} */
28
+ const difference = compose(intersect)(compose(complement));
29
+ // additional operations
30
+ export const set = compose(one)(union);
31
+ export const setRange = compose(range)(union);
32
+ /** @type {(n: Byte) => (s: ByteSet) => ByteSet} */
33
+ export const unset = n => s => difference(s)(one(n));
34
+ const counter = reverse(countdown(256));
35
+ /** @type {(n: ByteSet) => (s: string) => (i: number) => RangeMap.RangeMap<SortedSet.SortedSet<string>>} */
36
+ const toRangeMapOp = n => s => i => {
37
+ const current = has(i + 1)(n);
38
+ const prev = has(i)(n);
39
+ return current === prev ? null : [[prev ? [s] : [], i]];
40
+ };
41
+ /** @type {(n: ByteSet) => (s: string) => RangeMap.RangeMap<SortedSet.SortedSet<string>>} */
42
+ export const toRangeMap = n => s => flat(map(toRangeMapOp(n)(s))(counter));