functionalscript 0.3.3 → 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 -196
  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 -222
  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 -13
  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
@@ -1,96 +1,116 @@
1
- import * as _ from './module.f.ts'
2
- import * as dev from '../../dev/module.f.ts'
3
- const { todo } = dev
4
- import * as json from '../../json/module.f.ts'
5
- import * as f from '../../types/function/module.f.ts'
6
- const { identity } = f
7
- import * as object from '../../types/object/module.f.ts'
8
- const { at } = object
9
- import * as Package from '../package/module.f.ts'
10
-
11
- const i
12
- : <T>(o: object.Map<T>) => (s: string) => T|null
13
- = o => s => at(s)(o)
14
-
15
- const stringify
16
- : (g: json.Unknown) => string
17
- = json.stringify(identity)
18
-
1
+ import * as _ from "./module.f.js";
2
+ import { todo } from "../../dev/module.f.js";
3
+ import * as json from "../../json/module.f.js";
4
+ import { identity } from "../../types/function/module.f.js";
5
+ import { at } from "../../types/object/module.f.js";
6
+ import * as Package from "../package/module.f.js";
7
+ const i = o => s => at(s)(o);
8
+ const stringify = json.stringify(identity);
19
9
  export default {
20
10
  0: () => {
21
- const result = _.parseLocal('')('./a')
22
- if (stringify(result) !== '{"external":false,"dir":false,"items":["a"]}') { throw result }
11
+ const result = _.parseLocal('')('./a');
12
+ if (stringify(result) !== '{"external":false,"dir":false,"items":["a"]}') {
13
+ throw result;
14
+ }
23
15
  },
24
16
  1: () => {
25
- const result = _.parseLocal('')('./a/')
26
- if (stringify(result) !== '{"external":false,"dir":true,"items":["a"]}') { throw result }
17
+ const result = _.parseLocal('')('./a/');
18
+ if (stringify(result) !== '{"external":false,"dir":true,"items":["a"]}') {
19
+ throw result;
20
+ }
27
21
  },
28
22
  2: () => {
29
- const result = _.parseLocal('')('..')
30
- if (result !== null) { throw result }
23
+ const result = _.parseLocal('')('..');
24
+ if (result !== null) {
25
+ throw result;
26
+ }
31
27
  },
32
28
  3: () => {
33
- const result = _.parseLocal('a')('')
34
- if (stringify(result) !== '{"external":true,"dir":true,"items":[]}') { throw result }
29
+ const result = _.parseLocal('a')('');
30
+ if (stringify(result) !== '{"external":true,"dir":true,"items":[]}') {
31
+ throw result;
32
+ }
35
33
  },
36
34
  4: () => {
37
- const result = _.parseLocal('')('./a/b/.././c')
38
- if (stringify(result) !== '{"external":false,"dir":false,"items":["a","c"]}') { throw result }
35
+ const result = _.parseLocal('')('./a/b/.././c');
36
+ if (stringify(result) !== '{"external":false,"dir":false,"items":["a","c"]}') {
37
+ throw result;
38
+ }
39
39
  },
40
40
  5: () => {
41
- const result = _.parseLocal('x/r')('./a/b/.././c')
42
- if (stringify(result) !== '{"external":false,"dir":false,"items":["x","r","a","c"]}') { throw result }
41
+ const result = _.parseLocal('x/r')('./a/b/.././c');
42
+ if (stringify(result) !== '{"external":false,"dir":false,"items":["x","r","a","c"]}') {
43
+ throw result;
44
+ }
43
45
  },
44
46
  6: () => {
45
- const result = _.parseLocal('a')('a/b/.././c')
46
- if (stringify(result) !== '{"external":true,"dir":false,"items":["a","c"]}') { throw result }
47
+ const result = _.parseLocal('a')('a/b/.././c');
48
+ if (stringify(result) !== '{"external":true,"dir":false,"items":["a","c"]}') {
49
+ throw result;
50
+ }
47
51
  },
48
52
  7: () => {
49
- const result = _.parseLocal('')('./x/..')
50
- if (stringify(result) !== '{"external":false,"dir":true,"items":[]}') { throw result }
53
+ const result = _.parseLocal('')('./x/..');
54
+ if (stringify(result) !== '{"external":false,"dir":true,"items":[]}') {
55
+ throw result;
56
+ }
51
57
  },
52
58
  8: {
53
- 0: () => { if (_.parseGlobal(() => null)(false)(['a', 'b']) !== null) { throw 'error' } },
54
- 1: () => { if (_.parseGlobal(() => null)(false)(['b']) !== null) { throw 'error' } },
55
- 2: () => { if (_.parseGlobal(i({ b: 'x' }))(false)(['d']) !== null) { throw 'error' } },
59
+ 0: () => { if (_.parseGlobal(() => null)(false)(['a', 'b']) !== null) {
60
+ throw 'error';
61
+ } },
62
+ 1: () => { if (_.parseGlobal(() => null)(false)(['b']) !== null) {
63
+ throw 'error';
64
+ } },
65
+ 2: () => { if (_.parseGlobal(i({ b: 'x' }))(false)(['d']) !== null) {
66
+ throw 'error';
67
+ } },
56
68
  3: () => {
57
- const result = stringify(_.parseGlobal(i({ b: 'x' }))(false)(['b']))
58
- if (result !== '{"package":"x","items":[],"dir":false}') { throw result }
69
+ const result = stringify(_.parseGlobal(i({ b: 'x' }))(false)(['b']));
70
+ if (result !== '{"package":"x","items":[],"dir":false}') {
71
+ throw result;
72
+ }
59
73
  },
60
- 4: () => { if (_.parseGlobal(i({ 'b/r': 'x' }))(false)(['b']) !== null) { throw 'error' } },
74
+ 4: () => { if (_.parseGlobal(i({ 'b/r': 'x' }))(false)(['b']) !== null) {
75
+ throw 'error';
76
+ } },
61
77
  5: () => {
62
- const result = stringify(_.parseGlobal(i({ 'b/r': 'x' }))(false)(['b', 'r']))
63
- if (result !== '{"package":"x","items":[],"dir":false}') { throw result }
78
+ const result = stringify(_.parseGlobal(i({ 'b/r': 'x' }))(false)(['b', 'r']));
79
+ if (result !== '{"package":"x","items":[],"dir":false}') {
80
+ throw result;
81
+ }
64
82
  },
65
83
  6: () => {
66
- const result = stringify(_.parseGlobal(i({ 'b/r': 'x' }))(false)(['b', 'r', 'd', 't']))
67
- if (result !== '{"package":"x","items":["d","t"],"dir":false}') { throw result }
84
+ const result = stringify(_.parseGlobal(i({ 'b/r': 'x' }))(false)(['b', 'r', 'd', 't']));
85
+ if (result !== '{"package":"x","items":["d","t"],"dir":false}') {
86
+ throw result;
87
+ }
68
88
  },
69
89
  7: () => {
70
- const result = stringify(_.parseGlobal(i({ 'b/r': 'x' }))(true)(['b', 'r', 'd', 't']))
71
- if (result !== '{"package":"x","items":["d","t"],"dir":true}') { throw result }
90
+ const result = stringify(_.parseGlobal(i({ 'b/r': 'x' }))(true)(['b', 'r', 'd', 't']));
91
+ if (result !== '{"package":"x","items":["d","t"],"dir":true}') {
92
+ throw result;
93
+ }
72
94
  },
73
95
  },
74
96
  9: () => {
75
- const packages
76
- : object.Map<Package.Package>
77
- = {
97
+ const packages = {
78
98
  '': {
79
99
  dependency: () => todo(),
80
100
  file: i({ 'a/c': 'return "a/c"' }),
81
101
  }
102
+ };
103
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('../c'));
104
+ if (result !== '{"id":{"package":"","path":["a","c"]},"source":"return \\"a/c\\""}') {
105
+ throw result;
82
106
  }
83
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('../c'))
84
- if (result !== '{"id":{"package":"","path":["a","c"]},"source":"return \\"a/c\\""}') { throw result }
85
107
  },
