diff --git a/module/libkey.nas b/module/libkey.nas index d692c57..0213b59 100644 --- a/module/libkey.nas +++ b/module/libkey.nas @@ -1,10 +1,17 @@ -var lib=dylib.dlopen("libkey"~(os.platform()=="windows"?".dll":".so")); -var kb=lib.nas_kbhit; -var gt=lib.nas_getch; -var nb=lib.nas_noblock; -var call=dylib.limitcall(0); - -var kbhit = func(){return call(kb);} -var getch = func(){return call(gt);} -var nonblock = func(){return call(nb);} +var ( + kbhit, + getch, + nonblock +) = func { + var lib = dylib.dlopen("libkey"~(os.platform()=="windows"? ".dll":".so")); + var kb = lib.nas_kbhit; + var gt = lib.nas_getch; + var nb = lib.nas_noblock; + var call = dylib.limitcall(0); + return [ + func(){return call(kb);}, + func(){return call(gt);}, + func(){return call(nb);} + ]; +}(); diff --git a/std/lib.nas b/std/lib.nas index ae1e969..5af1204 100644 --- a/std/lib.nas +++ b/std/lib.nas @@ -217,6 +217,35 @@ var println = func(elems...) { return __println(elems); } +# sort function using quick sort +# not very efficient... :( +var sort=func(){ + srand(); # be aware! this causes global changes + var quick_sort_core=func(vec,left,right,cmp){ + if(left>=right) return nil; + var base=left+int(rand()*(right-left)); + (vec[left],vec[base])=(vec[base],vec[left]); + var (i,j,tmp)=(left,right,vec[left]); + while(i=right) return nil; - var base=left+int(rand()*(right-left)); - (vec[left],vec[base])=(vec[base],vec[left]); - var (i,j,tmp)=(left,right,vec[left]); - while(i=right) return nil; - var base=left+int(rand()*(right-left)); - (vec[left],vec[base])=(vec[base],vec[left]); - var (i,j,tmp)=(left,right,vec[left]); - while(i1?1:progress[j]; - print("\e[1000D",bar.bar(progress[j])," ",rightpad(str(int(progress[j]*100)),3)," % \n") + print("\e[1000D",bar.bar(progress[j])," ",padding.rightpad(str(int(progress[j]*100)),3)," % \n") } unix.sleep(0.01); } @@ -203,9 +201,15 @@ if(os.platform()=="windows"){ trans_ttf("just for test"); trans_ttf(" ValKmjolnir "); +print("curve 1\n"); curve1(); +print("curve 2\n"); curve2(); +print("curve 3\n"); curve3(); +print("curve 4\n"); curve4(); +print("curve 5\n"); curve5(); +print("ANSI escape sequence\n"); ansi_escape_sequence(); diff --git a/test/calc.nas b/test/calc.nas index b6a5cb1..f1de5ac 100644 --- a/test/calc.nas +++ b/test/calc.nas @@ -1,10 +1,5 @@ import.std.padding; import.std.file; -import.std.sort; - -var sort = sort.sort; - -var (leftpad, rightpad) = (padding.leftpad, padding.rightpad); var source=file.find_all_files_with_extension("./src","cpp","h"); sort(source,func(a,b){return cmp(a,b)<0}); @@ -55,7 +50,7 @@ var count=func(s,c){ var column=func(number){ number=number>=1000?substr(str(number/1000),0,3)~'k':str(number); - return leftpad(number,6); + return padding.leftpad(number,6); } var calc=func(codetype,files,path=""){ @@ -64,20 +59,20 @@ var calc=func(codetype,files,path=""){ forindex(var i;files){ var s=io.exists(path~files[i])?io.readfile(path~files[i]):""; (line_cnt,semi_cnt)=(count(s,'\n'),count(s,';')); - println(rightpad(files[i],padding_length),'|', + println(padding.rightpad(files[i],padding_length),'|', column(line_cnt),' line |', column(semi_cnt),' semi |', - leftpad(str(int(size(s)/1024)),4),' kb | ', + padding.leftpad(str(int(size(s)/1024)),4),' kb | ', md5(s),' |'); bytes+=size(s); ctx~=s; line+=line_cnt; semi+=semi_cnt; } - println(rightpad("total:",padding_length),'|', + println(padding.rightpad("total:",padding_length),'|', column(line),' line |', column(semi),' semi |', - leftpad(str(int(bytes/1024)),4),' kb | ', + padding.leftpad(str(int(bytes/1024)),4),' kb | ', md5(ctx),' |\n'); return int(bytes/1024); } @@ -86,4 +81,4 @@ var all=calc("source code:",source,"src/") +calc("lib:",lib,"std/") +calc("test file:",testfile,"test/") +calc("module:",module,"module/"); -println(rightpad("total:",padding_length),'|',leftpad(str(all),6),' kb |'); \ No newline at end of file +println(padding.rightpad("total:",padding_length),'|',padding.leftpad(str(all),6),' kb |'); \ No newline at end of file diff --git a/test/console3D.nas b/test/console3D.nas index d696515..ff8f794 100644 --- a/test/console3D.nas +++ b/test/console3D.nas @@ -25,15 +25,26 @@ import.module.libmat; func(){ # allocate more spaces - var t=[]; - for(var i=0;i<16384;i+=1) - append(t,[],[],[],str(i)); - t=[]; + for(var i = 0; i<10; i+=1) { + runtime.gc.extend("str"); + runtime.gc.extend("vec"); + } }(); -var (max,min,sqrt,sin,cos,abs)=(math.max,math.min,math.sqrt,math.sin,math.cos,math.abs); +var (max,min,sqrt,sin,cos,abs)=( + math.max, + math.min, + math.sqrt, + math.sin, + math.cos, + math.abs +); + +var (vec2,vec3)=( + libmat.vec2.new, + libmat.vec3.new +); -var (vec2,vec3)=(libmat.vec2.new,libmat.vec3.new); var (vec2add,vec2sub,vec2mul,vec2div,vec2len)=( libmat.vec2.add, libmat.vec2.sub, @@ -41,6 +52,7 @@ var (vec2add,vec2sub,vec2mul,vec2div,vec2len)=( libmat.vec2.div, libmat.vec2.len ); + var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=( libmat.vec3.add, libmat.vec3.sub, @@ -51,6 +63,7 @@ var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=( libmat.vec3.len, libmat.vec3.dot ); + var (rotateX,rotateY,rotateZ)=( libmat.vec3.rx, libmat.vec3.ry, diff --git a/test/coroutine.nas b/test/coroutine.nas index 0bcb539..4d6c09a 100644 --- a/test/coroutine.nas +++ b/test/coroutine.nas @@ -3,8 +3,6 @@ import.std.process_bar; import.std.padding; -var (leftpad, rightpad) = (padding.leftpad, padding.rightpad); - if(os.platform()=="windows"){ system("chcp 65001"); system("color"); @@ -108,12 +106,17 @@ for(var t=0;t<10;t+=1){ coroutine.resume(co); if(counter-int(counter/1000)*1000==0){ var rate=counter/2e5; - print(" ",bar.bar(rate)," ",leftpad(str(int(rate*100)),3),"% | ",str(1e3*int(counter/tm.elapsedMSec()))," tasks/s \r"); + print(" ",bar.bar(rate)," ", + padding.leftpad(str(int(rate*100)),3),"% | ", + str(1e3*int(counter/tm.elapsedMSec())), + " tasks/s \r"); } } tm.stamp(); for(var i=0;i<1e5;i+=1) consumer(); - println(" ",bar.bar(1)," 100% | ",str(int(1e3*counter/tm.elapsedMSec()))," tasks/s "); + println(" ",bar.bar(1)," 100% | ", + str(int(1e3*counter/tm.elapsedMSec())), + " tasks/s "); } \ No newline at end of file diff --git a/test/datalog.nas b/test/datalog.nas index 6b0fc5d..4530a24 100644 --- a/test/datalog.nas +++ b/test/datalog.nas @@ -1,10 +1,6 @@ -import.std.sort; import.std.padding; import.std.process_bar; -var sort = sort.sort; -var (leftpad, rightpad) = (padding.leftpad, padding.rightpad); - var mess=func(vec) { srand(); var s=size(vec); @@ -30,10 +26,12 @@ var project=func(n) { # generate process bar, every 0.2% if((i-last_step)/n>1/500) { last_step=i; - print(" ",bar.bar((i+1)/n)," ",leftpad(str(int((i+1)/n*100)),3),"% | \r"); + print(" ",bar.bar((i+1)/n)," ", + padding.leftpad(str(int((i+1)/n*100)),3),"% | \r"); } } - print(" ",bar.bar(1)~" 100% | ",rightpad(str(ts.elapsedMSec()/1000),5)," s | "); + print(" ",bar.bar(1)~" 100% | ", + padding.rightpad(str(ts.elapsedMSec()/1000),5)," s | "); mess(color); @@ -44,7 +42,7 @@ var project=func(n) { cnt+=1; } - println(rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); + println(padding.rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); } var select=func(n) { @@ -66,10 +64,12 @@ var select=func(n) { # generate process bar, every 0.2% if((i-last_step)/n>1/500) { last_step=i; - print(" ",bar.bar((i+1)/n)," ",leftpad(str(int((i+1)/n*100)),3),"% | \r"); + print(" ",bar.bar((i+1)/n)," ", + padding.leftpad(str(int((i+1)/n*100)),3),"% | \r"); } } - print(" ",bar.bar(1)~" 100% | ",rightpad(str(ts.elapsedMSec()/1000),5)," s | "); + print(" ",bar.bar(1)~" 100% | ", + padding.rightpad(str(ts.elapsedMSec()/1000),5)," s | "); mess(color); mess(message); @@ -97,7 +97,7 @@ var select=func(n) { } } - println(rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); + println(padding.rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); } var cartesian=func(n) { @@ -119,10 +119,12 @@ var cartesian=func(n) { # generate process bar, every 0.2% if((i-last_step)/n>1/500) { last_step=i; - print(" ",bar.bar((i+1)/n)," ",leftpad(str(int((i+1)/n*100)),3),"% | \r"); + print(" ",bar.bar((i+1)/n)," ", + padding.leftpad(str(int((i+1)/n*100)),3),"% | \r"); } } - print(" ",bar.bar(1)~" 100% | ",rightpad(str(ts.elapsedMSec()/1000),5)," s | "); + print(" ",bar.bar(1)~" 100% | ", + padding.rightpad(str(ts.elapsedMSec()/1000),5)," s | "); mess(color); mess(message); @@ -143,7 +145,7 @@ var cartesian=func(n) { } } - println(rightpad(str(size(res)),7)," in ",ts.elapsedMSec()/1000," s"); + println(padding.rightpad(str(size(res)),7)," in ",ts.elapsedMSec()/1000," s"); } println("project"); diff --git a/test/md5compare.nas b/test/md5compare.nas index 060cbae..42c5133 100644 --- a/test/md5compare.nas +++ b/test/md5compare.nas @@ -1,9 +1,8 @@ import.test.md5_self; import.std.process_bar; import.std.file; -srand(); -var _md5 = md5_self._md5; +srand(); var compare=func() { var ch=[ @@ -24,7 +23,7 @@ var compare=func() { } byte+=size(s); var res=md5(s); - if(cmp(res,_md5(s))) { + if(cmp(res,md5_self._md5(s))) { die("error: "~str(i)); } if (i-begin-int((i-begin)/4)*4==0) { @@ -75,7 +74,7 @@ var filechecksum=func(){ var f=io.readfile(files[i]); var res=md5(f); byte+=size(f); - if(cmp(res,_md5(f))){ + if(cmp(res,md5_self._md5(f))){ die("error: "~files[i]); } print( diff --git a/test/quick_sort.nas b/test/quick_sort.nas index 53ce809..af10a5f 100644 --- a/test/quick_sort.nas +++ b/test/quick_sort.nas @@ -1,10 +1,32 @@ -import.std.sort; -var var_sort = sort.var_sort; -var sort = sort.sort; +var var_sort=func(){ + srand(); # be aware! this causes global changes + var quick_sort_core=func(vec,left,right){ + if(left>=right) return nil; + var base=left+int(rand()*(right-left)); + (vec[left],vec[base])=(vec[base],vec[left]); + var (i,j,tmp)=(left,right,vec[left]); + while(i