code wiki / _hdl_build / nx_js_h2h_probe.nx
nx_js_h2h_probe.nx source
↩ module page · 24 lines · 1964 B
1// probe the limits the h2h benchmark hit (fib depth/call-count, array capacity). expect_exit: 0
2// license_tier: ORIGINAL
3import "nx_js_vm.nx"
4func pw(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
5func pn(v: i64) -> i64 { if v==0 { sys_write(1,"0" as *u8,1); return 0 } var m: i64=v; if m<0 { sys_write(1,"-" as *u8,1); m=0-m } let t: *u8=sys_mmap(24); var k: i64=0; while m>0 { t[k]=(48+(m%10)) as u8; m=m/10; k=k+1 } let o: *u8=sys_mmap(24); var q: i64=k-1; var x: i64=0; while q>=0 { o[x]=t[q]; x=x+1; q=q-1 } sys_write(1,o,x); return 0 }
6func probe(src: *u8, name: *u8) -> i64 {
7 let out: *i64 = sys_mmap(16) as *i64
8 let rc: i64 = compile_run(src, out)
9 pw(" "); pw(name); pw(": rc="); pn(rc); pw(" tag="); pn(out[0]); pw(" pay="); pn(out[1]); pw("\n" as *u8)
10 return 0
11}
12func main(argc: i64, argv: *i64) -> i64 {
13 pw("=== h2h probe: find the real limits ===\n" as *u8)
14 probe("function fib(n){return n<2?n:fib(n-1)+fib(n-2);} fib(25)" as *u8, "fib(25) expect 75025" as *u8)
15 probe("function fib(n){return n<2?n:fib(n-1)+fib(n-2);} fib(28)" as *u8, "fib(28) expect 317811" as *u8)
16 probe("function fib(n){return n<2?n:fib(n-1)+fib(n-2);} fib(30)" as *u8, "fib(30) expect 832040" as *u8)
17 probe("function fib(n){return n<2?n:fib(n-1)+fib(n-2);} fib(32)" as *u8, "fib(32) expect 2178309" as *u8)
18 probe("var a=[];a[1000]=7;a[1000]" as *u8, "arr a[1000] expect 7" as *u8)
19 probe("var a=[];a[5000]=7;a[5000]" as *u8, "arr a[5000] expect 7" as *u8)
20 probe("var a=[];a[50000]=7;a[50000]" as *u8, "arr a[50000] expect 7" as *u8)
21 probe("var N=10000;var a=[];var i=2;var c=0;while(i<N){if(a[i]!=1){c=c+1;var j=i+i;while(j<N){a[j]=1;j=j+i;}}i=i+1;}c" as *u8, "sieve 10k expect 1229" as *u8)
22 probe("var N=100000;var a=[];var i=2;var c=0;while(i<N){if(a[i]!=1){c=c+1;var j=i+i;while(j<N){a[j]=1;j=j+i;}}i=i+1;}c" as *u8, "sieve 100k expect 9592" as *u8)
23 return 0
24}