86
108
  10: () => {
87
- const packages
88
- : object.Map<Package.Package>
89
- = {
109
+ const packages = {
90
110
  '': {
91
111
  dependency: x => {
92
- const path = `node_modules/${x}`
93
- return at(path)(packages) !== null ? path : null
112
+ const path = `node_modules/${x}`;
113
+ return at(path)(packages) !== null ? path : null;
94
114
  },
95
115
  file: i({
96
116
  'index.js': 'return "index.js"',
@@ -102,46 +122,56 @@ export default {
102
122
  dependency: () => todo(),
103
123
  file: i({ 'a/c/index.js': 'return "a/c"' }),
104
124
  }
105
- }
125
+ };
106
126
  {
107
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('z/a/c'))
127
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('z/a/c'));
108
128
  if (result !== '{"id":{"package":"node_modules/z","path":["a","c","index.js"]},"source":"return \\"a/c\\""}') {
109
- throw result
129
+ throw result;
110
130
  }
111
131
  }
112
132
  {
113
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('../..'))
114
- if (result !== '{"id":{"package":"","path":["index.js"]},"source":"return \\"index.js\\""}') { throw result }
133
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('../..'));
134
+ if (result !== '{"id":{"package":"","path":["index.js"]},"source":"return \\"index.js\\""}') {
135
+ throw result;
136
+ }
115
137
  }
