microbench.js/goabi0: date_parse failure
jnml@e5-1650:~/src/modernc.org/qbecc/lib$ go test -v -timeout 24h -short -run Quick -keep |& tee log
=== RUN TestQuickJS
mkdir -p .obj .obj/examples .obj/tests
qbecc -g -Wall -MMD -MF .obj/qjs.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/qjs.o qjs.c
qbecc -g -Wall -MMD -MF .obj/qjsc.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -DCONFIG_CC=\"qbecc\" -DCONFIG_PREFIX=\"/usr/local\" -O2 -c -o .obj/qjsc.o qjsc.c
qbecc -g -Wall -MMD -MF .obj/quickjs.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/quickjs.o quickjs.c
qbecc -g -Wall -MMD -MF .obj/dtoa.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/dtoa.o dtoa.c
qbecc -g -Wall -MMD -MF .obj/libregexp.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/libregexp.o libregexp.c
qbecc -g -Wall -MMD -MF .obj/libunicode.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/libunicode.o libunicode.c
qbecc -g -Wall -MMD -MF .obj/cutils.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/cutils.o cutils.c
qbecc -g -Wall -MMD -MF .obj/quickjs-libc.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/quickjs-libc.o quickjs-libc.c
qbecc -g -o qjsc .obj/qjsc.o .obj/quickjs.o .obj/dtoa.o .obj/libregexp.o .obj/libunicode.o .obj/cutils.o .obj/quickjs-libc.o -lm -lpthread -ldl
./qjsc -s -c -o repl.c -m repl.js
qbecc -g -Wall -MMD -MF .obj/repl.o.d -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion -fwrapv -D_GNU_SOURCE -DCONFIG_VERSION=\"2025-09-13\" -O2 -c -o .obj/repl.o repl.c
qbecc -g -rdynamic -o qjs .obj/qjs.o .obj/repl.o .obj/quickjs.o .obj/dtoa.o .obj/libregexp.o .obj/libunicode.o .obj/cutils.o .obj/quickjs-libc.o -lm -lpthread -ldl
TEST N TIME (ns) REF (ns) SCORE (1000)
empty_loop 20000 120.58
empty_down_loop 20000 128.99
empty_down_loop2 20000 164.54
empty_do_loop 20000 130.65
date_now 2000 1074.87
date_parse 100 3791.95
prop_read 5000 141.62
prop_write 10000 96.60
prop_update 5000 168.25
prop_create 500 306.73
prop_clone 500 327.52
prop_delete 200 594.49
array_read 2000 123.56
array_write 5000 93.76
array_prop_create 20 187.56
array_slice 20 126.20
array_length_decr 5 456.17
array_hole_length_decr 5 555.45
array_push 10 621.43
array_pop 5 805.50
typed_array_read 2000 129.70
typed_array_write 5000 95.53
global_read 5000 125.00
global_write 5000 123.60
global_write_strict 5000 123.64
local_destruct 200 1031.97
global_destruct 500 775.42
global_destruct_strict 500 775.25
global_func_call 2000 371.02
func_call 2000 323.20
func_closure_call 2000 325.71
int_arith 10 220.63
float_arith 10 246.82
map_set_string 1 2064.74
map_set_int 2 1065.44
map_set_bigint 2 1701.42
map_delete 1 2142.96
weak_map_set 1 2077.66
weak_map_delete 1 2413.32
array_for 100 214.70
array_for_in 50 487.11
array_for_of 100 251.47
math_min 5 446.86
regexp_ascii 1 3694.57
regexp_utf16 1 3822.52
string_build1 20 176.17
string_build1x 20 176.15
string_build2c 20 190.62
string_build2 10 302.19
string_build3 10 351.73
string_build4 10 329.00
string_build_large1 1 356.25
string_build_large2 1 403.26
int_to_string 5000 323.58
int_toString 2000 541.19
float_to_string 1000 1112.02
float_toString 500 1576.85
float_toFixed 1000 1167.27
float_toPrecision 1000 1321.83
float_toExponential 1000 1249.85
string_to_int 5000 574.60
string_to_float 5000 669.92
bigint32_arith 10 373.08
bigint64_arith 5 481.64
bigint256_arith 5 726.15
sort_bench 1 60.20
total 47530.23
TEST N TIME (ns) REF (ns) SCORE (1000)
empty_loop 20000 193.20
empty_down_loop 10000 239.26
empty_down_loop2 10000 314.32
empty_do_loop 10000 233.52
date_now 2000 1727.19
Date.parse error for 1
prop_read 5000 205.82
prop_write 5000 146.61
prop_update 2000 257.46
prop_create 500 497.52
prop_clone 200 663.10
prop_delete 100 1158.57
array_read 2000 198.11
array_write 2000 139.18
array_prop_create 10 281.54
array_slice 10 343.12
array_length_decr 5 844.78
array_hole_length_decr 2 1181.24
array_push 5 1167.69
array_pop 5 1421.70
typed_array_read 1000 222.14
typed_array_write 2000 138.38
global_read 5000 219.04
global_write 5000 201.14
global_write_strict 5000 200.97
local_destruct 100 2259.85
global_destruct 200 1557.34
global_destruct_strict 200 1558.22
global_func_call 1000 547.51
func_call 2000 462.83
func_closure_call 2000 470.90
int_arith 10 296.96
float_arith 10 280.96
map_set_string 1 3743.18
map_set_int 2 1758.69
map_set_bigint 1 2923.03
map_delete 1 3793.47
weak_map_set 1 3976.31
weak_map_delete 1 4324.06
array_for 100 289.83
array_for_in 50 891.83
array_for_of 50 550.51
math_min 5 674.42
regexp_ascii 1 6995.44
regexp_utf16 1 7045.38
string_build1 10 311.50
string_build1x 10 311.52
string_build2c 10 315.22
string_build2 5 663.21
string_build3 5 736.85
string_build4 5 704.24
string_build_large1 1 755.26
string_build_large2 1 836.04
int_to_string 2000 633.98
int_toString 1000 932.04
float_to_string 500 1826.51
float_toString 500 2426.59
float_toFixed 500 1929.83
float_toPrecision 500 2065.51
float_toExponential 500 2028.07
string_to_int 2000 1007.40
string_to_float 2000 1033.28
bigint32_arith 5 627.15
bigint64_arith 5 950.09
bigint256_arith 2 1509.70
sort_bench 1 137.43
total 78337.74
all_test.go:614: FAIL/GOABI0 error(s) detected
--- FAIL: TestQuickJS (128.44s)
FAIL
exit status 1
FAIL modernc.org/qbecc/lib 128.442s
jnml@e5-1650:~/src/modernc.org/qbecc/lib$
Smaller repro:
function date_parse(n) {
var x0 = 0, dx = 0;
var j;
for(j = 0; j < n; j++) {
var x1 = x0 - x0 % 1000;
var x2 = -x0;
var d2 = new Date(x2);
console.log(d2, d2.toISOString(), Date.parse(d2.toISOString()), x2);
if (Date.parse(d2.toISOString()) != x2) {
console.log("Date.parse error for " + x2);
}
dx = (dx * 1.1 + 1) >> 0;
x0 = (x0 + dx) % 8.64e15;
}
}
date_parse(2);
jnml@e5-1650:~/src/modernc.org/qbecc/lib/tmp/quickjs/gobi0$ qjs bug.js # gcc
Thu Jan 01 1970 01:00:00 GMT+0100 1970-01-01T00:00:00.000Z 0 0
Thu Jan 01 1970 00:59:59 GMT+0100 1969-12-31T23:59:59.999Z -1 -1
jnml@e5-1650:~/src/modernc.org/qbecc/lib/tmp/quickjs/gobi0$ ../qjs bug.js # qbecc
1970-01-01T00:00:00.000Z 1970-01-01T00:00:00.000Z 0 -0
1969-12-31T23:59:59.999Z 1969-12-31T23:59:59.999Z -1 -1
jnml@e5-1650:~/src/modernc.org/qbecc/lib/tmp/quickjs/gobi0$
jnml@e5-1650:~/src/modernc.org/qbecc/lib/tmp/quickjs/gobi0$ ./gobi0 bug.js # qbecc/GOABI0
1970-01-01T00:00:00.000Z 1970-01-01T00:00:00.000Z 0 -0
1970-02-19T17:02:47.295Z 1970-02-19T17:02:47.295Z 4294967295 -1
Date.parse error for -1