@zappdev/cli 0.1.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.
Files changed (209) hide show
  1. package/README.md +55 -0
  2. package/dist/zapp-cli.js +9471 -0
  3. package/native/src/app/app.zc +490 -0
  4. package/native/src/event/event.zc +24 -0
  5. package/native/src/event/events.zc +70 -0
  6. package/native/src/platform/darwin/backend.zc +923 -0
  7. package/native/src/platform/darwin/backend_bootstrap.zc +9 -0
  8. package/native/src/platform/darwin/bootstrap.zc +9 -0
  9. package/native/src/platform/darwin/engine_jsc.zc +86 -0
  10. package/native/src/platform/darwin/engine_qjs.zc +92 -0
  11. package/native/src/platform/darwin/platform.zc +156 -0
  12. package/native/src/platform/darwin/webview.zc +550 -0
  13. package/native/src/platform/darwin/webview_bootstrap.zc +9 -0
  14. package/native/src/platform/darwin/window.zc +1223 -0
  15. package/native/src/platform/darwin/worker/common.zc +223 -0
  16. package/native/src/platform/darwin/worker/core/base64_core.zc +29 -0
  17. package/native/src/platform/darwin/worker/core/crypto_core.zc +19 -0
  18. package/native/src/platform/darwin/worker/core/encoding_core.zc +32 -0
  19. package/native/src/platform/darwin/worker/core/fetch_core.zc +145 -0
  20. package/native/src/platform/darwin/worker/core/url_core.zc +69 -0
  21. package/native/src/platform/darwin/worker/core/websocket_core.zc +179 -0
  22. package/native/src/platform/darwin/worker/dispatch.zc +55 -0
  23. package/native/src/platform/darwin/worker/jsc/base64_jsc.zc +39 -0
  24. package/native/src/platform/darwin/worker/jsc/crypto_jsc.zc +49 -0
  25. package/native/src/platform/darwin/worker/jsc/encoding_jsc.zc +86 -0
  26. package/native/src/platform/darwin/worker/jsc/fetch_jsc.zc +149 -0
  27. package/native/src/platform/darwin/worker/jsc/url_jsc.zc +54 -0
  28. package/native/src/platform/darwin/worker/jsc/websocket_jsc.zc +127 -0
  29. package/native/src/platform/darwin/worker/jsc.zc +670 -0
  30. package/native/src/platform/darwin/worker/mod.zc +30 -0
  31. package/native/src/platform/darwin/worker/qjs/fetch_qjs.zc +233 -0
  32. package/native/src/platform/darwin/worker/qjs/qjs_macros.zc +23 -0
  33. package/native/src/platform/darwin/worker/qjs/websocket_qjs.zc +223 -0
  34. package/native/src/platform/darwin/worker/qjs.zc +1053 -0
  35. package/native/src/platform/darwin/worker/timers.zc +149 -0
  36. package/native/src/platform/darwin/worker/timers_qjs.zc +209 -0
  37. package/native/src/platform/platform.zc +64 -0
  38. package/native/src/platform/shared/log.zc +156 -0
  39. package/native/src/platform/shared/worker/qjs/base64_qjs.zc +38 -0
  40. package/native/src/platform/shared/worker/qjs/crypto_qjs.zc +44 -0
  41. package/native/src/platform/shared/worker/qjs/encoding_qjs.zc +95 -0
  42. package/native/src/platform/shared/worker/qjs/url_qjs.zc +65 -0
  43. package/native/src/platform/shared/worker_registry.zc +206 -0
  44. package/native/src/platform/window.zc +446 -0
  45. package/native/src/platform/windows/backend.zc +452 -0
  46. package/native/src/platform/windows/backend_bootstrap.zc +9 -0
  47. package/native/src/platform/windows/bootstrap.zc +9 -0
  48. package/native/src/platform/windows/engine_qjs.zc +60 -0
  49. package/native/src/platform/windows/platform.zc +387 -0
  50. package/native/src/platform/windows/webview.zc +1175 -0
  51. package/native/src/platform/windows/webview_bootstrap.zc +9 -0
  52. package/native/src/platform/windows/window.zc +1271 -0
  53. package/native/src/platform/windows/worker/common.zc +409 -0
  54. package/native/src/platform/windows/worker/core/base64_core.zc +52 -0
  55. package/native/src/platform/windows/worker/core/crypto_core.zc +34 -0
  56. package/native/src/platform/windows/worker/core/encoding_core.zc +60 -0
  57. package/native/src/platform/windows/worker/core/fetch_core.zc +274 -0
  58. package/native/src/platform/windows/worker/core/url_core.zc +216 -0
  59. package/native/src/platform/windows/worker/core/websocket_core.zc +343 -0
  60. package/native/src/platform/windows/worker/dispatch.zc +34 -0
  61. package/native/src/platform/windows/worker/mod.zc +46 -0
  62. package/native/src/platform/windows/worker/qjs/fetch_qjs.zc +255 -0
  63. package/native/src/platform/windows/worker/qjs/websocket_qjs.zc +263 -0
  64. package/native/src/platform/windows/worker/qjs.zc +1049 -0
  65. package/native/src/platform/windows/worker/timers_qjs.zc +288 -0
  66. package/native/src/platform/worker.zc +8 -0
  67. package/native/src/service/service.zc +228 -0
  68. package/native/vendor/quickjs-ng/.gitattributes +4 -0
  69. package/native/vendor/quickjs-ng/.github/dependabot.yml +7 -0
  70. package/native/vendor/quickjs-ng/.github/workflows/ci.yml +812 -0
  71. package/native/vendor/quickjs-ng/.github/workflows/docs.yml +49 -0
  72. package/native/vendor/quickjs-ng/.github/workflows/release.yml +162 -0
  73. package/native/vendor/quickjs-ng/.github/workflows/test-docs.yml +23 -0
  74. package/native/vendor/quickjs-ng/.github/workflows/tsan.yml +32 -0
  75. package/native/vendor/quickjs-ng/.github/workflows/valgrind.yml +33 -0
  76. package/native/vendor/quickjs-ng/.gitmodules +5 -0
  77. package/native/vendor/quickjs-ng/CMakeLists.txt +553 -0
  78. package/native/vendor/quickjs-ng/LICENSE +24 -0
  79. package/native/vendor/quickjs-ng/Makefile +149 -0
  80. package/native/vendor/quickjs-ng/amalgam.js +53 -0
  81. package/native/vendor/quickjs-ng/api-test.c +927 -0
  82. package/native/vendor/quickjs-ng/builtin-array-fromasync.h +119 -0
  83. package/native/vendor/quickjs-ng/builtin-array-fromasync.js +36 -0
  84. package/native/vendor/quickjs-ng/builtin-iterator-zip-keyed.h +332 -0
  85. package/native/vendor/quickjs-ng/builtin-iterator-zip-keyed.js +194 -0
  86. package/native/vendor/quickjs-ng/builtin-iterator-zip.h +337 -0
  87. package/native/vendor/quickjs-ng/builtin-iterator-zip.js +210 -0
  88. package/native/vendor/quickjs-ng/ctest.c +17 -0
  89. package/native/vendor/quickjs-ng/cutils.h +2013 -0
  90. package/native/vendor/quickjs-ng/cxxtest.cc +2 -0
  91. package/native/vendor/quickjs-ng/dtoa.c +1619 -0
  92. package/native/vendor/quickjs-ng/dtoa.h +87 -0
  93. package/native/vendor/quickjs-ng/examples/fib.c +67 -0
  94. package/native/vendor/quickjs-ng/examples/fib_module.js +10 -0
  95. package/native/vendor/quickjs-ng/examples/hello.js +1 -0
  96. package/native/vendor/quickjs-ng/examples/hello_module.js +6 -0
  97. package/native/vendor/quickjs-ng/examples/meson.build +17 -0
  98. package/native/vendor/quickjs-ng/examples/pi_bigint.js +118 -0
  99. package/native/vendor/quickjs-ng/examples/point.c +154 -0
  100. package/native/vendor/quickjs-ng/examples/test_fib.js +8 -0
  101. package/native/vendor/quickjs-ng/examples/test_point.js +43 -0
  102. package/native/vendor/quickjs-ng/fuzz.c +51 -0
  103. package/native/vendor/quickjs-ng/gen/function_source.c +81 -0
  104. package/native/vendor/quickjs-ng/gen/hello.c +53 -0
  105. package/native/vendor/quickjs-ng/gen/hello_module.c +106 -0
  106. package/native/vendor/quickjs-ng/gen/repl.c +3053 -0
  107. package/native/vendor/quickjs-ng/gen/standalone.c +324 -0
  108. package/native/vendor/quickjs-ng/gen/test_fib.c +81 -0
  109. package/native/vendor/quickjs-ng/libregexp-opcode.h +58 -0
  110. package/native/vendor/quickjs-ng/libregexp.c +2687 -0
  111. package/native/vendor/quickjs-ng/libregexp.h +98 -0
  112. package/native/vendor/quickjs-ng/libunicode-table.h +4707 -0
  113. package/native/vendor/quickjs-ng/libunicode.c +1746 -0
  114. package/native/vendor/quickjs-ng/libunicode.h +126 -0
  115. package/native/vendor/quickjs-ng/list.h +107 -0
  116. package/native/vendor/quickjs-ng/lre-test.c +73 -0
  117. package/native/vendor/quickjs-ng/meson.build +684 -0
  118. package/native/vendor/quickjs-ng/meson_options.txt +6 -0
  119. package/native/vendor/quickjs-ng/qjs-wasi-reactor.c +208 -0
  120. package/native/vendor/quickjs-ng/qjs.c +748 -0
  121. package/native/vendor/quickjs-ng/qjsc.c +673 -0
  122. package/native/vendor/quickjs-ng/quickjs-atom.h +267 -0
  123. package/native/vendor/quickjs-ng/quickjs-c-atomics.h +54 -0
  124. package/native/vendor/quickjs-ng/quickjs-libc.c +4986 -0
  125. package/native/vendor/quickjs-ng/quickjs-libc.h +79 -0
  126. package/native/vendor/quickjs-ng/quickjs-opcode.h +369 -0
  127. package/native/vendor/quickjs-ng/quickjs.c +60259 -0
  128. package/native/vendor/quickjs-ng/quickjs.h +1419 -0
  129. package/native/vendor/quickjs-ng/repl.js +1927 -0
  130. package/native/vendor/quickjs-ng/run-test262.c +2417 -0
  131. package/native/vendor/quickjs-ng/standalone.js +129 -0
  132. package/native/vendor/quickjs-ng/tests/assert.js +49 -0
  133. package/native/vendor/quickjs-ng/tests/bug1221.js +16 -0
  134. package/native/vendor/quickjs-ng/tests/bug1296.js +12 -0
  135. package/native/vendor/quickjs-ng/tests/bug1297.js +22 -0
  136. package/native/vendor/quickjs-ng/tests/bug1301.js +21 -0
  137. package/native/vendor/quickjs-ng/tests/bug1302.js +24 -0
  138. package/native/vendor/quickjs-ng/tests/bug1305.js +26 -0
  139. package/native/vendor/quickjs-ng/tests/bug1318.js +54 -0
  140. package/native/vendor/quickjs-ng/tests/bug1352.js +8 -0
  141. package/native/vendor/quickjs-ng/tests/bug1354.js +6 -0
  142. package/native/vendor/quickjs-ng/tests/bug1355.js +58 -0
  143. package/native/vendor/quickjs-ng/tests/bug1368.js +9 -0
  144. package/native/vendor/quickjs-ng/tests/bug39/1.js +6 -0
  145. package/native/vendor/quickjs-ng/tests/bug39/2.js +6 -0
  146. package/native/vendor/quickjs-ng/tests/bug39/3.js +7 -0
  147. package/native/vendor/quickjs-ng/tests/bug488-upstream.js +7 -0
  148. package/native/vendor/quickjs-ng/tests/bug633/0.js +7 -0
  149. package/native/vendor/quickjs-ng/tests/bug633/1.js +4 -0
  150. package/native/vendor/quickjs-ng/tests/bug633/2.js +4 -0
  151. package/native/vendor/quickjs-ng/tests/bug633/3.js +4 -0
  152. package/native/vendor/quickjs-ng/tests/bug645/0.js +4 -0
  153. package/native/vendor/quickjs-ng/tests/bug645/1.js +9 -0
  154. package/native/vendor/quickjs-ng/tests/bug645/2.js +7 -0
  155. package/native/vendor/quickjs-ng/tests/bug648.js +13 -0
  156. package/native/vendor/quickjs-ng/tests/bug652.js +4 -0
  157. package/native/vendor/quickjs-ng/tests/bug741.js +19 -0
  158. package/native/vendor/quickjs-ng/tests/bug775.js +7 -0
  159. package/native/vendor/quickjs-ng/tests/bug776.js +7 -0
  160. package/native/vendor/quickjs-ng/tests/bug832.js +2 -0
  161. package/native/vendor/quickjs-ng/tests/bug858.js +26 -0
  162. package/native/vendor/quickjs-ng/tests/bug904.js +6 -0
  163. package/native/vendor/quickjs-ng/tests/bug988.js +7 -0
  164. package/native/vendor/quickjs-ng/tests/bug999.js +3 -0
  165. package/native/vendor/quickjs-ng/tests/destructured-export.js +8 -0
  166. package/native/vendor/quickjs-ng/tests/detect_module/0.js +1 -0
  167. package/native/vendor/quickjs-ng/tests/detect_module/1.js +2 -0
  168. package/native/vendor/quickjs-ng/tests/detect_module/2.js +1 -0
  169. package/native/vendor/quickjs-ng/tests/detect_module/3.js +8 -0
  170. package/native/vendor/quickjs-ng/tests/detect_module/4.js +3 -0
  171. package/native/vendor/quickjs-ng/tests/empty.js +0 -0
  172. package/native/vendor/quickjs-ng/tests/fixture_cyclic_import.js +2 -0
  173. package/native/vendor/quickjs-ng/tests/fixture_string_exports.js +12 -0
  174. package/native/vendor/quickjs-ng/tests/function_source.js +14 -0
  175. package/native/vendor/quickjs-ng/tests/microbench.js +1267 -0
  176. package/native/vendor/quickjs-ng/tests/null_or_undefined.js +38 -0
  177. package/native/vendor/quickjs-ng/tests/str-pad-leak.js +5 -0
  178. package/native/vendor/quickjs-ng/tests/test_bigint.js +107 -0
  179. package/native/vendor/quickjs-ng/tests/test_bjson.js +366 -0
  180. package/native/vendor/quickjs-ng/tests/test_builtin.js +1314 -0
  181. package/native/vendor/quickjs-ng/tests/test_closure.js +220 -0
  182. package/native/vendor/quickjs-ng/tests/test_cyclic_import.js +12 -0
  183. package/native/vendor/quickjs-ng/tests/test_domexception.js +35 -0
  184. package/native/vendor/quickjs-ng/tests/test_language.js +755 -0
  185. package/native/vendor/quickjs-ng/tests/test_loop.js +367 -0
  186. package/native/vendor/quickjs-ng/tests/test_queue_microtask.js +39 -0
  187. package/native/vendor/quickjs-ng/tests/test_std.js +340 -0
  188. package/native/vendor/quickjs-ng/tests/test_string_exports.js +25 -0
  189. package/native/vendor/quickjs-ng/tests/test_worker.js +43 -0
  190. package/native/vendor/quickjs-ng/tests/test_worker_module.js +30 -0
  191. package/native/vendor/quickjs-ng/tests.conf +14 -0
  192. package/native/vendor/quickjs-ng/unicode_download.sh +19 -0
  193. package/native/vendor/quickjs-ng/unicode_gen.c +3108 -0
  194. package/native/vendor/quickjs-ng/unicode_gen_def.h +310 -0
  195. package/native/vendor/quickjs-ng/update-version.sh +32 -0
  196. package/native/vendor/webview2/include/WebView2.h +60636 -0
  197. package/native/vendor/webview2/include/WebView2EnvironmentOptions.h +406 -0
  198. package/package.json +33 -0
  199. package/src/backend.ts +139 -0
  200. package/src/build-config.ts +87 -0
  201. package/src/build.ts +276 -0
  202. package/src/common.ts +195 -0
  203. package/src/config.ts +89 -0
  204. package/src/dev.ts +164 -0
  205. package/src/generate.ts +200 -0
  206. package/src/icons.ts +116 -0
  207. package/src/init.ts +190 -0
  208. package/src/package.ts +150 -0
  209. package/src/zapp-cli.ts +263 -0