116
138
  {
117
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: [] })('./x'))
118
- if (result !== '{"id":{"package":"","path":["x.js"]},"source":"return \\"x.js\\""}') { throw result }
139
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: [] })('./x'));
140
+ if (result !== '{"id":{"package":"","path":["x.js"]},"source":"return \\"x.js\\""}') {
141
+ throw result;
142
+ }
119
143
  }
120
144
  {
121
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: [] })('./x.js'))
122
- if (result !== '{"id":{"package":"","path":["x.js"]},"source":"return \\"x.js\\""}') { throw result }
145
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: [] })('./x.js'));
146
+ if (result !== '{"id":{"package":"","path":["x.js"]},"source":"return \\"x.js\\""}') {
147
+ throw result;
148
+ }
123
149
  }
124
150
  {
125
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: [] })('./x/'))
126
- if (result !== '{"id":{"package":"","path":["x","index.js"]},"source":"return \\"x/index.js\\""}') { throw result }
151
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: [] })('./x/'));
152
+ if (result !== '{"id":{"package":"","path":["x","index.js"]},"source":"return \\"x/index.js\\""}') {
153
+ throw result;
154
+ }
127
155
  }
128
156
  {
129
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['x', 'a'] })('../'))
130
- if (result !== '{"id":{"package":"","path":["x","index.js"]},"source":"return \\"x/index.js\\""}') { throw result }
157
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['x', 'a'] })('../'));
158
+ if (result !== '{"id":{"package":"","path":["x","index.js"]},"source":"return \\"x/index.js\\""}') {
159
+ throw result;
160
+ }
131
161
  }
132
162
  {
133
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['x', 'a'] })('..'))
134
- if (result !== '{"id":{"package":"","path":["x","index.js"]},"source":"return \\"x/index.js\\""}') { throw result }
163
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['x', 'a'] })('..'));
164
+ if (result !== '{"id":{"package":"","path":["x","index.js"]},"source":"return \\"x/index.js\\""}') {
165
+ throw result;
166
+ }
135
167
  }
136
168
  },
