metanum 1.0.0

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.
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "metanum",
3
+ "version": "1.0.0",
4
+ "description": "A javascript library that handles numbers as large as f_ε₀(9e15)",
5
+ "main": "metanum.js",
6
+ "scripts": {
7
+ "test": "node test.js",
8
+ "example": "node basic-usage.js"
9
+ },
10
+ "keywords": [
11
+ "large-numbers",
12
+ "hardy-hierarchy",
13
+ "ordinal-arithmetic",
14
+ "hyper-operations",
15
+ "mathematics"
16
+ ],
17
+ "author": "dlsdl",
18
+ "license": "MIT",
19
+ "bugs": {
20
+ "url": "https://github.com/dlsdl/metanum.js/issues"
21
+ },
22
+ "homepage": "https://github.com/dlsdl/metanum.js"
23
+ }
@@ -0,0 +1,45 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Metanum Test Interface</title>
7
+ <style>
8
+ body {
9
+ font-family: Arial, sans-serif;
10
+ margin: 20px;
11
+ background-color: #f5f5f5;
12
+ }
13
+ .container {
14
+ max-width: 800px;
15
+ margin: 0 auto;
16
+ background-color: white;
17
+ padding: 20px;
18
+ border-radius: 8px;
19
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
20
+ }
21
+ h1 {
22
+ color: #333;
23
+ text-align: center;
24
+ }
25
+ h2 {
26
+ color: #333;
27
+ text-align: center;
28
+ }
29
+ </style>
30
+ </head>
31
+ <body>
32
+ <div class="container">
33
+ <h1>MetaNum Test Interface</h1>
34
+
35
+ <h2>test in console</h2>
36
+
37
+ </div>
38
+ <script src="./metanum.js"></script>
39
+ <script type="module">
40
+ // test in console
41
+ console.log('=== MetaNum Library by dlsdl ===');
42
+
43
+ </script>
44
+ </body>
45
+ </html>
package/test_mixed.js ADDED
@@ -0,0 +1,107 @@
1
+ var MetaNum = require("./metanum.js");
2
+
3
+ function check(name, input, expectedArray) {
4
+ try {
5
+ var m = MetaNum(input);
6
+ var arrStr = JSON.stringify(m.array);
7
+ var expStr = JSON.stringify(expectedArray);
8
+ var pass = arrStr === expStr;
9
+ console.log((pass ? "PASS" : "FAIL") + " | " + name + " | " + input);
10
+ if (!pass) {
11
+ console.log(" Got: " + arrStr);
12
+ console.log(" Expected: " + expStr);
13
+ process.exitCode = 1;
14
+ }
15
+ } catch (e) {
16
+ console.log("ERROR | " + name + " | " + input + " => " + e.message);
17
+ process.exitCode = 1;
18
+ }
19
+ }
20
+
21
+ function checkRT(name, input) {
22
+ try {
23
+ var m = MetaNum(input);
24
+ var s = m.toString();
25
+ var m2 = MetaNum(s);
26
+ var pass = m.eq(m2);
27
+ console.log((pass ? "PASS" : "FAIL") + " | RT " + name + " | " + input + " => " + s + " => " + m2.toString());
28
+ if (!pass) process.exitCode = 1;
29
+ } catch (e) {
30
+ console.log("ERROR | RT " + name + " | " + input + " => " + e.message);
31
+ process.exitCode = 1;
32
+ }
33
+ }
34
+
35
+ console.log("=== New mixed token tests ===");
36
+ check("QqQe308 array", "QqQe308", [[308], [1, 4, 17], [1, 16, 17]]);
37
+ check("AcAbAbAaAaAa114514 array", "AcAbAbAaAaAa114514", [[114514], [3, 0, 1], [2, 1, 1], [1, 2, 1]]);
38
+ check("AaAb100 array", "AaAb100", [[100], [1,0,1],[1,1,1]]);
39
+ check("AbAa100 array (sorted)", "AbAa100", [[100], [1,0,1],[1,1,1]]);
40
+
41
+ console.log("\n=== Mixed token toString ===");
42
+ var m1 = MetaNum("QqQe308");
43
+ console.log("QqQe308 => " + m1.toString() + " _oaRowData=" + JSON.stringify(m1._oaRowData));
44
+ var m2 = MetaNum("AcAbAbAaAaAa114514");
45
+ console.log("AcAbAbAaAaAa114514 => " + m2.toString() + " _oaRowData=" + JSON.stringify(m2._oaRowData));
46
+
47
+ console.log("\n=== Mixed roundtrip ===");
48
+ checkRT("QqQe308", "QqQe308");
49
+ checkRT("AcAbAbAaAaAa114514", "AcAbAbAaAaAa114514");
50
+
51
+ console.log("\n=== 2-letter regression ===");
52
+ checkRT("Ba10", "Ba10");
53
+ checkRT("Ba1", "Ba1");
54
+ checkRT("BaBa10", "BaBa10");
55
+ checkRT("Bb10", "Bb10");
56
+ checkRT("Bc10", "Bc10");
57
+ checkRT("Bz10", "Bz10");
58
+ checkRT("Ca10", "Ca10");
59
+ checkRT("Zz10", "Zz10");
60
+ checkRT("ZzZz10", "ZzZz10");
61
+
62
+ console.log("\n=== 3-letter fundamental regression ===");
63
+ checkRT("Aaa10", "Aaa10");
64
+ checkRT("Aaa1", "Aaa1");
65
+ checkRT("AaaAaa10", "AaaAaa10");
66
+ checkRT("Baa10", "Baa10");
67
+ checkRT("Zzz10", "Zzz10");
68
+
69
+ console.log("\n=== 3-letter standard regression ===");
70
+ checkRT("Aab10", "Aab10");
71
+ checkRT("Aac10", "Aac10");
72
+ checkRT("Abb10", "Abb10");
73
+
74
+ console.log("\n=== 3-letter diag regression ===");
75
+ checkRT("Aba10", "Aba10");
76
+ checkRT("Aba1", "Aba1");
77
+ checkRT("Aba2", "Aba2");
78
+ checkRT("Aca10", "Aca10");
79
+ checkRT("Aza10", "Aza10");
80
+ checkRT("Aba100", "Aba100");
81
+
82
+ console.log("\n=== 4-letter regression ===");
83
+ checkRT("Aaaa10", "Aaaa10");
84
+ checkRT("AaaaAaaa10", "AaaaAaaa10");
85
+ checkRT("Aaab10", "Aaab10");
86
+ checkRT("Aaba10", "Aaba10");
87
+ checkRT("Abaa10", "Abaa10");
88
+ checkRT("Baaa10", "Baaa10");
89
+ checkRT("Zzzz10", "Zzzz10");
90
+
91
+ console.log("\n=== 5-letter regression ===");
92
+ checkRT("Aaaaa10", "Aaaaa10");
93
+ checkRT("Zzzzz10", "Zzzzz10");
94
+
95
+ console.log("\n=== 1-letter ordinal regression ===");
96
+ checkRT("Aa10", "Aa10");
97
+ checkRT("Ab5", "Ab5");
98
+ checkRT("Ac100", "Ac100");
99
+ checkRT("AaAa10", "AaAa10");
100
+ checkRT("AbAb10", "AbAb10");
101
+
102
+ console.log("\n=== Edge cases ===");
103
+ checkRT("Ba1000000", "Ba1000000");
104
+ checkRT("Aaa100", "Aaa100");
105
+ checkRT("Aba100", "Aba100");
106
+
107
+ console.log("\n=== Done ===");