@@ -0,0 +1,1267 @@
1
+ /*
2
+ * Javascript Micro benchmark
3
+ *
4
+ * Copyright (c) 2017-2019 Fabrice Bellard
5
+ * Copyright (c) 2017-2019 Charlie Gordon
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+ */
25
+ import * as std from "qjs:std";
26
+ import * as os from "qjs:os";
27
+
28
+ function pad(str, n) {
29
+ str += "";
30
+ while (str.length < n)
31
+ str += " ";
32
+ return str;
33
+ }
34
+
35
+ function pad_left(str, n) {
36
+ str += "";
37
+ while (str.length < n)
38
+ str = " " + str;
39
+ return str;
40
+ }
41
+
42
+ function pad_center(str, n) {
43
+ str += "";
44
+ while (str.length < n) {
45
+ if ((n - str.length) & 1)
46
+ str = str + " ";
47
+ else
48
+ str = " " + str;
49
+ }
50
+ return str;
51
+ }
52
+
53
+ function toPrec(n, prec) {
54
+ var i, s;
55
+ for (i = 0; i < prec; i++)
56
+ n *= 10;
57
+ s = "" + Math.round(n);
58
+ for (i = s.length - prec; i <= 0; i++)
59
+ s = "0" + s;
60
+ if (prec > 0)
61
+ s = s.substring(0, i) + "." + s.substring(i);
62
+ return s;
63
+ }
64
+
65
+ var ref_data;
66
+ var log_data;
67
+
68
+ var heads = [ "TEST", "N", "TIME (ns)", "REF (ns)", "SCORE (%)" ];
69
+ var widths = [ 22, 10, 9, 9, 9 ];
70
+ var precs = [ 0, 0, 2, 2, 2 ];
71
+ var total = [ 0, 0, 0, 0, 0 ];
72
+ var total_score = 0;
73
+ var total_scale = 0;
74
+
75
+ if (typeof console == "undefined") {
76
+ var console = { log: print };
77
+ }
78
+
79
+ function log_line() {
80
+ var i, n, s, a;
81
+ s = "";
82
+ for (i = 0, n = arguments.length; i < n; i++) {
83
+ if (i > 0)
84
+ s += " ";
85
+ a = arguments[i];
86
+ if (typeof a == "number") {
87
+ total[i] += a;
88
+ a = toPrec(a, precs[i]);
89
+ s += pad_left(a, widths[i]);
90
+ } else {
91
+ s += pad_left(a, widths[i]);
92
+ }
93
+ }
94
+ console.log(s);
95
+ }
96
+
97
+ var clocks_per_sec = 1000000;
98
+ var max_iterations = 100;
99
+ var clock_threshold = 2000; /* favoring short measuring spans */
100
+ var min_n_argument = 1;
101
+ var get_clock = os.cputime ?? os.now;
102
+
103
+ function log_one(text, n, ti) {
104
+ var ref;
105
+
106
+ if (ref_data)
107
+ ref = ref_data[text];
108
+ else
109
+ ref = null;
110
+
111
+ ti = Math.round(ti * 100) / 100;
112
+ log_data[text] = ti;
113
+ if (typeof ref === "number") {
114
+ log_line(text, n, ti, ref, ti * 100 / ref);
115
+ total_score += ti * 100 / ref;
116
+ total_scale += 100;
117
+ } else {
118
+ log_line(text, n, ti);
119
+ total_score += 100;
120
+ total_scale += 100;
121
+ }
122
+ }
123
+
124
+ function bench(f, text)
125
+ {
126
+ var i, j, n, t, t1, ti, nb_its, ref, ti_n, ti_n1, min_ti;
127
+
128
+ nb_its = n = 1;
129
+ if (f.bench) {
130
+ ti_n = f(text);
131
+ } else {
132
+ ti_n = 1000000000;
133
+ min_ti = clock_threshold / 10;
134
+ for(i = 0; i < 30; i++) {
135
+ ti = 1000000000;
136
+ for (j = 0; j < max_iterations; j++) {
137
+ t = get_clock();
138
+ while ((t1 = get_clock()) == t)
139
+ continue;
140
+ nb_its = f(n);
141
+ if (nb_its < 0)
142
+ return; // test failure
143
+ t1 = get_clock() - t1;
144
+ if (ti > t1)
145
+ ti = t1;
146
+ }
147
+ if (ti >= min_ti) {
148
+ ti_n1 = ti / nb_its;
149
+ if (ti_n > ti_n1)
150
+ ti_n = ti_n1;
151
+ }
152
+ if (ti >= clock_threshold && n >= min_n_argument)
153
+ break;
154
+
155
+ n = n * [ 2, 2.5, 2 ][i % 3];
156
+ }
157
+ // to use only the best timing from the last loop, uncomment below
158
+ //ti_n = ti / nb_its;
159
+ }
160
+ /* nano seconds per iteration */
161
+ log_one(text, n, ti_n * 1e9 / clocks_per_sec);
162
+ }
163
+
164
+ var global_res; /* to be sure the code is not optimized */
165
+
166
+ function empty_loop(n) {
167
+ var j;
168
+ for(j = 0; j < n; j++) {
169
+ }
170
+ return n;
171
+ }
172
+
173
+ function date_now(n) {
174
+ var j;
175
+ for(j = 0; j < n; j++) {
176
+ Date.now();
177
+ }
178
+ return n;
179
+ }
180
+
181
+ function prop_read(n)
182
+ {
183
+ var obj, sum, j;
184
+ obj = {a: 1, b: 2, c:3, d:4 };
185
+ sum = 0;
186
+ for(j = 0; j < n; j++) {
187
+ sum += obj.a;
188
+ sum += obj.b;
189
+ sum += obj.c;
190
+ sum += obj.d;
191
+ }
192
+ global_res = sum;
193
+ return n * 4;
194
+ }
195
+
196
+ function prop_write(n)
197
+ {
198
+ var obj, j;
199
+ obj = {a: 1, b: 2, c:3, d:4 };
200
+ for(j = 0; j < n; j++) {
201
+ obj.a = j;
202
+ obj.b = j;
203
+ obj.c = j;
204
+ obj.d = j;
205
+ }
206
+ return n * 4;
207
+ }
208
+
209
+ function prop_create(n)
210
+ {
211
+ var obj, j;
212
+ for(j = 0; j < n; j++) {
213
+ obj = new Object();
214
+ obj.a = 1;
215
+ obj.b = 2;
216
+ obj.c = 3;
217
+ obj.d = 4;
218
+ }
219
+ return n * 4;
220
+ }
221
+
222
+ function prop_delete(n)
223
+ {
224
+ var obj, j;
225
+ obj = {};
226
+ for(j = 0; j < n; j++) {
227
+ obj[j] = 1;
228
+ }
229
+ for(j = 0; j < n; j++) {
230
+ delete obj[j];
231
+ }
232
+ return n;
233
+ }
234
+
235
+ function array_read(n)
236
+ {
237
+ var tab, len, sum, i, j;
238
+ tab = [];
239
+ len = 10;
240
+ for(i = 0; i < len; i++)
241
+ tab[i] = i;
242
+ sum = 0;
243
+ for(j = 0; j < n; j++) {
244
+ sum += tab[0];
245
+ sum += tab[1];
246
+ sum += tab[2];
247
+ sum += tab[3];
248
+ sum += tab[4];
249
+ sum += tab[5];
250
+ sum += tab[6];
251
+ sum += tab[7];
252
+ sum += tab[8];
253
+ sum += tab[9];
254
+ }
255
+ global_res = sum;
256
+ return len * n;
257
+ }
258
+
259
+ function array_write(n)
260
+ {
261
+ var tab, len, i, j;
262
+ tab = [];
263
+ len = 10;
264
+ for(i = 0; i < len; i++)
265
+ tab[i] = i;
266
+ for(j = 0; j < n; j++) {
267
+ tab[0] = j;
268
+ tab[1] = j;
269
+ tab[2] = j;
270
+ tab[3] = j;
271
+ tab[4] = j;
272
+ tab[5] = j;
273
+ tab[6] = j;
274
+ tab[7] = j;
275
+ tab[8] = j;
276
+ tab[9] = j;
277
+ }
278
+ return len * n;
279
+ }
280
+
281
+ function array_prop_create(n)
282
+ {
283
+ var tab, i, j, len;
284
+ len = 1000;
285
+ for(j = 0; j < n; j++) {
286
+ tab = [];
287
+ for(i = 0; i < len; i++)
288
+ tab[i] = i;
289
+ }
290
+ return len * n;
291
+ }
292
+
293
+ function array_length_decr(n)
294
+ {
295
+ var tab, i, j, len;
296
+ len = 1000;
297
+ tab = [];
298
+ for(i = 0; i < len; i++)
299
+ tab[i] = i;
300
+ for(j = 0; j < n; j++) {
301
+ for(i = len - 1; i >= 0; i--)
302
+ tab.length = i;
303
+ }
304
+ return len * n;
305
+ }
306
+
307
+ function array_hole_length_decr(n)
308
+ {
309
+ var tab, i, j, len;
310
+ len = 1000;
311
+ tab = [];
312
+ for(i = 0; i < len; i++) {
313
+ if (i != 3)
314
+ tab[i] = i;
315
+ }
316
+ for(j = 0; j < n; j++) {
317
+ for(i = len - 1; i >= 0; i--)
318
+ tab.length = i;
319
+ }
320
+ return len * n;
321
+ }
322
+
323
+ function array_push(n)
324
+ {
325
+ var tab, i, j, len;
326
+ len = 500;
327
+ for(j = 0; j < n; j++) {
328
+ tab = [];
329
+ for(i = 0; i < len; i++)
330
+ tab.push(i);
331
+ }
332
+ return len * n;
333
+ }
334
+
335
+ function array_pop(n)
336
+ {
337
+ var tab, i, j, len, sum;
338
+ len = 500;
339
+ for(j = 0; j < n; j++) {
340
+ tab = [];
341
+ for(i = 0; i < len; i++)
342
+ tab[i] = i;
343
+ sum = 0;
344
+ for(i = 0; i < len; i++)
345
+ sum += tab.pop();
346
+ global_res = sum;
347
+ }
348
+ return len * n;
349
+ }
350
+
351
+ function typed_array_read(n)
352
+ {
353
+ var tab, len, sum, i, j;
354
+ len = 10;
355
+ tab = new Int32Array(len);
356
+ for(i = 0; i < len; i++)
357
+ tab[i] = i;
358
+ sum = 0;
359
+ for(j = 0; j < n; j++) {
360
+ sum += tab[0];
361
+ sum += tab[1];
362
+ sum += tab[2];
363
+ sum += tab[3];
364
+ sum += tab[4];
365
+ sum += tab[5];
366
+ sum += tab[6];
367
+ sum += tab[7];
368
+ sum += tab[8];
369
+ sum += tab[9];
370
+ }
371
+ global_res = sum;
372
+ return len * n;
373
+ }
374
+
375
+ function typed_array_write(n)
376
+ {
377
+ var tab, len, i, j;
378
+ len = 10;
379
+ tab = new Int32Array(len);
380
+ for(i = 0; i < len; i++)
381
+ tab[i] = i;
382
+ for(j = 0; j < n; j++) {
383
+ tab[0] = j;
384
+ tab[1] = j;
385
+ tab[2] = j;
386
+ tab[3] = j;
387
+ tab[4] = j;
388
+ tab[5] = j;
389
+ tab[6] = j;
390
+ tab[7] = j;
391
+ tab[8] = j;
392
+ tab[9] = j;
393
+ }
394
+ return len * n;
395
+ }
396
+
397
+ var global_var0;
398
+
399
+ function global_read(n)
400
+ {
401
+ var sum, j;
402
+ global_var0 = 0;
403
+ sum = 0;
404
+ for(j = 0; j < n; j++) {
405
+ sum += global_var0;
406
+ sum += global_var0;
407
+ sum += global_var0;
408
+ sum += global_var0;
409
+ }
410
+ global_res = sum;
411
+ return n * 4;
412
+ }
413
+
414
+ function global_write(n)
415
+ {
416
+ var j;
417
+ for(j = 0; j < n; j++) {
418
+ global_var0 = j;
419
+ global_var0 = j;
420
+ global_var0 = j;
421
+ global_var0 = j;
422
+ }
423
+ return n * 4;
424
+ }
425
+
426
+ function global_write_strict(n)
427
+ {
428
+ "use strict";
429
+ var j;
430
+ for(j = 0; j < n; j++) {
431
+ global_var0 = j;
432
+ global_var0 = j;
433
+ global_var0 = j;
434
+ global_var0 = j;
435
+ }
436
+ return n * 4;
437
+ }
438
+
439
+ function local_destruct(n)
440
+ {
441
+ var j, v1, v2, v3, v4;
442
+ var array = [ 1, 2, 3, 4, 5];
443
+ var o = { a:1, b:2, c:3, d:4 };
444
+ var a, b, c, d;
445
+ for(j = 0; j < n; j++) {
446
+ [ v1, v2,, v3, ...v4] = array;
447
+ ({ a, b, c, d } = o);
448
+ ({ a: a, b: b, c: c, d: d } = o);
449
+ }
450
+ return n * 12;
451
+ }
452
+
453
+ var global_v1, global_v2, global_v3, global_v4;
454
+ var global_a, global_b, global_c, global_d;
455
+
456
+ function global_destruct(n)
457
+ {
458
+ var j, v1, v2, v3, v4;
459
+ var array = [ 1, 2, 3, 4, 5 ];
460
+ var o = { a:1, b:2, c:3, d:4 };
461
+ var a, b, c, d;
462
+ for(j = 0; j < n; j++) {
463
+ [ global_v1, global_v2,, global_v3, ...global_v4] = array;
464
+ ({ a: global_a, b: global_b, c: global_c, d: global_d } = o);
465
+ }
466
+ return n * 8;
467
+ }
468
+
469
+ function global_destruct_strict(n)
470
+ {
471
+ "use strict";
472
+ var j, v1, v2, v3, v4;
473
+ var array = [ 1, 2, 3, 4, 5 ];
474
+ var o = { a:1, b:2, c:3, d:4 };
475
+ var a, b, c, d;
476
+ for(j = 0; j < n; j++) {
477
+ [ global_v1, global_v2,, global_v3, ...global_v4] = array;
478
+ ({ a: global_a, b: global_b, c: global_c, d: global_d } = o);
479
+ }
480
+ return n * 8;
481
+ }
482
+
483
+ function func_call(n)
484
+ {
485
+ function f(a)
486
+ {
487
+ return 1;
488
+ }
489
+
490
+ var j, sum;
491
+ sum = 0;
492
+ for(j = 0; j < n; j++) {
493
+ sum += f(j);
494
+ sum += f(j);
495
+ sum += f(j);
496
+ sum += f(j);
497
+ }
498
+ global_res = sum;
499
+ return n * 4;
500
+ }
501
+
502
+ function closure_var(n)
503
+ {
504
+ function f(a)
505
+ {
506
+ sum++;
507
+ }
508
+
509
+ var j, sum;
510
+ sum = 0;
511
+ for(j = 0; j < n; j++) {
512
+ f(j);
513
+ f(j);
514
+ f(j);
515
+ f(j);
516
+ }
517
+ global_res = sum;
518
+ return n * 4;
519
+ }
520
+
521
+ function int_arith(n)
522
+ {
523
+ var i, j, sum;
524
+ global_res = 0;
525
+ for(j = 0; j < n; j++) {
526
+ sum = 0;
527
+ for(i = 0; i < 1000; i++) {
528
+ sum += i * i;
529
+ }
530
+ global_res += sum;
531
+ }
532
+ return n * 1000;
533
+ }
534
+
535
+ function float_arith(n)
536
+ {
537
+ var i, j, sum, a, incr, a0;
538
+ global_res = 0;
539
+ a0 = 0.1;
540
+ incr = 1.1;
541
+ for(j = 0; j < n; j++) {
542
+ sum = 0;
543
+ a = a0;
544
+ for(i = 0; i < 1000; i++) {
545
+ sum += a * a;
546
+ a += incr;
547
+ }
548
+ global_res += sum;
549
+ }
550
+ return n * 1000;
551
+ }
552
+
553
+ function bigint_arith(n, bits)
554
+ {
555
+ var i, j, sum, a, incr, a0, sum0;
556
+ sum0 = global_res = BigInt(0);
557
+ a0 = BigInt(1) << BigInt(Math.floor((bits - 10) * 0.5));
558
+ incr = BigInt(1);
559
+ for(j = 0; j < n; j++) {
560
+ sum = sum0;
561
+ a = a0;
562
+ for(i = 0; i < 1000; i++) {
563
+ sum += a * a;
564
+ a += incr;
565
+ }
566
+ global_res += sum;
567
+ }
568
+ return n * 1000;
569
+ }
570
+
571
+ function bigint64_arith(n)
572
+ {
573
+ return bigint_arith(n, 64);
574
+ }
575
+
576
+ function bigint256_arith(n)
577
+ {
578
+ return bigint_arith(n, 256);
579
+ }
580
+
581
+ function map_set(n)
582
+ {
583
+ var s, i, j, len = 100;
584
+ for(j = 0; j < n; j++) {
585
+ s = new Map();
586
+ for(i = 0; i < len; i++) {
587
+ s.set(String(i), i);
588
+ }
589
+ for(i = 0; i < len; i++) {
590
+ if (!s.has(String(i)))
591
+ throw Error("bug in Map");
592
+ }
593
+ }
594
+ return n * len;
595
+ }
596
+
597
+ function map_delete(n)
598
+ {
599
+ var a, i, j, len;
600
+
601
+ len = 1000;
602
+ for(j = 0; j < n; j++) {
603
+ a = new Map();
604
+ for(i = 0; i < len; i++) {
605
+ a.set(String(i), i);
606
+ }
607
+ for(i = 0; i < len; i++) {
608
+ a.delete(String(i));
609
+ }
610
+ }
611
+ return len * n;
612
+ }
613
+
614
+ function weak_map_set(n)
615
+ {
616
+ var a, i, j, len, tab;
617
+
618
+ len = 1000;
619
+ tab = [];
620
+ for(i = 0; i < len; i++) {
621
+ tab.push({ key: i });
622
+ }
623
+ for(j = 0; j < n; j++) {
624
+ a = new WeakMap();
625
+ for(i = 0; i < len; i++) {
626
+ a.set(tab[i], i);
627
+ }
628
+ }
629
+ return len * n;
630
+ }
631
+
632
+ function weak_map_delete(n)
633
+ {
634
+ var a, i, j, len, tab;
635
+
636
+ len = 1000;
637
+ for(j = 0; j < n; j++) {
638
+ tab = [];
639
+ for(i = 0; i < len; i++) {
640
+ tab.push({ key: i });
641
+ }
642
+ a = new WeakMap();
643
+ for(i = 0; i < len; i++) {
644
+ a.set(tab[i], i);
645
+ }
646
+ for(i = 0; i < len; i++) {
647
+ tab[i] = null;
648
+ }
649
+ }
650
+ return len * n;
651
+ }
652
+
653
+ function array_for(n)
654
+ {
655
+ var r, i, j, sum;
656
+ r = [];
657
+ for(i = 0; i < 100; i++)
658
+ r[i] = i;
659
+ for(j = 0; j < n; j++) {
660
+ sum = 0;
661
+ for(i = 0; i < 100; i++) {
662
+ sum += r[i];
663
+ }
664
+ global_res = sum;
665
+ }
666
+ return n * 100;
667
+ }
668
+
669
+ function array_for_in(n)
670
+ {
671
+ var r, i, j, sum;
672
+ r = [];
673
+ for(i = 0; i < 100; i++)
674
+ r[i] = i;
675
+ for(j = 0; j < n; j++) {
676
+ sum = 0;
677
+ for(i in r) {
678
+ sum += r[i];
679
+ }
680
+ global_res = sum;
681
+ }
682
+ return n * 100;
683
+ }
684
+
685
+ function array_for_of(n)
686
+ {
687
+ var r, i, j, sum;
688
+ r = [];
689
+ for(i = 0; i < 100; i++)
690
+ r[i] = i;
691
+ for(j = 0; j < n; j++) {
692
+ sum = 0;
693
+ for(i of r) {
694
+ sum += i;
695
+ }
696
+ global_res = sum;
697
+ }
698
+ return n * 100;
699
+ }
700
+
701
+ function math_min(n)
702
+ {
703
+ var i, j, r;
704
+ r = 0;
705
+ for(j = 0; j < n; j++) {
706
+ for(i = 0; i < 1000; i++)
707
+ r = Math.min(i, 500);
708
+ global_res = r;
709
+ }
710
+ return n * 1000;
711
+ }
712
+
713
+ function object_null(n)
714
+ {
715
+ var j;
716
+ for(j = 0; j < n; j++) {
717
+ global_res = {__proto__: null};
718
+ }
719
+ return n;
720
+ }
721
+
722
+ function regexp_ascii(n)
723
+ {
724
+ var i, j, r, s;
725
+ s = "the quick brown fox jumped over the lazy dog"
726
+ for(j = 0; j < n; j++) {
727
+ for(i = 0; i < 10000; i++)
728
+ r = /the quick brown fox/.exec(s)
729
+ global_res = r;
730
+ }
731
+ return n * 10000;
732
+ }
733
+
734
+ function regexp_utf16(n)
735
+ {
736
+ var i, j, r, s;
737
+ s = "the quick brown ᶠᵒˣ jumped over the lazy ᵈᵒᵍ"
738
+ for(j = 0; j < n; j++) {
739
+ for(i = 0; i < 10000; i++)
740
+ r = /the quick brown ᶠᵒˣ/.exec(s)
741
+ global_res = r;
742
+ }
743
+ return n * 10000;
744
+ }
745
+
746
+ /* incremental string contruction as local var */
747
+ function string_build1(n)
748
+ {
749
+ var i, j, r;
750
+ r = "";
751
+ for(j = 0; j < n; j++) {
752
+ for(i = 0; i < 100; i++)
753
+ r += "x";
754
+ global_res = r;
755
+ }
756
+ return n * 100;
757
+ }
758
+
759
+ /* incremental string contruction as arg */
760
+ function string_build2(n, r)
761
+ {
762
+ var i, j;
763
+ r = "";
764
+ for(j = 0; j < n; j++) {
765
+ for(i = 0; i < 100; i++)
766
+ r += "x";
767
+ global_res = r;
768
+ }
769
+ return n * 100;
770
+ }
771
+
772
+ /* incremental string contruction by prepending */
773
+ function string_build3(n, r)
774
+ {
775
+ var i, j;
776
+ r = "";
777
+ for(j = 0; j < n; j++) {
778
+ for(i = 0; i < 100; i++)
779
+ r = "x" + r;
780
+ global_res = r;
781
+ }
782
+ return n * 100;
783
+ }
784
+
785
+ /* incremental string contruction with multiple reference */
786
+ function string_build4(n)
787
+ {
788
+ var i, j, r, s;
789
+ r = "";
790
+ for(j = 0; j < n; j++) {
791
+ for(i = 0; i < 100; i++) {
792
+ s = r;
793
+ r += "x";
794
+ }
795
+ global_res = r;
796
+ }
797
+ return n * 100;
798
+ }
799
+
800
+ function string_slice1(n)
801
+ {
802
+ var i, j, s;
803
+ s = "x".repeat(1<<16);
804
+ for (i = 0; i < n; i++) {
805
+ for (j = 0; j < 1000; j++)
806
+ s.slice(-1); // too short for JSStringSlice
807
+ }
808
+ return n * 1000;
809
+ }
810
+
811
+ function string_slice2(n)
812
+ {
813
+ var i, j, s;
814
+ s = "x".repeat(1<<16);
815
+ for (i = 0; i < n; i++) {
816
+ for (j = 0; j < 1000; j++)
817
+ s.slice(-1024);
818
+ }
819
+ return n * 1000;
820
+ }
821
+
822
+ function string_slice3(n)
823
+ {
824
+ var i, j, s;
825
+ s = "x".repeat(1<<16);
826
+ for (i = 0; i < n; i++) {
827
+ for (j = 0; j < 1000; j++)
828
+ s.slice(1);
829
+ }
830
+ return n * 1000;
831
+ }
832
+
833
+ function string_concat(n, r)
834
+ {
835
+ var i, f, xs;
836
+ // generate a function on the fly; splatting the arguments with
837
+ // "x".concat(...xs) spends too much time inside the splat itself
838
+ xs = "x".repeat(r).split("").map(_ => "'x'");
839
+ f = new Function("", `'x'.concat(${ xs.join(",") })`);
840
+ for (i = 0; i < n; i++)
841
+ f();
842
+ return n;
843
+ }
844
+
845
+ function string_concat0(n) {
846
+ return string_concat(n, 0);
847
+ }
848
+
849
+ function string_concat1(n)
850
+ {
851
+ return string_concat(n, 1);
852
+ }
853
+
854
+ function string_concat2(n)
855
+ {
856
+ return string_concat(n, 32);
857
+ }
858
+
859
+ function string_concat3(n)
860
+ {
861
+ return string_concat(n, 256);
862
+ }
863
+
864
+ /* sort bench */
865
+
866
+ function sort_bench(text) {
867
+ function random(arr, n, def) {
868
+ for (var i = 0; i < n; i++)
869
+ arr[i] = def[(Math.random() * n) >> 0];
870
+ }
871
+ function random8(arr, n, def) {
872
+ for (var i = 0; i < n; i++)
873
+ arr[i] = def[(Math.random() * 256) >> 0];
874
+ }
875
+ function random1(arr, n, def) {
876
+ for (var i = 0; i < n; i++)
877
+ arr[i] = def[(Math.random() * 2) >> 0];
878
+ }
879
+ function hill(arr, n, def) {
880
+ var mid = n >> 1;
881
+ for (var i = 0; i < mid; i++)
882
+ arr[i] = def[i];
883
+ for (var i = mid; i < n; i++)
884
+ arr[i] = def[n - i];
885
+ }
886
+ function comb(arr, n, def) {
887
+ for (var i = 0; i < n; i++)
888
+ arr[i] = def[(i & 1) * i];
889
+ }
890
+ function crisscross(arr, n, def) {
891
+ for (var i = 0; i < n; i++)
892
+ arr[i] = def[(i & 1) ? n - i : i];
893
+ }
894
+ function zero(arr, n, def) {
895
+ for (var i = 0; i < n; i++)
896
+ arr[i] = def[0];
897
+ }
898
+ function increasing(arr, n, def) {
899
+ for (var i = 0; i < n; i++)
900
+ arr[i] = def[i];
901
+ }
902
+ function decreasing(arr, n, def) {
903
+ for (var i = 0; i < n; i++)
904
+ arr[i] = def[n - 1 - i];
905
+ }
906
+ function alternate(arr, n, def) {
907
+ for (var i = 0; i < n; i++)
908
+ arr[i] = def[i ^ 1];
909
+ }
910
+ function jigsaw(arr, n, def) {
911
+ for (var i = 0; i < n; i++)
912
+ arr[i] = def[i % (n >> 4)];
913
+ }
914
+ function incbutone(arr, n, def) {
915
+ for (var i = 0; i < n; i++)
916
+ arr[i] = def[i];
917
+ if (n > 0)
918
+ arr[n >> 2] = def[n];
919
+ }
920
+ function incbutfirst(arr, n, def) {
921
+ if (n > 0)
922
+ arr[0] = def[n];
923
+ for (var i = 1; i < n; i++)
924
+ arr[i] = def[i];
925
+ }
926
+ function incbutlast(arr, n, def) {
927
+ for (var i = 0; i < n - 1; i++)
928
+ arr[i] = def[i + 1];
929
+ if (n > 0)
930
+ arr[n - 1] = def[0];
931
+ }
932
+
933
+ var sort_cases = [ random, random8, random1, jigsaw, hill, comb,
934
+ crisscross, zero, increasing, decreasing, alternate,
935
+ incbutone, incbutlast, incbutfirst ];
936
+
937
+ var n = sort_bench.array_size || 10000;
938
+ var array_type = sort_bench.array_type || Array;
939
+ var def, arr;
940
+ var i, j, x, y;
941
+ var total = 0;
942
+
943
+ var save_total_score = total_score;
944
+ var save_total_scale = total_scale;
945
+
946
+ // initialize default sorted array (n + 1 elements)
947
+ def = new array_type(n + 1);
948
+ if (array_type == Array) {
949
+ for (i = 0; i <= n; i++) {
950
+ def[i] = i + "";
951
+ }
952
+ } else {
953
+ for (i = 0; i <= n; i++) {
954
+ def[i] = i;
955
+ }
956
+ }
957
+ def.sort();
958
+ for (var f of sort_cases) {
959
+ var ti = 0, tx = 0;
960
+ for (j = 0; j < 100; j++) {
961
+ arr = new array_type(n);
962
+ f(arr, n, def);
963
+ var t1 = get_clock();
964
+ arr.sort();
965
+ t1 = get_clock() - t1;
966
+ tx += t1;
967
+ if (!ti || ti > t1)
968
+ ti = t1;
969
+ if (tx >= clocks_per_sec)
970
+ break;
971
+ }
972
+ total += ti;
973
+
974
+ i = 0;
975
+ x = arr[0];
976
+ if (x !== void 0) {
977
+ for (i = 1; i < n; i++) {
978
+ y = arr[i];
979
+ if (y === void 0)
980
+ break;
981
+ if (x > y)
982
+ break;
983
+ x = y;
984
+ }
985
+ }
986
+ while (i < n && arr[i] === void 0)
987
+ i++;
988
+ if (i < n) {
989
+ console.log("sort_bench: out of order error for " + f.name +
990
+ " at offset " + (i - 1) +
991
+ ": " + arr[i - 1] + " > " + arr[i]);
992
+ }
993
+ if (sort_bench.verbose)
994
+ log_one("sort_" + f.name, n, ti, n * 100);
995
+ }
996
+ total_score = save_total_score;
997
+ total_scale = save_total_scale;
998
+ return total / n / 1000;
999
+ }
1000
+ sort_bench.bench = true;
1001
+ sort_bench.verbose = false;
1002
+
1003
+ function int_to_string(n)
1004
+ {
1005
+ var s, r, j;
1006
+ r = 0;
1007
+ for(j = 0; j < n; j++) {
1008
+ s = (j % 10) + '';
1009
+ s = (j % 100) + '';
1010
+ s = (j) + '';
1011
+ }
1012
+ return n * 3;
1013
+ }
1014
+
1015
+ function int_toString(n)
1016
+ {
1017
+ var s, r, j;
1018
+ r = 0;
1019
+ for(j = 0; j < n; j++) {
1020
+ s = (j % 10).toString();
1021
+ s = (j % 100).toString();
1022
+ s = (j).toString();
1023
+ }
1024
+ return n * 3;
1025
+ }
1026
+
1027
+ function float_to_string(n)
1028
+ {
1029
+ var s, r, j;
1030
+ r = 0;
1031
+ for(j = 0; j < n; j++) {
1032
+ s = (j % 10 + 0.1) + '';
1033
+ s = (j + 0.1) + '';
1034
+ s = (j * 12345678 + 0.1) + '';
1035
+ }
1036
+ return n * 3;
1037
+ }
1038
+
1039
+ function float_toString(n)
1040
+ {
1041
+ var s, r, j;
1042
+ r = 0;
1043
+ for(j = 0; j < n; j++) {
1044
+ s = (j % 10 + 0.1).toString();
1045
+ s = (j + 0.1).toString();
1046
+ s = (j * 12345678 + 0.1).toString();
1047
+ }
1048
+ return n * 3;
1049
+ }
1050
+
1051
+ function float_toFixed(n)
1052
+ {
1053
+ var s, r, j;
1054
+ r = 0;
1055
+ for(j = 0; j < n; j++) {
1056
+ s = (j % 10 + 0.1).toFixed(j % 16);
1057
+ s = (j + 0.1).toFixed(j % 16);
1058
+ s = (j * 12345678 + 0.1).toFixed(j % 16);
1059
+ }
1060
+ return n * 3;
1061
+ }
1062
+
1063
+ function float_toPrecision(n)
1064
+ {
1065
+ var s, r, j;
1066
+ r = 0;
1067
+ for(j = 0; j < n; j++) {
1068
+ s = (j % 10 + 0.1).toPrecision(j % 16 + 1);
1069
+ s = (j + 0.1).toPrecision(j % 16 + 1);
1070
+ s = (j * 12345678 + 0.1).toPrecision(j % 16 + 1);
1071
+ }
1072
+ return n * 3;
1073
+ }
1074
+
1075
+ function float_toExponential(n)
1076
+ {
1077
+ var s, r, j;
1078
+ r = 0;
1079
+ for(j = 0; j < n; j++) {
1080
+ s = (j % 10 + 0.1).toExponential(j % 16);
1081
+ s = (j + 0.1).toExponential(j % 16);
1082
+ s = (j * 12345678 + 0.1).toExponential(j % 16);
1083
+ }
1084
+ return n * 3;
1085
+ }
1086
+
1087
+ function string_to_int(n)
1088
+ {
1089
+ var s, r, j;
1090
+ r = 0;
1091
+ s = "12345";
1092
+ r = 0;
1093
+ for(j = 0; j < n; j++) {
1094
+ r += (s | 0);
1095
+ }
1096
+ global_res = r;
1097
+ return n;
1098
+ }
1099
+
1100
+ function string_to_float(n)
1101
+ {
1102
+ var s, r, j;
1103
+ r = 0;
1104
+ s = "12345.6";
1105
+ r = 0;
1106
+ for(j = 0; j < n; j++) {
1107
+ r -= s;
1108
+ }
1109
+ global_res = r;
1110
+ return n;
1111
+ }
1112
+
1113
+ function load_result(filename)
1114
+ {
1115
+ var f, str, res;
1116
+ if (typeof std === "undefined")
1117
+ return null;
1118
+ f = std.open(filename, "r");
1119
+ if (!f)
1120
+ return null;
1121
+ str = f.readAsString();
1122
+ res = JSON.parse(str);
1123
+ f.close();
1124
+ return res;
1125
+ }
1126
+
1127
+ function save_result(filename, obj)
1128
+ {
1129
+ var f;
1130
+ if (typeof std === "undefined")
1131
+ return;
1132
+ f = std.open(filename, "w");
1133
+ f.puts(JSON.stringify(obj, null, 2));
1134
+ f.puts("\n");
1135
+ f.close();
1136
+ }
1137
+
1138
+ function main(argc, argv, g)
1139
+ {
1140
+ var test_list = [
1141
+ empty_loop,
1142
+ date_now,
1143
+ prop_read,
1144
+ prop_write,
1145
+ prop_create,
1146
+ prop_delete,
1147
+ array_read,
1148
+ array_write,
1149
+ array_prop_create,
1150
+ array_length_decr,
1151
+ array_hole_length_decr,
1152
+ array_push,
1153
+ array_pop,
1154
+ typed_array_read,
1155
+ typed_array_write,
1156
+ global_read,
1157
+ global_write,
1158
+ global_write_strict,
1159
+ local_destruct,
1160
+ global_destruct,
1161
+ global_destruct_strict,
1162
+ func_call,
1163
+ closure_var,
1164
+ int_arith,
1165
+ float_arith,
1166
+ map_set,
1167
+ map_delete,
1168
+ weak_map_set,
1169
+ weak_map_delete,
1170
+ array_for,
1171
+ array_for_in,
1172
+ array_for_of,
1173
+ math_min,
1174
+ object_null,
1175
+ regexp_ascii,
1176
+ regexp_utf16,
1177
+ string_build1,
1178
+ string_build2,
1179
+ //string_build3,
1180
+ //string_build4,
1181
+ string_concat0,
1182
+ string_concat1,
1183
+ string_concat2,
1184
+ string_concat3,
1185
+ string_slice1,
1186
+ string_slice2,
1187
+ string_slice3,
1188
+ sort_bench,
1189
+ int_to_string,
1190
+ int_toString,
1191
+ float_to_string,
1192
+ float_toString,
1193
+ float_toFixed,
1194
+ float_toPrecision,
1195
+ float_toExponential,
1196
+ string_to_int,
1197
+ string_to_float,
1198
+ ];
1199
+ var tests = [];
1200
+ var i, j, n, f, name, found;
1201
+
1202
+ if (typeof BigInt == "function") {
1203
+ /* BigInt test */
1204
+ test_list.push(bigint64_arith);
1205
+ test_list.push(bigint256_arith);
1206
+ }
1207
+
1208
+ for (i = 1; i < argc;) {
1209
+ name = argv[i++];
1210
+ if (name == "-a") {
1211
+ sort_bench.verbose = true;
1212
+ continue;
1213
+ }
1214
+ if (name == "-t") {
1215
+ name = argv[i++];
1216
+ sort_bench.array_type = g[name];
1217
+ if (typeof sort_bench.array_type != "function") {
1218
+ console.log("unknown array type: " + name);
1219
+ return 1;
1220
+ }
1221
+ continue;
1222
+ }
1223
+ if (name == "-n") {
1224
+ sort_bench.array_size = +argv[i++];
1225
+ continue;
1226
+ }
1227
+ for (j = 0, found = false; j < test_list.length; j++) {
1228
+ f = test_list[j];
1229
+ if (f.name.startsWith(name)) {
1230
+ tests.push(f);
1231
+ found = true;
1232
+ }
1233
+ }
1234
+ if (!found) {
1235
+ console.log("unknown benchmark: " + name);
1236
+ return 1;
1237
+ }
1238
+ }
1239
+ if (tests.length == 0)
1240
+ tests = test_list;
1241
+
1242
+ ref_data = load_result("microbench.txt");
1243
+ log_data = {};
1244
+ log_line.apply(null, heads);
1245
+ n = 0;
1246
+
1247
+ for(i = 0; i < tests.length; i++) {
1248
+ f = tests[i];
1249
+ bench(f, f.name, ref_data, log_data);
1250
+ if (ref_data && ref_data[f.name])
1251
+ n++;
1252
+ }
1253
+ if (ref_data)
1254
+ log_line("total", "", total[2], total[3], total_score * 100 / total_scale);
1255
+ else
1256
+ log_line("total", "", total[2]);
1257
+
1258
+ if (tests == test_list)
1259
+ save_result("microbench-new.txt", log_data);
1260
+ }
1261
+
1262
+ if (typeof scriptArgs === "undefined") {
1263
+ scriptArgs = [];
1264
+ if (typeof process.argv === "object")
1265
+ scriptArgs = process.argv.slice(1);
1266
+ }
1267
+ main(scriptArgs.length, scriptArgs, this);