137
169
  11: () => {
138
- const packages
139
- : object.Map<Package.Package>
140
- = {
170
+ const packages = {
141
171
  '': {
142
172
  dependency: x => {
143
- const path = `node_modules/${x}`
144
- return at(path)(packages) !== null ? path : null
173
+ const path = `node_modules/${x}`;
174
+ return at(path)(packages) !== null ? path : null;
145
175
  },
146
176
  file: todo
147
177
  },
@@ -152,24 +182,26 @@ export default {
152
182
  'c.js': 'return "c.js"'
153
183
  }),
154
184
  }
155
- }
185
+ };
156
186
  {
157
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('z/a/c'))
158
- if (result !== '{"id":{"package":"node_modules/z/a","path":["c.js"]},"source":"return \\"c.js\\""}') { throw result }
187
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('z/a/c'));
188
+ if (result !== '{"id":{"package":"node_modules/z/a","path":["c.js"]},"source":"return \\"c.js\\""}') {
189
+ throw result;
190
+ }
159
191
  }
160
192
  {
161
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('z/a/c/'))
162
- if (result !== '{"id":{"package":"node_modules/z/a","path":["c","index.js"]},"source":"return \\"c/index.js\\""}') { throw result }
193
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('z/a/c/'));
194
+ if (result !== '{"id":{"package":"node_modules/z/a","path":["c","index.js"]},"source":"return \\"c/index.js\\""}') {
195
+ throw result;
196
+ }
163
197
  }
164
198
  },
165
199
  12: () => {
166
- const packages
167
- : object.Map<Package.Package>
168
- = {
200
+ const packages = {
169
201
  '': {
170
202
  dependency: x => {
171
- const path = `node_modules/${x}`
172
- return at(path)(packages) !== null ? path : null
203
+ const path = `node_modules/${x}`;
204
+ return at(path)(packages) !== null ? path : null;
173
205
  },
174
206
  file: todo
175
207
  },
@@ -181,8 +213,10 @@ export default {
181
213
  'index.js': 'return "a/c"'
182
214
  }),
183
215
  }
216
+ };
217
+ const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('z/a/c'));
218
+ if (result !== '{"id":{"package":"node_modules/z/a/c","path":["index.js"]},"source":"return \\"a/c\\""}') {
219
+ throw result;
184
220
  }
185
- const result = stringify(_.parseAndFind(i(packages))({ package: '', path: ['a', 'b'] })('z/a/c'))
186
- if (result !== '{"id":{"package":"node_modules/z/a/c","path":["index.js"]},"source":"return \\"a/c\\""}') { throw result }
187
221
  }
