functionalscript 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/com/cpp/module.f.d.ts +10 -0
  2. package/com/cpp/module.f.js +107 -0
  3. package/com/cpp/test.f.d.ts +2 -0
  4. package/com/cpp/{test.f.ts → test.f.js} +9 -11
  5. package/com/cpp/testlib.f.d.ts +2 -0
  6. package/com/cpp/testlib.f.js +5 -0
  7. package/com/cs/module.f.d.ts +12 -0
  8. package/com/cs/module.f.js +80 -0
  9. package/com/cs/test.f.d.ts +2 -0
  10. package/com/cs/{test.f.ts → test.f.js} +9 -11
  11. package/com/cs/testlib.f.d.ts +2 -0
  12. package/com/cs/testlib.f.js +5 -0
  13. package/com/rust/module.f.d.ts +15 -0
  14. package/com/rust/module.f.js +169 -0
  15. package/com/rust/test.f.d.ts +2 -0
  16. package/com/rust/{test.f.ts → test.f.js} +7 -7
  17. package/com/rust/testlib.f.d.ts +2 -0
  18. package/com/rust/testlib.f.js +5 -0
  19. package/com/test/build.f.d.ts +20 -0
  20. package/com/test/build.f.js +58 -0
  21. package/com/types/module.f.d.ts +28 -0
  22. package/com/types/module.f.js +8 -0
  23. package/com/types/testlib.f.d.ts +44 -0
  24. package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
  25. package/commonjs/build/module.f.d.ts +6 -0
  26. package/commonjs/build/module.f.js +69 -0
  27. package/commonjs/build/test.f.d.ts +2 -0
  28. package/commonjs/build/test.f.js +96 -0
  29. package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
  30. package/commonjs/module/function/module.f.js +4 -0
  31. package/commonjs/module/module.f.d.ts +18 -0
  32. package/commonjs/module/module.f.js +12 -0
  33. package/commonjs/module.f.d.ts +6 -0
  34. package/commonjs/module.f.js +1 -0
  35. package/commonjs/package/dependencies/module.f.d.ts +7 -0
  36. package/commonjs/package/dependencies/module.f.js +13 -0
  37. package/commonjs/package/dependencies/test.f.d.ts +2 -0
  38. package/commonjs/package/dependencies/test.f.js +15 -0
  39. package/commonjs/package/module.f.d.ts +17 -0
  40. package/commonjs/package/module.f.js +18 -0
  41. package/commonjs/package/test.f.d.ts +2 -0
  42. package/commonjs/package/test.f.js +27 -0
  43. package/commonjs/path/module.f.d.ts +24 -0
  44. package/commonjs/path/module.f.js +114 -0
  45. package/commonjs/path/test.f.d.ts +25 -0
  46. package/commonjs/path/{test.f.ts → test.f.js} +123 -89
  47. package/crypto/prime_field/module.f.d.ts +43 -0
  48. package/crypto/prime_field/module.f.js +78 -0
  49. package/crypto/prime_field/test.f.d.ts +13 -0
  50. package/crypto/prime_field/test.f.js +149 -0
  51. package/crypto/secp/module.f.d.ts +68 -0
  52. package/crypto/secp/module.f.js +127 -0
  53. package/crypto/secp/test.f.d.ts +5 -0
  54. package/crypto/secp/test.f.js +72 -0
  55. package/crypto/sha2/module.f.d.ts +13 -0
  56. package/crypto/sha2/module.f.js +145 -0
  57. package/crypto/sha2/test.f.d.ts +9 -0
  58. package/crypto/sha2/test.f.js +82 -0
  59. package/dev/module.f.d.ts +1 -0
  60. package/dev/module.f.js +1 -0
  61. package/dev/test/module.f.d.ts +20 -0
  62. package/dev/test/module.f.js +75 -0
  63. package/dev/test.f.d.ts +9 -0
  64. package/dev/{test.f.ts → test.f.js} +22 -24
  65. package/djs/module.f.d.ts +17 -0
  66. package/djs/module.f.js +63 -0
  67. package/djs/parser/module.f.d.ts +12 -0
  68. package/djs/parser/module.f.js +333 -0
  69. package/djs/parser/test.f.d.ts +12 -0
  70. package/djs/parser/test.f.js +717 -0
  71. package/djs/serializer/module.f.d.ts +9 -0
  72. package/djs/serializer/module.f.js +81 -0
  73. package/djs/test/input.f.d.ts +2 -0
  74. package/djs/test/input.f.js +4 -0
  75. package/djs/test/m.f.d.ts +2 -0
  76. package/djs/test/m.f.js +1 -0
  77. package/djs/test.f.d.ts +12 -0
  78. package/djs/test.f.js +84 -0
  79. package/djs/tokenizer/module.f.d.ts +8 -0
  80. package/djs/tokenizer/module.f.js +60 -0
  81. package/djs/tokenizer/test.f.d.ts +7 -0
  82. package/djs/tokenizer/test.f.js +529 -0
  83. package/fsc/module.f.d.ts +5 -0
  84. package/fsc/module.f.js +75 -0
  85. package/fsc/test.f.d.ts +4 -0
  86. package/fsc/test.f.js +19 -0
  87. package/fsm/module.f.d.ts +13 -0
  88. package/fsm/module.f.js +59 -0
  89. package/fsm/test.f.d.ts +5 -0
  90. package/fsm/test.f.js +137 -0
  91. package/html/module.f.d.ts +13 -0
  92. package/html/module.f.js +58 -0
  93. package/html/test.f.d.ts +9 -0
  94. package/html/test.f.js +42 -0
  95. package/issues/test.f.d.ts +16 -0
  96. package/issues/test.f.js +70 -0
  97. package/js/tokenizer/module.f.d.ts +86 -0
  98. package/js/tokenizer/module.f.js +503 -0
  99. package/js/tokenizer/test.f.d.ts +9 -0
  100. package/js/tokenizer/test.f.js +905 -0
  101. package/json/module.f.d.ts +20 -0
  102. package/json/module.f.js +68 -0
  103. package/json/parser/module.f.d.ts +5 -0
  104. package/json/parser/module.f.js +155 -0
  105. package/json/parser/test.f.d.ts +5 -0
  106. package/json/parser/test.f.js +328 -0
  107. package/json/serializer/module.f.d.ts +7 -0
  108. package/json/serializer/module.f.js +21 -0
  109. package/json/serializer/test.f.d.ts +8 -0
  110. package/json/serializer/test.f.js +87 -0
  111. package/json/test.f.d.ts +8 -0
  112. package/json/test.f.js +61 -0
  113. package/json/tokenizer/module.f.d.ts +8 -0
  114. package/json/tokenizer/module.f.js +52 -0
  115. package/json/tokenizer/test.f.d.ts +6 -0
  116. package/json/tokenizer/test.f.js +419 -0
  117. package/nanvm-lib/tests/test.f.d.ts +27 -0
  118. package/nanvm-lib/tests/test.f.js +84 -0
  119. package/nodejs/version/module.f.d.ts +11 -0
  120. package/nodejs/version/module.f.js +16 -0
  121. package/nodejs/version/test.f.d.ts +2 -0
  122. package/nodejs/version/{test.f.ts → test.f.js} +13 -22
  123. package/package.json +9 -5
  124. package/text/ascii/module.f.d.ts +129 -0
  125. package/text/ascii/module.f.js +148 -0
  126. package/text/ascii/test.f.d.ts +4 -0
  127. package/text/ascii/test.f.js +14 -0
  128. package/text/module.f.d.ts +8 -0
  129. package/text/module.f.js +10 -0
  130. package/text/sgr/module.f.d.ts +8 -0
  131. package/text/sgr/module.f.js +8 -0
  132. package/text/test.f.d.ts +2 -0
  133. package/text/test.f.js +18 -0
  134. package/text/utf16/module.f.d.ts +9 -0
  135. package/text/utf16/module.f.js +66 -0
  136. package/text/utf16/test.f.d.ts +6 -0
  137. package/text/utf16/test.f.js +144 -0
  138. package/text/utf8/module.f.d.ts +6 -0
  139. package/text/utf8/module.f.js +112 -0
  140. package/text/utf8/test.f.d.ts +6 -0
  141. package/text/utf8/test.f.js +175 -0
  142. package/types/array/module.f.d.ts +21 -0
  143. package/types/array/module.f.js +23 -0
  144. package/types/array/test.f.d.ts +10 -0
  145. package/types/array/test.f.js +116 -0
  146. package/types/bigfloat/module.f.d.ts +3 -0
  147. package/types/bigfloat/module.f.js +66 -0
  148. package/types/bigfloat/test.f.d.ts +6 -0
  149. package/types/bigfloat/test.f.js +349 -0
  150. package/types/bigint/module.f.d.ts +54 -0
  151. package/types/bigint/{module.f.ts → module.f.js} +42 -65
  152. package/types/bigint/test.f.d.ts +16 -0
  153. package/types/bigint/test.f.js +199 -0
  154. package/types/bit_vec/module.f.d.ts +134 -0
  155. package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
  156. package/types/bit_vec/test.f.d.ts +22 -0
  157. package/types/bit_vec/test.f.js +210 -0
  158. package/types/btree/find/module.f.d.ts +20 -0
  159. package/types/btree/find/module.f.js +84 -0
  160. package/types/btree/find/test.f.d.ts +2 -0
  161. package/types/btree/find/test.f.js +152 -0
  162. package/types/btree/module.f.d.ts +4 -0
  163. package/types/btree/module.f.js +31 -0
  164. package/types/btree/remove/module.f.d.ts +4 -0
  165. package/types/btree/remove/module.f.js +174 -0
  166. package/types/btree/remove/test.f.d.ts +5 -0
  167. package/types/btree/remove/test.f.js +634 -0
  168. package/types/btree/set/module.f.d.ts +3 -0
  169. package/types/btree/set/module.f.js +103 -0
  170. package/types/btree/set/test.f.d.ts +2 -0
  171. package/types/btree/set/test.f.js +360 -0
  172. package/types/btree/test.f.d.ts +8 -0
  173. package/types/btree/test.f.js +75 -0
  174. package/types/btree/types/module.f.d.ts +11 -0
  175. package/types/btree/types/module.f.js +1 -0
  176. package/types/byte_set/module.f.d.ts +16 -0
  177. package/types/byte_set/module.f.js +28 -0
  178. package/types/byte_set/test.f.d.ts +12 -0
  179. package/types/byte_set/test.f.js +122 -0
  180. package/types/function/compare/module.f.d.ts +10 -0
  181. package/types/function/compare/module.f.js +7 -0
  182. package/types/function/compare/test.f.d.ts +2 -0
  183. package/types/function/compare/test.f.js +8 -0
  184. package/types/function/module.f.d.ts +28 -0
  185. package/types/function/module.f.js +19 -0
  186. package/types/function/operator/module.f.d.ts +20 -0
  187. package/types/function/operator/module.f.js +18 -0
  188. package/types/function/test.f.d.ts +2 -0
  189. package/types/function/test.f.js +12 -0
  190. package/types/list/module.f.d.ts +50 -0
  191. package/types/list/module.f.js +171 -0
  192. package/types/list/test.f.d.ts +22 -0
  193. package/types/list/test.f.js +395 -0
  194. package/types/map/module.f.d.ts +14 -0
  195. package/types/map/module.f.js +31 -0
  196. package/types/map/test.f.d.ts +5 -0
  197. package/types/map/test.f.js +114 -0
  198. package/types/nibble_set/module.f.d.ts +10 -0
  199. package/types/nibble_set/module.f.js +9 -0
  200. package/types/nibble_set/test.f.d.ts +12 -0
  201. package/types/nibble_set/test.f.js +90 -0
  202. package/types/nullable/module.f.d.ts +3 -0
  203. package/types/nullable/module.f.js +2 -0
  204. package/types/nullable/test.f.d.ts +2 -0
  205. package/types/nullable/test.f.js +12 -0
  206. package/types/number/module.f.d.ts +6 -0
  207. package/types/number/module.f.js +8 -0
  208. package/types/number/test.f.d.ts +11 -0
  209. package/types/number/test.f.js +124 -0
  210. package/types/object/module.f.d.ts +10 -0
  211. package/types/object/module.f.js +12 -0
  212. package/types/object/test.f.d.ts +5 -0
  213. package/types/object/test.f.js +17 -0
  214. package/types/range/module.f.d.ts +3 -0
  215. package/types/range/module.f.js +2 -0
  216. package/types/range/test.f.d.ts +2 -0
  217. package/types/range/test.f.js +18 -0
  218. package/types/range_map/module.f.d.ts +14 -0
  219. package/types/range_map/module.f.js +51 -0
  220. package/types/range_map/test.f.d.ts +6 -0
  221. package/types/range_map/test.f.js +176 -0
  222. package/types/result/module.f.d.ts +7 -0
  223. package/types/result/module.f.js +8 -0
  224. package/types/sorted_list/module.f.d.ts +16 -0
  225. package/types/sorted_list/module.f.js +56 -0
  226. package/types/sorted_list/test.f.d.ts +5 -0
  227. package/types/sorted_list/test.f.js +64 -0
  228. package/types/sorted_set/module.f.d.ts +7 -0
  229. package/types/sorted_set/module.f.js +14 -0
  230. package/types/sorted_set/test.f.d.ts +6 -0
  231. package/types/sorted_set/test.f.js +78 -0
  232. package/types/string/module.f.d.ts +6 -0
  233. package/types/string/module.f.js +11 -0
  234. package/types/string/test.f.d.ts +15 -0
  235. package/types/string/test.f.js +58 -0
  236. package/types/string_set/module.f.d.ts +9 -0
  237. package/types/string_set/module.f.js +22 -0
  238. package/types/string_set/test.f.d.ts +5 -0
  239. package/types/string_set/test.f.js +65 -0
  240. package/.github/FUNDING.yml +0 -12
  241. package/.github/dependabot.yml +0 -11
  242. package/.github/workflows/ci.yml +0 -88
  243. package/.github/workflows/npm-publish.yml +0 -53
  244. package/CHANGELOG.md +0 -29
  245. package/Cargo.lock +0 -18
  246. package/Cargo.toml +0 -7
  247. package/com/README.md +0 -3
  248. package/com/cpp/README.md +0 -80
  249. package/com/cpp/module.f.ts +0 -180
  250. package/com/cpp/nanocom.hpp +0 -195
  251. package/com/cpp/testlib.f.ts +0 -8
  252. package/com/cs/module.f.ts +0 -145
  253. package/com/cs/testlib.f.ts +0 -8
  254. package/com/proposals.md +0 -28
  255. package/com/rust/module.f.ts +0 -287
  256. package/com/rust/nanocom/Cargo.lock +0 -7
  257. package/com/rust/nanocom/Cargo.toml +0 -15
  258. package/com/rust/nanocom/README.md +0 -56
  259. package/com/rust/nanocom/src/class.rs +0 -6
  260. package/com/rust/nanocom/src/cobject.rs +0 -90
  261. package/com/rust/nanocom/src/guid.rs +0 -15
  262. package/com/rust/nanocom/src/hresult.rs +0 -7
  263. package/com/rust/nanocom/src/interface.rs +0 -9
  264. package/com/rust/nanocom/src/iunknown.rs +0 -13
  265. package/com/rust/nanocom/src/lib.rs +0 -20
  266. package/com/rust/nanocom/src/object.rs +0 -34
  267. package/com/rust/nanocom/src/ref.rs +0 -57
  268. package/com/rust/nanocom/src/vmt.rs +0 -7
  269. package/com/rust/nanocom/tests/it.rs +0 -186
  270. package/com/rust/nanocom/tests/itmod.rs +0 -195
  271. package/com/rust/testlib.f.ts +0 -8
  272. package/com/test/build.f.ts +0 -111
  273. package/com/test/build.ts +0 -45
  274. package/com/test/cpp/main.cpp +0 -74
  275. package/com/test/cs/Program.cs +0 -31
  276. package/com/test/cs/cs.csproj +0 -16
  277. package/com/test/rust/Cargo.toml +0 -12
  278. package/com/test/rust/src/lib.rs +0 -56
  279. package/com/types/module.f.ts +0 -62
  280. package/commonjs/README.md +0 -94
  281. package/commonjs/build/module.f.ts +0 -100
  282. package/commonjs/build/test.f.ts +0 -107
  283. package/commonjs/module/module.f.ts +0 -41
  284. package/commonjs/module.f.ts +0 -7
  285. package/commonjs/module.ts +0 -31
  286. package/commonjs/package/dependencies/module.f.ts +0 -22
  287. package/commonjs/package/dependencies/test.f.ts +0 -8
  288. package/commonjs/package/module.f.ts +0 -31
  289. package/commonjs/package/test.f.ts +0 -12
  290. package/commonjs/path/README.md +0 -17
  291. package/commonjs/path/module.f.ts +0 -171
  292. package/commonjs/test.ts +0 -64
  293. package/crypto/README.md +0 -3
  294. package/crypto/prime_field/module.f.ts +0 -114
  295. package/crypto/prime_field/test.f.ts +0 -95
  296. package/crypto/secp/module.f.ts +0 -182
  297. package/crypto/secp/test.f.ts +0 -68
  298. package/crypto/sha2/module.f.ts +0 -215
  299. package/crypto/sha2/test.f.ts +0 -83
  300. package/deno.json +0 -71
  301. package/dev/README.md +0 -8
  302. package/dev/index.ts +0 -3
  303. package/dev/module.f.ts +0 -1
  304. package/dev/module.ts +0 -195
  305. package/dev/test/module.f.ts +0 -135
  306. package/dev/test.ts +0 -53
  307. package/djs/README.md +0 -54
  308. package/djs/module.f.ts +0 -76
  309. package/djs/parser/module.f.ts +0 -509
  310. package/djs/parser/test.f.ts +0 -461
  311. package/djs/serializer/module.f.ts +0 -90
  312. package/djs/test.f.ts +0 -67
  313. package/djs/tokenizer/module.f.ts +0 -99
  314. package/djs/tokenizer/test.f.ts +0 -364
  315. package/doc/LANGUAGE.md +0 -255
  316. package/doc/README.md +0 -61
  317. package/doc/byte-code.md +0 -59
  318. package/doc/fa.md +0 -174
  319. package/doc/predefined.md +0 -143
  320. package/doc/proposals.md +0 -21
  321. package/doc/vm/README.md +0 -24
  322. package/doc/vm-rearchitecture.md +0 -129
  323. package/doc/vm.md +0 -150
  324. package/fsc/README.md +0 -111
  325. package/fsc/module.f.ts +0 -122
  326. package/fsc/test.f.ts +0 -21
  327. package/fsm/README.md +0 -113
  328. package/fsm/module.f.ts +0 -107
  329. package/fsm/test.f.ts +0 -139
  330. package/funding.json +0 -61
  331. package/html/README.md +0 -32
  332. package/html/module.f.ts +0 -109
  333. package/html/test.f.ts +0 -37
  334. package/issues/01-test-debug.md +0 -3
  335. package/issues/02-esm.md +0 -8
  336. package/issues/03-djs.md +0 -57
  337. package/issues/05-publish.md +0 -40
  338. package/issues/11-fs-load.md +0 -13
  339. package/issues/17-djs-extension.md +0 -6
  340. package/issues/README.md +0 -42
  341. package/issues/lang/1000-json.md +0 -50
  342. package/issues/lang/2110-default-export.md +0 -11
  343. package/issues/lang/2120-const.md +0 -14
  344. package/issues/lang/2130-default-import.md +0 -10
  345. package/issues/lang/2210-block-comment.md +0 -12
  346. package/issues/lang/2220-namespace-import.md +0 -25
  347. package/issues/lang/2310-undefined.md +0 -7
  348. package/issues/lang/2320-bigint.md +0 -7
  349. package/issues/lang/2330-property-accessor.md +0 -225
  350. package/issues/lang/2340-operators.md +0 -41
  351. package/issues/lang/2350-grouping.md +0 -11
  352. package/issues/lang/2360-built-in.md +0 -81
  353. package/issues/lang/2410-identifier-property.md +0 -9
  354. package/issues/lang/2420-line-comment.md +0 -10
  355. package/issues/lang/2430-trailing-comma.md +0 -13
  356. package/issues/lang/2440-shorthand.md +0 -8
  357. package/issues/lang/2450-destructuring.md +0 -12
  358. package/issues/lang/3110-function.md +0 -35
  359. package/issues/lang/3120-parameters.md +0 -9
  360. package/issues/lang/3130-body-const.md +0 -12
  361. package/issues/lang/3220-let.md +0 -11
  362. package/issues/lang/3240-export.md +0 -44
  363. package/issues/lang/3370-type-inference.md +0 -69
  364. package/issues/lang/3380-promise.md +0 -22
  365. package/issues/lang/3390-class.md +0 -3
  366. package/issues/lang/3410-expression.md +0 -12
  367. package/issues/lang/3420-one-parameter.md +0 -10
  368. package/issues/lang/3430-assignments.md +0 -23
  369. package/issues/lang/README.md +0 -193
  370. package/issues/test.f.ts +0 -58
  371. package/js/tokenizer/module.f.ts +0 -882
  372. package/js/tokenizer/test.f.ts +0 -617
  373. package/json/html/README.md +0 -49
  374. package/json/module.f.ts +0 -94
  375. package/json/parser/module.f.ts +0 -221
  376. package/json/parser/test.f.ts +0 -255
  377. package/json/serializer/module.f.ts +0 -74
  378. package/json/serializer/test.f.ts +0 -64
  379. package/json/test.f.ts +0 -48
  380. package/json/tokenizer/module.f.ts +0 -85
  381. package/json/tokenizer/test.f.ts +0 -290
  382. package/nanvm-lib/Cargo.toml +0 -6
  383. package/nanvm-lib/src/extension.rs +0 -130
  384. package/nanvm-lib/src/interface.rs +0 -133
  385. package/nanvm-lib/src/lib.rs +0 -7
  386. package/nanvm-lib/src/naive.rs +0 -236
  387. package/nanvm-lib/src/nanenum.rs +0 -236
  388. package/nanvm-lib/src/nullish.rs +0 -7
  389. package/nanvm-lib/src/sign.rs +0 -5
  390. package/nanvm-lib/src/simple.rs +0 -32
  391. package/nanvm-lib/tests/test.f.ts +0 -80
  392. package/nanvm-lib/tests/test.rs +0 -108
  393. package/nodejs/version/main.ts +0 -4
  394. package/nodejs/version/module.f.ts +0 -42
  395. package/text/README.md +0 -110
  396. package/text/ascii/module.f.ts +0 -219
  397. package/text/ascii/test.f.ts +0 -14
  398. package/text/module.f.ts +0 -30
  399. package/text/sgr/README.md +0 -3
  400. package/text/sgr/module.f.ts +0 -11
  401. package/text/test.f.ts +0 -19
  402. package/text/utf16/module.f.ts +0 -120
  403. package/text/utf16/test.f.ts +0 -107
  404. package/text/utf8/module.f.ts +0 -116
  405. package/text/utf8/test.f.ts +0 -125
  406. package/tsconfig.json +0 -104
  407. package/types/array/module.f.ts +0 -89
  408. package/types/array/test.f.ts +0 -88
  409. package/types/bigfloat/module.f.ts +0 -93
  410. package/types/bigfloat/test.f.ts +0 -218
  411. package/types/bigint/README.md +0 -35
  412. package/types/bigint/test.f.ts +0 -144
  413. package/types/bit_vec/README.md +0 -18
  414. package/types/bit_vec/test.f.ts +0 -129
  415. package/types/btree/README.md +0 -160
  416. package/types/btree/find/module.f.ts +0 -92
  417. package/types/btree/find/test.f.ts +0 -122
  418. package/types/btree/module.f.ts +0 -35
  419. package/types/btree/remove/module.f.ts +0 -151
  420. package/types/btree/remove/test.f.ts +0 -498
  421. package/types/btree/set/module.f.ts +0 -89
  422. package/types/btree/set/test.f.ts +0 -415
  423. package/types/btree/test.f.ts +0 -92
  424. package/types/btree/types/module.f.ts +0 -27
  425. package/types/byte_set/module.f.ts +0 -73
  426. package/types/byte_set/test.f.ts +0 -84
  427. package/types/function/compare/module.f.ts +0 -26
  428. package/types/function/compare/test.f.ts +0 -7
  429. package/types/function/module.f.ts +0 -43
  430. package/types/function/operator/module.f.ts +0 -65
  431. package/types/function/test.f.ts +0 -20
  432. package/types/list/module.f.ts +0 -350
  433. package/types/list/test.f.ts +0 -327
  434. package/types/map/module.f.ts +0 -65
  435. package/types/map/test.f.ts +0 -76
  436. package/types/nibble_set/module.f.ts +0 -34
  437. package/types/nibble_set/test.f.ts +0 -57
  438. package/types/nullable/module.f.ts +0 -9
  439. package/types/nullable/test.f.ts +0 -9
  440. package/types/number/module.f.ts +0 -20
  441. package/types/number/test.f.ts +0 -194
  442. package/types/object/module.f.ts +0 -30
  443. package/types/object/test.f.ts +0 -14
  444. package/types/range/module.f.ts +0 -10
  445. package/types/range/test.f.ts +0 -9
  446. package/types/range_map/module.f.ts +0 -70
  447. package/types/range_map/test.f.ts +0 -189
  448. package/types/result/module.f.ts +0 -20
  449. package/types/result/module.ts +0 -18
  450. package/types/sorted_list/module.f.ts +0 -83
  451. package/types/sorted_list/test.f.ts +0 -57
  452. package/types/sorted_set/module.f.ts +0 -36
  453. package/types/sorted_set/test.f.ts +0 -67
  454. package/types/string/module.f.ts +0 -26
  455. package/types/string/test.f.ts +0 -43
  456. package/types/string_set/module.f.ts +0 -37
  457. package/types/string_set/test.f.ts +0 -34
