code wiki / _hdl_build / nx_sort_test.nx

nx_sort_test.nx source

↩ module page · 26 lines · 1736 B

1// nx_sort_test.nx -- verify Array.prototype.sort: comparator, default ToString, stability, + the Sizzle 2// sortStable idiom S.split("").sort(cmp).join(""). 3import "nx_syscalls.nx" 4import "nx_js_eval.nx" 5func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 6func cw(s: *u8) -> i64 { sys_write(1,s,slen(s)); return 0 } 7func run1(label: *u8, js: *u8) -> i64 { 8 js_set_rt_dbg(1) 9 let obx: *i64 = sys_mmap(16) as *i64 10 js_run_source_keep_doc(js, slen(js), 0 as *u8, 0, obx) 11 let genv: *i64 = (obx[1]) as *i64 12 cw(label); cw(": " as *u8) 13 if (genv as i64)==0 { cw("NULL\n" as *u8); return 1 } 14 let ub: *u8 = sys_mmap(2048); let t: i64 = js_pending_total(genv) 15 if t==0 { cw("THREW(no fetch)" as *u8) } else { var i: i64=0; while i<t { let ul: i64=js_pending_url(genv,i,ub,2048); if ul>0 { cw(ub); cw(" " as *u8) } i=i+1 } } 16 cw("\n" as *u8); return 0 17} 18func main() -> i64 { 19 run1("A numeric cmp " as *u8, "var a=[3,1,2,5,4];a.sort(function(x,y){return x-y});fetch('x/'+a.join(','));" as *u8) 20 run1("B reverse cmp " as *u8, "var a=[1,2,3];a.sort(function(x,y){return y-x});fetch('x/'+a.join(','));" as *u8) 21 run1("C default sort " as *u8, "var a=['banana','apple','cherry'];a.sort();fetch('x/'+a.join(','));" as *u8) 22 run1("D returns arr " as *u8, "var a=[2,1];var r=a.sort(function(x,y){return x-y});fetch('x/'+(r===a)+'-'+r.join(''));" as *u8) 23 run1("E sizzle stable " as *u8, "var S='sizzle'+1;var l=function(a,b){return a<b?-1:a>b?1:0};var st=S.split('').sort(l).join('')===S;fetch('x/stable-'+st);" as *u8) 24 run1("F empty+single " as *u8, "var a=[];a.sort();var b=[7];b.sort(function(x,y){return x-y});fetch('x/'+a.length+'-'+b[0]);" as *u8) 25 return 0 26}