188
- }
222
+ };
@@ -0,0 +1,43 @@
1
+ import * as Operator from '../../types/function/operator/module.f.ts';
2
+ type Reduce = Operator.Reduce<bigint>;
3
+ type Unary = Operator.Unary<bigint, bigint>;
4
+ /**
5
+ * A type representing a prime field and its associated operations.
6
+ */
7
+ export type PrimeField = {
8
+ readonly p: bigint;
9
+ readonly middle: bigint;
10
+ readonly max: bigint;
11
+ readonly neg: Unary;
12
+ readonly sub: Reduce;
13
+ readonly add: Reduce;
14
+ readonly abs: Unary;
15
+ readonly mul: Reduce;
16
+ readonly reciprocal: Unary;
17
+ readonly div: Reduce;
18
+ readonly pow: Reduce;
19
+ readonly pow2: Unary;
20
+ readonly pow3: Unary;
21
+ };
22
+ /**
23
+ * Creates a prime field with the specified prime modulus and associated operations.
24
+ *
25
+ * @param p - A prime number to define the field.
26
+ * @returns The prime field object.
27
+ */
28
+ export declare const prime_field: (p: bigint) => PrimeField;
29
+ /**
30
+ * Computes the square root of a number in a prime field.
31
+ *
32
+ * @throws If the prime modulus `p` does not satisfy `p % 4 == 3`.
33
+ *
34
+ * @example
35
+ *
36
+ * ```js
37
+ * const field = prime_field(7n);
38
+ * const root = sqrt(field)(4n);
39
+ * if (root !== 2n) { throw root }
40
+ * ```
41
+ */
42
+ export declare const sqrt: (f: PrimeField) => (a: bigint) => bigint | null;
43
+ export {};
@@ -0,0 +1,78 @@
1
+ import * as Operator from "../../types/function/operator/module.f.js";
2
+ import { scalar_mul } from "../../types/bigint/module.f.js";
3
+ /**
4
+ * Creates a prime field with the specified prime modulus and associated operations.
5
+ *
6
+ * @param p - A prime number to define the field.
7
+ * @returns The prime field object.
8
+ */
9
+ export const prime_field = p => {
10
+ const sub = a => b => {
11
+ const r = a - b;
12
+ return r < 0 ? r + p : r;
13
+ };
14
+ const mul = a => b => a * b % p;
15
+ const reciprocal = a => {
16
+ if (a === 0n) {
17
+ throw '1/0';
18
+ }
19
+ let a1 = a;
20
+ let a0 = p;
21
+ let f0 = 0n;
22
+ let f1 = 1n;
23
+ while (a1 !== 1n) {
24
+ const q = a0 / a1;
25
+ const a2 = a0 % a1;
26
+ a0 = a1;
27
+ a1 = a2;
28
+ const f2 = sub(f0)(mul(f1)(q));
29
+ f0 = f1;
30
+ f1 = f2;
31
+ }
32
+ return f1;
33
+ };
34
+ const middle = p >> 1n;
35
+ const pow2 = a => mul(a)(a);
36
+ const pow = scalar_mul({ 0: 1n, add: mul });
37
+ return {
38
+ p,
39
+ middle,
40
+ max: p - 1n,
41
+ neg: a => a === 0n ? 0n : p - a,
42
+ sub,
43
+ add: a => b => {
44
+ const r = a + b;
45
+ return r < p ? r : r - p;
46
+ },
47
+ abs: a => middle < a ? p - a : a,
48
+ mul,
49
+ reciprocal,
50
+ div: a => b => mul(a)(reciprocal(b)),
51
+ pow,
52
+ pow2,
53
+ pow3: a => mul(a)(pow2(a))
54
+ };
55
+ };
56
+ /**
57
+ * Computes the square root of a number in a prime field.
58
+ *
59
+ * @throws If the prime modulus `p` does not satisfy `p % 4 == 3`.
60
+ *
61
+ * @example
62
+ *
63
+ * ```js
64
+ * const field = prime_field(7n);
65
+ * const root = sqrt(field)(4n);
66
+ * if (root !== 2n) { throw root }
67
+ * ```
68
+ */
69
+ export const sqrt = ({ p, mul, pow }) => {
70
+ if ((p & 3n) !== 3n) {
71
+ throw 'sqrt';
72
+ }
73
+ const sqrt_k = (p + 1n) >> 2n;
74
+ return a => {
75
+ const result = pow(a)(sqrt_k);
76
+ return mul(result)(result) === a ? result : null;
77
+ };
78
+ };
@@ -0,0 +1,13 @@
1
+ declare const _default: {
2
+ prime_field_test: () => {
3
+ neg: () => void;
4
+ sub: () => void;
5
+ add: () => void;
6
+ mul: () => void;
7
+ reciprocal: () => void;
8
+ pow: () => void;
9
+ sqrtExample: () => void;
10
+ sqrt: () => void;
11
+ };
12
+ };
13
+ export default _default;
@@ -0,0 +1,149 @@
1
+ import { prime_field, sqrt } from "./module.f.js";
2
+ export default {
3
+ prime_field_test: () => {
4
+ const p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn;
5
+ const f = prime_field(p);
6
+ const sqrt_f = sqrt(f);
7
+ return {
8
+ neg: () => {
9
+ if (f.neg(0n) !== 0n) {
10
+ throw '-0';
11
+ }
12
+ if (f.neg(1n) !== p - 1n) {
13
+ throw '-1';
14
+ }
15
+ },
16
+ sub: () => {
17
+ if (f.sub(10n)(4n) !== 6n) {
18
+ throw '10 - 4';
19
+ }
20
+ if (f.sub(11n)(14n) !== p - 3n) {
21
+ throw '11 - 14';
22
+ }
23
+ },
24
+ add: () => {
25
+ if (f.add(13n)(24n) !== 37n) {
26
+ throw '13 + 24';
27
+ }
28
+ if (f.add(77n)(f.neg(12n)) !== 65n) {
29
+ throw '77 + (-12)';
30
+ }
31
+ },
32
+ mul: () => {
33
+ if (f.mul(100n)(0n) !== 0n) {
34
+ throw '100 * 0';
35
+ }
36
+ if (f.mul(101n)(205n) !== 20705n) {
37
+ throw '101 * 205';
38
+ }
39
+ if (f.mul(304n)(f.neg(1n)) !== f.neg(304n)) {
40
+ throw '304 * -1';
41
+ }
42
+ if (f.mul(f.neg(507n))(609n) !== f.neg(308763n)) {
43
+ throw '-507 * 609';
44
+ }
45
+ if (f.mul(f.neg(713n))(f.neg(825n)) !== 588225n) {
46
+ throw '-713 * -825';
47
+ }
48
+ },
49
+ reciprocal: () => {
50
+ let i = 1n;
51
+ while (i < 10000n) {
52
+ const x = f.reciprocal(i);
53
+ if (f.mul(x)(i) !== 1n) {
54
+ throw i;
55
+ }
56
+ ++i;
57
+ }
58
+ },
59
+ pow: () => {
60
+ const test = a => {
61
+ if (f.pow(a)(0n) !== 1n) {
62
+ throw '**0';
63
+ }
64
+ if (f.pow(a)(1n) !== a) {
65
+ throw '**1';
66
+ }
67
+ // https://en.wikipedia.org/wiki/Fermat%27s_little_theorem
68
+ // a^(p-1) % p = 1
69
+ if (f.abs(f.pow(a)(f.middle)) !== 1n) {
70
+ throw '**middle';
71
+ }
72
+ if (f.pow(a)(f.sub(f.max)(1n)) !== f.reciprocal(a)) {
73
+ throw '**(max-1)';
74
+ }
75
+ if (f.pow(a)(f.max) !== 1n) {
76
+ throw '**max';
77
+ }
78
+ };
79
+ // 0
80
+ if (f.pow(0n)(0n) !== 1n) {
81
+ throw '0**0';
82
+ }
83
+ if (f.pow(0n)(f.max) !== 0n) {
84
+ throw '0**max';
85
+ }
86
+ // 1
87
+ test(1n);
88
+ // 2
89
+ test(2n);
90
+ if (f.pow(2n)(2n) !== 4n) {
91
+ throw '2**2';
92
+ }
93
+ if (f.pow(2n)(3n) !== 8n) {
94
+ throw '2**3';
95
+ }
96
+ if (f.pow(2n)(128n) !== 1n << 128n) {
97
+ throw '2**128';
98
+ }
99
+ // 3
100
+ test(3n);
101
+ if (f.pow(3n)(2n) !== 9n) {
102
+ throw '3**2';
103
+ }
104
+ if (f.pow(3n)(3n) !== 27n) {
105
+ throw '3**3';
106
+ }
107
+ if (f.pow(3n)(100n) !== 3n ** 100n) {
108
+ throw '3**100';
109
+ }
110
+ if (f.pow(3n)(110n) !== 3n ** 110n) {
111
+ throw '3**110';
112
+ }
113
+ if (f.pow(3n)(120n) !== 3n ** 120n) {
114
+ throw '3**120';
115
+ }
116
+ if (f.pow(3n)(121n) !== 3n ** 121n) {
117
+ throw '3**121';
118
+ }
119
+ //
120
+ test(f.middle);
121
+ test(f.max - 1n);
122
+ test(f.max);
123
+ },
124
+ sqrtExample: () => {
125
+ const field = prime_field(7n);
126
+ const root = sqrt(field)(4n);
127
+ if (root !== 2n) {
128
+ throw root;
129
+ }
130
+ },
131
+ sqrt: () => {
132
+ const test = a => {
133
+ const a2 = f.mul(a)(a);
134
+ const s = sqrt_f(a2);
135
+ if (s !== null && f.abs(s) !== f.abs(a)) {
136
+ throw 'sqrt';
137
+ }
138
+ };
139
+ let i = 1n;
140
+ while (i < 1000n) {
141
+ test(i);
142
+ ++i;
143
+ }
144
+ test(f.middle);
145
+ test(f.max);
146
+ }
147
+ };
148
+ }
149
+ };
@@ -0,0 +1,68 @@
1
+ import * as Operator from '../../types/function/operator/module.f.ts';
2
+ import { type PrimeField } from '../prime_field/module.f.ts';
3
+ /**
4
+ * A 2D point represented as a pair of `bigint` values `[x, y]`.
5
+ */
6
+ type Point2D = readonly [bigint, bigint];
7
+ /**
8
+ * A 2D point on an elliptic curve, represented as a pair of `bigint` values.
9
+ * `null` represents the point at infinity (`O`).
10
+ */
11
+ export type Point = Point2D | null;
12
+ /**
13
+ * Initialization parameters for an elliptic curve.
14
+ */
15
+ export type Init = {
16
+ readonly p: bigint;
17
+ readonly a: readonly [bigint, bigint];
18
+ readonly g: readonly [bigint, bigint];
19
+ readonly n: bigint;
20
+ };
21
+ /**
22
+ * Represents an elliptic curve and its associated operations.
23
+ */
24
+ type Curve = {
25
+ readonly pf: PrimeField;
26
+ readonly nf: PrimeField;
27
+ readonly y2: (x: bigint) => bigint;
28
+ readonly y: (x: bigint) => bigint | null;
29
+ readonly neg: (a: Point) => Point;
30
+ readonly add: Operator.Reduce<Point>;
31
+ readonly mul: (a: Point) => (n: bigint) => Point;
32
+ };
33
+ /**
34
+ * Constructs an elliptic curve with the given initialization parameters.
35
+ *
36
+ * @example
37
+ *
38
+ * ```js
39
+ * const curveParams = {
40
+ * p: 23n,
41
+ * a: [0n, 1n],
42
+ * g: [1n, 1n],
43
+ * n: 19n
44
+ * };
45
+ * const curveInstance = curve(curveParams);
46
+ *
47
+ * // Access curve operations
48
+ * const point = curveInstance.add([1n, 1n])([2n, 5n]); // Add two points
49
+ * const negPoint = curveInstance.neg([1n, 1n]); // Negate a point
50
+ * const mulPoint = curveInstance.mul([1n, 1n])(3n); // Multiply a point by 3
51
+ * ```
52
+ */
53
+ export declare const curve: (i: Init) => Curve;
54
+ export declare const eq: (a: Point) => (b: Point) => boolean;
55
+ /**
56
+ * https://neuromancer.sk/std/secg/secp192r1
57
+ */
58
+ export declare const secp192r1: Init;
59
+ /**
60
+ * https://en.bitcoin.it/wiki/Secp256k1
61
+ * https://neuromancer.sk/std/secg/secp256k1
62
+ */
63
+ export declare const secp256k1: Init;
64
+ /**
65
+ * https://neuromancer.sk/std/secg/secp256r1
66
+ */
67
+ export declare const secp256r1: Init;
68
+ export {};