@@ -1,171 +0,0 @@
1
- import * as list from '../../types/list/module.f.ts'
2
- const { next, fold, reverse, first, flat, toArray, filterMap, isEmpty, concat } = list
3
- import * as string from '../../types/string/module.f.ts'
4
- const { join } = string
5
- import * as Package from '../package/module.f.ts'
6
- import * as Module from '../module/module.f.ts'
7
-
8
- type Items = readonly string[]
9
-
10
- type LocalPath = {
11
- readonly external: boolean
12
- readonly dir: boolean
13
- readonly items: Items
14
- }
15
-
16
- const split
17
- : (path: string) => readonly string[]
18
- = path => path.split('/')
19
-
20
- type OptionList = readonly[list.List<string>] | null
21
-
22
- const normItemsOp
23
- : (items: string) => (prior: OptionList) => OptionList
24
- = first => prior => {
25
- if (prior === null) { return null }
26
- const tail = prior[0]
27
- switch (first) {
28
- case '': case '.': { return prior }
29
- case '..': {
30
- const result = next(tail)
31
- if (result === null) { return null }
32
- return [result.tail]
33
- }
34
- default: {
35
- return [{ first, tail }]
36
- }
37
- }
38
- }
39
-
40
- const normItems
41
- : (items: list.List<string>) => OptionList
42
- = items => {
43
- const result = fold(normItemsOp)([list.empty])(items)
44
- return result === null ? result : [reverse(result[0])]
45
- }
46
-
47
- const firstNull = first(null)
48
-
49
- export const parseLocal
50
- : (local: string) => (path: string) => LocalPath|null
51
- = local => {
52
- const fSeq
53
- : (path: string) => readonly[boolean, boolean, list.List<string>]
54
- = path => {
55
- const pathSeq = split(path)
56
- const dir = [null, '', '.', '..'].includes(pathSeq[pathSeq.length - 1])
57
- return (['.', '..'] as readonly (string|null)[]).includes(firstNull(pathSeq)) ?
58
- [false, dir, flat([split(local), pathSeq])] :
59
- [true, dir, pathSeq]
60
- }
61
- // /** @type {(path: string) => LocalPath|null} */
62
- return path => {
63
- const [external, dir, items] = fSeq(path)
64
- const n = normItems(items)
65
- if (n === null) { return null }
66
- return {
67
- external,
68
- dir,
69
- items: toArray(n[0])
70
- }
71
- }
72
- }
73
-
74
- type IdPath = readonly[string, list.List<string>]
75
-
76
- /** @type {} */
77
- const variants
78
- : (prior: readonly[string|null, list.List<string>]) => list.Thunk<IdPath>
79
- = prior => () => {
80
- const [a, b] = prior
81
- const r = next(b)
82
- if (r === list.empty) { return list.empty }
83
- const { first, tail } = r
84
- const n
85
- : IdPath
86
- = [a === null ? first : `${a}/${first}`, tail]
87
- return { first: n, tail: variants(n) }
88
- }
89
-
90
- const mapDependency
91
- : (d: (local: string) => string|null) => (p: IdPath) => IdPath|null
92
- = d => ([external, internal]) => {
93
- const id = d(external)
94
- return id === null ? null : [id, internal]
95
- }
96
-
97
- type Path = {
98
- readonly package: string,
99
- readonly items: Items,
100
- readonly dir: boolean,
101
- }
102
-
103
- /**
104
- * @type {}
105
- */
106
- export const parseGlobal
107
- : (d: (local: string) => string|null) =>
108
- (dir: boolean) =>
109
- (items: list.List<string>) =>
110
- Path|null
111
- = dependencies =>
112
- {
113
- const fMap = filterMap(mapDependency(dependencies))
114
- return dir => items => {
115
- const v = variants([null, items])
116
- const r = firstNull(fMap(v))
117
- if (r === null) { return null }
118
- return { package: r[0], items: toArray(r[1]), dir }
119
- }
120
- }
121
-
122
- /**
123
- * @type { }
124
- */
125
- export const parse
126
- : (packageId: string) =>
127
- (dependencies: (local: string) => string|null) =>
128
- (local: string) =>
129
- (path: string) =>
130
- Path|null
131
- = packageId => dependencies => {
132
- const pg = parseGlobal(dependencies)
133
- return local => path => {
134
- const parsed = parseLocal(local)(path)
135
- if (parsed === null) { return null }
136
- const {external, dir, items } = parsed
137
- if (!external) { return { package: packageId, items, dir } }
138
- return pg(dir)(items)
139
- }
140
- }
141
-
142
- type FoundResult = {
143
- readonly id: Module.Id
144
- readonly source: string
145
- }
146
-
147
- type Result = FoundResult| null
148
-
149
- export const parseAndFind
150
- : (packageGet: Package.Get) =>
151
- (moduleId: Module.Id) =>
152
- (path: string) =>
153
- Result
154
- = packageGet => moduleId => path => {
155
- const currentPack = packageGet(moduleId.package)
156
- if (currentPack === null) { return null }
157
- const p = parse(moduleId.package)(currentPack.dependency)(moduleId.path.join('/'))(path)
158
- if (p === null) { return null }
159
- const pack = packageGet(p.package)
160
- if (pack === null) { return null }
161
- const tryFile
162
- : (file: string) => FoundResult | null
163
- = file => {
164
- const source = pack.file(file)
165
- return source === null ? null : { id: { package: p.package, path: file.split('/') }, source }
166
- }
167
- const file = p.items.join('/')
168
- const indexJs = join('/')(concat(p.items)(['index.js']))
169
- const fileList = p.dir || isEmpty(p.items) ? [indexJs] : [file, `${file}.js`, indexJs]
170
- return firstNull(filterMap(tryFile)(fileList))
171
- }
package/commonjs/test.ts DELETED
@@ -1,64 +0,0 @@
1
- import * as _ from './module.ts'
2
- import * as Run from './module/function/module.f.ts'
3
-
4
- export default {
5
- ok: () => {
6
- const source = 'module.exports = "Hello world!"'
7
- const m = _.compile(source)
8
- if (m[0] !== 'ok') { throw m }
9
- const [result] = m[1](() => { throw 0 })(null)
10
- if (result[0] !== 'ok') { throw result }
11
- if (result[1] !== 'Hello world!') { throw result }
12
- },
13
- compilationError: () => {
14
- const source = '+'
15
- const m = _.compile(source)
16
- if (m[0] !== 'error') { throw m }
17
- },
18
- compilationErrorStrict: () => {
19
- const source = 'const x = 04'
20
- const m = _.compile(source)
21
- if (m[0] !== 'error') { throw m }
22
- },
23
- runtimeError: () => {
24
- const source = 'a = 5'
25
- const m = _.compile(source)
26
- if (m[0] !== 'ok') { throw m }
27
- const [result] = m[1](() => { throw 0 })(null)
28
- if (result[0] !== 'error') { throw result }
29
- },
30
- test: () => {
31
- const depSource = 'module.exports = 137'
32
- const d = _.compile(depSource)
33
- if (d[0] !== 'ok') { throw d }
34
-
35
- const req
36
- : Run.Require<number>
37
- = path => prior => {
38
- if (path !== 'm') { throw path }
39
- return d[1](req)(prior + 1)
40
- }
41
-
42
- let info = 0
43
- {
44
- const source = 'module.exports = require("m") + 42'
45
- const m = _.compile(source)
46
- if (m[0] !== 'ok') { throw m }
47
-
48
- const [result, newInfo] = m[1](req)(info)
49
- if (result[0] !== 'ok') { throw result }
50
- if (result[1] !== 179) { throw result }
51
- info = newInfo
52
- }
53
-
54
- {
55
- const source = 'module.exports = require("x") + 42'
56
- const m = _.compile(source)
57
- if (m[0] !== 'ok') { throw m }
58
-
59
- const [result, infox] = m[1](req)(info)
60
- if (result[0] !== 'error') { throw result }
61
- if (infox !== 1) { throw info }
62
- }
63
- }
64
- }
package/crypto/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Cryptography
2
-
3
- The directory contains algorithms and utilities for various cryptographic methods.
@@ -1,114 +0,0 @@
1
- import * as Operator from '../../types/function/operator/module.f.ts'
2
- import * as bi from '../../types/bigint/module.f.ts'
3
- const { scalar_mul } = bi
4
-
5
- type Reduce = Operator.Reduce<bigint>
6
-
7
- type Unary = Operator.Unary<bigint, bigint>
8
-
9
- /**
10
- * A type representing a prime field and its associated operations.
11
- */
12
- export type PrimeField = {
13
- readonly p: bigint
14
- readonly middle: bigint
15
- readonly max: bigint
16
- readonly neg: Unary
17
- readonly sub: Reduce
18
- readonly add: Reduce
19
- readonly abs: Unary
20
- readonly mul: Reduce
21
- readonly reciprocal: Unary
22
- readonly div: Reduce
23
- readonly pow: Reduce
24
- readonly pow2: Unary
25
- readonly pow3: Unary
26
- }
27
-
28
- /**
29
- * Creates a prime field with the specified prime modulus and associated operations.
30
- *
31
- * @param p - A prime number to define the field.
32
- * @returns The prime field object.
33
- */
34
- export const prime_field
35
- : (p: bigint) => PrimeField
36
- = p => {
37
- const sub
38
- : Reduce
39
- = a => b => {
40
- const r = a - b
41
- return r < 0 ? r + p : r
42
- }
43
- const mul
44
- : Reduce
45
- = a => b => a * b % p
46
- const reciprocal
47
- : Unary
48
- = a => {
49
- if (a === 0n) { throw '1/0' }
50
- let a1 = a
51
- let a0 = p
52
- let f0 = 0n
53
- let f1 = 1n
54
- while (a1 !== 1n) {
55
- const q = a0 / a1
56
- const a2 = a0 % a1
57
- a0 = a1
58
- a1 = a2
59
- const f2 = sub(f0)(mul(f1)(q))
60
- f0 = f1
61
- f1 = f2
62
- }
63
- return f1
64
- }
65
- const middle = p >> 1n
66
- const pow2
67
- : Unary
68
- = a => mul(a)(a)
69
- const pow
70
- : Reduce
71
- = scalar_mul({ 0: 1n, add: mul })
72
- return {
73
- p,
74
- middle,
75
- max: p - 1n,
76
- neg: a => a === 0n ? 0n : p - a,
77
- sub,
78
- add: a => b => {
79
- const r = a + b
80
- return r < p ? r : r - p
81
- },
82
- abs: a => middle < a ? p - a : a,
83
- mul,
84
- reciprocal,
85
- div: a => b => mul(a)(reciprocal(b)),
86
- pow,
87
- pow2,
88
- pow3: a => mul(a)(pow2(a))
89
- }
90
- }
91
-
92
- /**
93
- * Computes the square root of a number in a prime field.
94
- *
95
- * @throws If the prime modulus `p` does not satisfy `p % 4 == 3`.
96
- *
97
- * @example
98
- *
99
- * ```js
100
- * const field = prime_field(7n);
101
- * const root = sqrt(field)(4n);
102
- * if (root !== 2n) { throw root }
103
- * ```
104
- */
105
- export const sqrt
106
- : (f: PrimeField) => (a: bigint) => bigint|null
107
- = ({p, mul, pow }) => {
108
- if ((p & 3n) !== 3n) { throw 'sqrt' }
109
- const sqrt_k = (p + 1n) >> 2n
110
- return a => {
111
- const result = pow(a)(sqrt_k)
112
- return mul(result)(result) === a ? result : null
113
- }
114
- }
@@ -1,95 +0,0 @@
1
- import * as _ from './module.f.ts'
2
- const { prime_field, sqrt } = _
3
-
4
- export default {
5
- prime_field_test: () => {
6
- const p = 0xffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_fffffffe_fffffc2fn;
7
- const f = prime_field(p)
8
- const sqrt_f = sqrt(f)
9
- return {
10
- neg: () => {
11
- if (f.neg(0n) !== 0n) { throw '-0' }
12
- if (f.neg(1n) !== p - 1n) { throw '-1' }
13
- },
14
- sub: () => {
15
- if (f.sub(10n)(4n) !== 6n) { throw '10 - 4'}
16
- if (f.sub(11n)(14n) !== p - 3n) { throw '11 - 14' }
17
- },
18
- add: () => {
19
- if (f.add(13n)(24n) !== 37n) { throw '13 + 24' }
20
- if (f.add(77n)(f.neg(12n)) !== 65n) { throw '77 + (-12)' }
21
- },
22
- mul: () => {
23
- if (f.mul(100n)(0n) !== 0n) { throw '100 * 0' }
24
- if (f.mul(101n)(205n) !== 20_705n) { throw '101 * 205' }
25
- if (f.mul(304n)(f.neg(1n)) !== f.neg(304n)) { throw '304 * -1' }
26
- if (f.mul(f.neg(507n))(609n) !== f.neg(308_763n)) { throw '-507 * 609' }
27
- if (f.mul(f.neg(713n))(f.neg(825n)) !== 588_225n) { throw '-713 * -825' }
28
- },
29
- reciprocal: () => {
30
- let i = 1n
31
- while (i < 10_000n) {
32
- const x = f.reciprocal(i)
33
- if (f.mul(x)(i) !== 1n) { throw i }
34
- ++i
35
- }
36
- },
37
- pow: () => {
38
- const test
39
- : (a: bigint) => void
40
- = a => {
41
- if (f.pow(a)(0n) !== 1n) { throw '**0'}
42
- if (f.pow(a)(1n) !== a) { throw '**1' }
43
- // https://en.wikipedia.org/wiki/Fermat%27s_little_theorem
44
- // a^(p-1) % p = 1
45
- if (f.abs(f.pow(a)(f.middle)) !== 1n) { throw '**middle' }
46
- if (f.pow(a)(f.sub(f.max)(1n)) !== f.reciprocal(a)) { throw '**(max-1)' }
47
- if (f.pow(a)(f.max) !== 1n) { throw '**max' }
48
- }
49
- // 0
50
- if (f.pow(0n)(0n) !== 1n) { throw '0**0'}
51
- if (f.pow(0n)(f.max) !== 0n) { throw '0**max' }
52
- // 1
53
- test(1n)
54
- // 2
55
- test(2n)
56
- if (f.pow(2n)(2n) !== 4n) { throw '2**2' }
57
- if (f.pow(2n)(3n) !== 8n) { throw '2**3' }
58
- if (f.pow(2n)(128n) !== 1n << 128n) { throw '2**128' }
59
- // 3
60
- test(3n)
61
- if (f.pow(3n)(2n) !== 9n) { throw '3**2' }
62
- if (f.pow(3n)(3n) !== 27n) { throw '3**3' }
63
- if (f.pow(3n)(100n) !== 3n ** 100n) { throw '3**100' }
64
- if (f.pow(3n)(110n) !== 3n ** 110n) { throw '3**110' }
65
- if (f.pow(3n)(120n) !== 3n ** 120n) { throw '3**120' }
66
- if (f.pow(3n)(121n) !== 3n ** 121n) { throw '3**121' }
67
- //
68
- test(f.middle)
69
- test(f.max - 1n)
70
- test(f.max)
71
- },
72
- sqrtExample: () => {
73
- const field = prime_field(7n);
74
- const root = sqrt(field)(4n);
75
- if (root !== 2n) { throw root }
76
- },
77
- sqrt: () => {
78
- const test
79
- : (a: bigint) => void
80
- = a => {
81
- const a2 = f.mul(a)(a)
82
- const s = sqrt_f(a2)
83
- if (s !== null && f.abs(s) !== f.abs(a)) { throw 'sqrt' }
84
- }
85
- let i = 1n
86
- while (i < 1000n) {
87
- test(i)
88
- ++i;
89
- }
90
- test(f.middle);
91
- test(f.max);
92
- }
93
- }
94
- }
95
- }
@@ -1,182 +0,0 @@
1
- import * as Operator from '../../types/function/operator/module.f.ts'
2
- import * as pf from '../prime_field/module.f.ts'
3
- import * as bi from '../../types/bigint/module.f.ts'
4
- const { scalar_mul } = bi
5
- const { prime_field, sqrt } = pf
6
-
7
- /**
8
- * A 2D point represented as a pair of `bigint` values `[x, y]`.
9
- */
10
- type Point2D = readonly[bigint, bigint]
11
-
12
- /**
13
- * A 2D point on an elliptic curve, represented as a pair of `bigint` values.
14
- * `null` represents the point at infinity (`O`).
15
- */
16
- export type Point = Point2D|null
17
-
18
- /**
19
- * Initialization parameters for an elliptic curve.
20
- */
21
- export type Init = {
22
- readonly p: bigint
23
- readonly a: readonly[bigint, bigint]
24
- readonly g: readonly[bigint, bigint]
25
- readonly n: bigint
26
- }
27
-
28
- /**
29
- * Represents an elliptic curve and its associated operations.
30
- */
31
- type Curve = {
32
- readonly pf: pf.PrimeField
33
- readonly nf: pf.PrimeField
34
- readonly y2: (x: bigint) => bigint
35
- readonly y: (x: bigint) => bigint|null
36
- readonly neg: (a: Point) => Point
37
- readonly add: Operator.Reduce<Point>
38
- readonly mul: (a: Point) => (n: bigint) => Point
39
- }
40
-
41
- /**
42
- * Constructs an elliptic curve with the given initialization parameters.
43
- *
44
- * @example
45
- *
46
- * ```js
47
- * const curveParams = {
48
- * p: 23n,
49
- * a: [0n, 1n],
50
- * g: [1n, 1n],
51
- * n: 19n
52
- * };
53
- * const curveInstance = curve(curveParams);
54
- *
55
- * // Access curve operations
56
- * const point = curveInstance.add([1n, 1n])([2n, 5n]); // Add two points
57
- * const negPoint = curveInstance.neg([1n, 1n]); // Negate a point
58
- * const mulPoint = curveInstance.mul([1n, 1n])(3n); // Multiply a point by 3
59
- * ```
60
- */
61
- export const curve
62
- : (i: Init) => Curve
63
- = ({ p, a: [a0, a1], n }) => {
64
- const pf = prime_field(p)
65
- const { pow2, pow3, sub, add, mul, neg, div } = pf
66
- const mul3 = mul(3n)
67
- const mul2 = mul(2n)
68
- const addA1 = add(a1)
69
- const mulA1 = mul(a1)
70
- const addA0 = add(a0)
71
- /**
72
- * y**2 = a1*x**3 + a0
73
- */
74
- const y2
75
- : (x: bigint) => bigint
76
- = x => addA0(add(pow3(x))(mulA1(x)))
77
- const addPoint
78
- : Operator.Reduce<Point>
79
- = p => q => {
80
- if (p === null) {
81
- return q
82
- }
83
- if (q === null) {
84
- return p
85
- }
86
- const [px, py] = p
87
- const [qx, qy] = q
88
- const md = px === qx
89
- // (3 * px ** 2 + a1) / (2 * py)
90
- ? py !== qy || py === 0n ? null : [addA1(mul3(pow2(px))), mul2(py)]
91
- // (py - qy) / (px - qx)
92
- : [sub(py)(qy), sub(px)(qx)]
93
- if (md === null) {
94
- return null
95
- }
96
- const [ma, mb] = md
97
- const m = div(ma)(mb)
98
- // m ** 2 - px - qx
99
- const rx = sub(pow2(m))(add(px)(qx))
100
- // [rx, m * (px - rx) - py]
101
- return [rx, sub(mul(m)(sub(px)(rx)))(py)]
102
- }
103
- const sqrt_p = sqrt(pf)
104
- return {
105
- pf,
106
- nf: prime_field(n),
107
- y2,
108
- y: x => sqrt_p(y2(x)),
109
- neg: p => {
110
- if (p === null) {
111
- return null
112
- }
113
- const [x, y] = p
114
- return [x, neg(y)]
115
- },
116
- add: addPoint,
117
- mul: scalar_mul({ 0: null, add: addPoint })
118
- }
119
- }
120
-
121
- export const eq
122
- : (a: Point) => (b: Point) => boolean
123
- = a => b => {
124
- if (a === null || b === null) {
125
- return a === b
126
- }
127
- const [ax, ay] = a
128
- const [bx, by] = b
129
- return ax === bx && ay === by
130
- }
131
-
132
- /**
133
- * https://neuromancer.sk/std/secg/secp192r1
134
- */
135
- export const secp192r1
136
- : Init
137
- = {
138
- p: 0xffffffff_ffffffff_ffffffff_fffffffe_ffffffff_ffffffffn,
139
- a: [
140
- 0x64210519_e59c80e7_0fa7e9ab_72243049_feb8deec_c146b9b1n,
141
- 0xffffffff_ffffffff_ffffffff_fffffffe_ffffffff_fffffffcn
142
- ],
143
- g: [
144
- 0x188da80e_b03090f6_7cbf20eb_43a18800_f4ff0afd_82ff1012n,
145
- 0x07192b95_ffc8da78_631011ed_6b24cdd5_73f977a1_1e794811n
146
- ],
147
- n: 0xffffffff_ffffffff_ffffffff_99def836_146bc9b1_b4d22831n,
148
- }
149
-
150
- /**
151
- * https://en.bitcoin.it/wiki/Secp256k1
152
- * https://neuromancer.sk/std/secg/secp256k1
153
- */
154
- export const secp256k1
155
- : Init
156
- = {
157
- p: 0xffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_fffffffe_fffffc2fn,
158
- a: [7n, 0n],
159
- g: [
160
- 0x79be667e_f9dcbbac_55a06295_ce870b07_029bfcdb_2dce28d9_59f2815b_16f81798n,
161
- 0x483ada77_26a3c465_5da4fbfc_0e1108a8_fd17b448_a6855419_9c47d08f_fb10d4b8n
162
- ],
163
- n: 0xffffffff_ffffffff_ffffffff_fffffffe_baaedce6_af48a03b_bfd25e8c_d0364141n,
164
- }
165
-
166
- /**
167
- * https://neuromancer.sk/std/secg/secp256r1
168
- */
169
- export const secp256r1
170
- : Init
171
- = {
172
- p: 0xffffffff_00000001_00000000_00000000_00000000_ffffffff_ffffffff_ffffffffn,
173
- a: [
174
- 0x5ac635d8_aa3a93e7_b3ebbd55_769886bc_651d06b0_cc53b0f6_3bce3c3e_27d2604bn, //< b
175
- 0xffffffff_00000001_00000000_00000000_00000000_ffffffff_ffffffff_fffffffcn, //< a
176
- ],
177
- g: [
178
- 0x6b17d1f2_e12c4247_f8bce6e5_63a440f2_77037d81_2deb33a0_f4a13945_d898c296n, //< x
179
- 0x4fe342e2_fe1a7f9b_8ee7eb4a_7c0f9e16_2bce3357_6b315ece_cbb64068_37bf51f5n, //< y
180
- ],
181
- n: 0xffffffff_00000000_ffffffff_ffffffff_bce6faad_a7179e84_f3b9cac2_fc632551n,
182
- }
@@ -1,68 +0,0 @@
1
- import * as _ from './module.f.ts'
2
- const { curve, secp256k1, secp192r1, secp256r1, eq } = _
3
-
4
- export default {
5
- example: () => {
6
- const curveParams
7
- : _.Init
8
- = {
9
- p: 23n,
10
- a: [0n, 1n],
11
- g: [1n, 1n],
12
- n: 19n
13
- }
14
- const c = curve(curveParams)
15
- // Access curve operations
16
- const point = c.add([1n, 1n])([2n, 5n]); // Add two points
17
- const negPoint = c.neg([1n, 1n]); // Negate a point
18
- const mulPoint = c.mul([1n, 1n])(3n); // Multiply a point by 3
19
- },
20
- test: () => {
21
- const test_curve
22
- : (c: _.Init) => void
23
- = c => {
24
- const { g } = c
25
- const { mul, neg, pf: { abs }, y: yf, nf: { p: n } } = curve(c)
26
- const point_check
27
- : (p: _.Point) => void
28
- = p => {
29
- if (p === null) { throw 'p === null' }
30
- const [x, y] = p
31
- const ye = yf(x)
32
- if (ye === null) { throw 'ye === null' }
33
- if (abs(ye) !== abs(y)) { throw 'ye' }
34
- }
35
- point_check(g)
36
- point_check(neg(g))
37
- const test_mul
38
- : (p: _.Point) => void
39
- = p => {
40
- if (mul(p)(0n) !== null) { throw 'O' }
41
- if (mul(p)(1n) !== p) { throw 'p' }
42
- if (mul(p)(n) !== null) { throw 'n' }
43
- const pn = neg(p)
44
- if (!eq(mul(p)(n - 1n))(pn)) { throw 'n - 1' }
45
- const f
46
- : (s: bigint) => void
47
- = s => {
48
- const r = mul(p)(s)
49
- point_check(r)
50
- const rn = mul(pn)(s)
51
- point_check(rn)
52
- if (!eq(r)(neg(rn))) { throw 'r != -rn' }
53
- }
54
- f(2n)
55
- f(3n)
56
- f(4n << 128n)
57
- f((5n << 128n) + 6n)
58
- f(7n << 128n)
59
- f((8n << 128n) + 9n)
60
- }
61
- test_mul(g)
62
- test_mul(neg(g))
63
- }
64
- test_curve(secp256k1)
65
- test_curve(secp192r1)
66
- test_curve(secp256r1)
67
- }
68
- }