From 9c6996b54e2ab1006dfc87642f78b0c23a1a549a Mon Sep 17 00:00:00 2001 From: ValKmjolnir Date: Sat, 3 Dec 2022 01:24:56 +0800 Subject: [PATCH] :zap: update test files --- makefile | 22 ++++++++------- stl/sort.nas | 34 ++++++++++++++++++++--- test/ascii-art.nas | 2 +- test/calc.nas | 1 + test/coroutine.nas | 7 ++--- test/datalog.nas | 63 +++++++++++++++++++++++++++++++++++++++++++ test/donuts.nas | 6 ++++- test/life.nas | 21 ++++++++------- test/md5compare.nas | 4 +-- test/occupation.nas | 60 ++++++++++++++++++++++++++++++++++++----- test/quick_sort.nas | 27 ++++++++++++++++++- test/snake.nas | 44 +++++++++++++++++------------- test/tetris.nas | 19 ++++++++----- test/wavecollapse.nas | 2 +- 14 files changed, 247 insertions(+), 65 deletions(-) create mode 100644 test/datalog.nas diff --git a/makefile b/makefile index 5ad628f..5816e85 100644 --- a/makefile +++ b/makefile @@ -38,14 +38,15 @@ test:nasal @ ./nasal -a -c test/bfconvertor.nas @ ./nasal -d test/bfs.nas @ ./nasal -t test/bigloop.nas - @ ./nasal -e test/bp.nas + @ ./nasal -t test/bp.nas @ ./nasal -d test/calc.nas @ ./nasal -e test/choice.nas @ ./nasal -e test/class.nas - @ ./nasal -t -d test/console3D.nas + @ ./nasal -t -d test/console3D.nas 50 @ ./nasal -e test/coroutine.nas + @ ./nasal -t -d test/datalog.nas @ ./nasal -e test/diff.nas - @ ./nasal -e test/donuts.nas + @ ./nasal -e test/donuts.nas 100 -@ ./nasal -d test/exception.nas @ ./nasal -t -d test/fib.nas @ ./nasal -e test/filesystem.nas @@ -62,16 +63,17 @@ test:nasal @ ./nasal -t -d test/md5compare.nas -@ ./nasal -d test/module_test.nas @ ./nasal -e test/nasal_test.nas - @ ./nasal -c test/occupation.nas + @ ./nasal test/occupation.nas 10 @ ./nasal -t -d test/pi.nas @ ./nasal -c test/ppmgen.nas @ ./nasal -t -d test/prime.nas @ ./nasal -e test/qrcode.nas @ ./nasal -t -d test/quick_sort.nas @ ./nasal -e test/scalar.nas hello world - -@ ./nasal -c -t test/snake.nas - @ ./nasal -c -e test/trait.nas - -@ ./nasal -c -t test/tetris.nas - @ ./nasal -c -t -d test/turingmachine.nas - @ ./nasal -c -t -d test/ycombinator.nas - @ ./nasal -d test/wavecollapse.nas \ No newline at end of file + -@ ./nasal -t test/snake.nas --skip + @ ./nasal -e test/trait.nas + -@ ./nasal -t test/tetris.nas --skip + @ ./nasal -t -d test/turingmachine.nas + @ ./nasal -d test/wavecollapse.nas + @ ./nasal test/word_collector.nas test/md5compare.nas + @ ./nasal -t -d test/ycombinator.nas \ No newline at end of file diff --git a/stl/sort.nas b/stl/sort.nas index cb2cf34..109d8bd 100644 --- a/stl/sort.nas +++ b/stl/sort.nas @@ -1,8 +1,6 @@ # sort.nas # valkmjolnir 2021/4/2 -# please make sure the compare function has the function like <= or >= -# only using < or > may cause infinite loop or the program may crash var sort=func(){ srand(); # be aware! this causes global changes var quick_sort_core=func(vec,left,right,cmp){ @@ -10,20 +8,48 @@ var sort=func(){ 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!=j){ + 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/100){ + last_step=i; + print(bar.bar((i+1)/n)~" "~str(int((i+1)/n*100))~"% \r"); + } + } + print(bar.bar((i+1)/n)~" 100% | ",ts.elapsedMSec()/1000," s | "); + + var mess=func(vec){ + var s=size(vec); + for(var i=s-1;i>=0;i-=1){ + var r=int(rand()*i); + (vec[r],vec[i])=(vec[i],vec[r]); + } + } + + mess(color); + mess(message); + + + ts.stamp(); + sort(color,func(a,b){return a[2]res){ + left=mid+1; + }else{ + right=mid-1; + } + } + } + + println(cnt," result(s) in ",ts.elapsedMSec()/1000," sec"); +} + +for(var i=100;i<1e6;i*=10) + test(i); \ No newline at end of file diff --git a/test/donuts.nas b/test/donuts.nas index d2bd4b4..ba6a15a 100644 --- a/test/donuts.nas +++ b/test/donuts.nas @@ -49,4 +49,8 @@ var main=func(run_time){ } } -main(5e2); \ No newline at end of file +if(size(runtime.argv()) and !math.isnan(num(runtime.argv()[0]))){ + main(num(runtime.argv()[0])); +}else{ + main(5e2); +} \ No newline at end of file diff --git a/test/life.nas b/test/life.nas index e18df02..865d857 100644 --- a/test/life.nas +++ b/test/life.nas @@ -1,23 +1,22 @@ var map=nil; var check=func(x,y){ - if(x>14) x=0; - if(y>19) y=0; + if(x>29) x=0; + if(y>49) y=0; return map[x][y]; } var new_map=func(){ var tmp=[]; - setsize(tmp,15); + setsize(tmp,30); forindex(var i;tmp){ tmp[i]=[]; - setsize(tmp[i],20); + setsize(tmp[i],50); } return tmp; } -var prt=func() -{ +var prt=func(){ var s='\e[0;0H'; foreach(var line;map){ foreach(var elem;line) @@ -35,15 +34,17 @@ func(){ print("\ec"); rand(time(0)); map=new_map(); + forindex(var i;map) forindex(var j;map[i]) - map[i][j]=rand()>0.7?'O':' '; + map[i][j]=rand()<0.45?'O':' '; + var calc=[[0,1],[1,0],[0,-1],[-1,0],[1,1],[1,-1],[-1,-1],[-1,1]]; - for(var r=0;r<100;r+=1){ + for(var r=0;r<400;r+=1){ prt(map); var tmp=new_map(); - for(var i=0;i<15;i+=1) - for(var j=0;j<20;j+=1){ + for(var i=0;i<30;i+=1) + for(var j=0;j<50;j+=1){ var cnt=0; foreach(var k;calc) cnt+=(check(i+k[0],j+k[1])=='O'); diff --git a/test/md5compare.nas b/test/md5compare.nas index f1232b6..175c497 100644 --- a/test/md5compare.nas +++ b/test/md5compare.nas @@ -46,8 +46,8 @@ var filechecksum=func(){ "./test/bp.nas", "./test/calc.nas", "./test/choice.nas", "./test/class.nas", "./test/console3D.nas", - "./test/coroutine.nas", "./test/diff.nas", - "./test/donuts.nas", + "./test/coroutine.nas", "./test/datalog.nas", + "./test/diff.nas", "./test/donuts.nas", "./test/exception.nas", "./test/fib.nas", "./test/filesystem.nas", "./test/hexdump.nas", "./test/httptest.nas", "./test/json.nas", diff --git a/test/occupation.nas b/test/occupation.nas index de6e4a0..cfa2e00 100644 --- a/test/occupation.nas +++ b/test/occupation.nas @@ -2,9 +2,14 @@ import.stl.process_bar; import.module.libkey; var is_windows_platform=os.platform()=="windows"; +var is_macos_platform=os.platform()=="macOS"; + +if(is_windows_platform){ + system("chcp 65001"); +} var cpu_stat=func(){ - if(is_windows_platform) + if(is_windows_platform or is_macos_platform) return nil; var cpu=split("\n",io.fin("/proc/stat"))[0]; cpu=split(" ",cpu); @@ -35,7 +40,7 @@ var cpu_occupation=func(){ } } var cpu1=cpu_stat(); - if(is_windows_platform){ + if(is_windows_platform or is_macos_platform){ coroutine.yield(0); continue; } @@ -47,7 +52,7 @@ var cpu_occupation=func(){ } var mem_occupation=func(){ - if(is_windows_platform) + if(is_windows_platform or is_macos_platform) return {MemTotal:math.inf,MemFree:math.inf}; var meminfo=split("\n",io.fin("/proc/meminfo")); var mem_res={}; @@ -60,10 +65,22 @@ var mem_occupation=func(){ } func(){ + var limited_loop=(size(runtime.argv())!=0 and !math.isnan(num(runtime.argv()[0]))); + if(limited_loop){ + limited_loop=num(runtime.argv()[0]); + }else{ + limited_loop=-1; + } + var rise=[" ","▁","▂","▃","▄","▅","▆","▇","█"]; + var total=0; + var statistics=[]; + setsize(statistics,70); + var co=coroutine.create(cpu_occupation); - var bar=process_bar.high_resolution_bar(30); + var bar=process_bar.high_resolution_bar(48); print("\ec"); - while(1){ + while(limited_loop!=0){ + limited_loop=limited_loop<0?limited_loop:limited_loop-1; var mem=mem_occupation(); var mem_occ=(mem.MemTotal-mem.MemFree)/mem.MemTotal*100; if(math.isnan(mem_occ) or mem_occ<0 or mem_occ>100){ @@ -81,6 +98,37 @@ func(){ println("\e[4;1H\e[1m Memory free(GB) : \e[0m\e[36m",mem.MemFree/1024/1024,"\e[0m"); println("\e[5;1H\e[1m Memory occupation(%): \e[0m",mem_occ>60?"\e[91m":"\e[32m",bar.bar(mem_occ/100)~" ",mem_occ,"\e[0m "); println("\e[6;1H\e[1m CPU occupation(%) : \e[0m",cpu_occ>90?"\e[91m":"\e[32m",bar.bar(cpu_occ/100)~" ",cpu_occ,"\e[0m "); - println("\e[7;1H Press 'q' to quit."); + + for(var i=0;i0.5?-1:1); + statistics[int(size(statistics)/2+u*size(statistics)/2)]+=1; + } + var s=["","","",""]; + foreach(var st;statistics){ + var max_rate=100/size(statistics); + var rate=st/total*100; + for(var i=size(s)-1;i>=0;i-=1){ + if(rate>=max_rate){ + s[i]~="█"; + rate-=max_rate; + }else{ + s[i]~=rise[rate/max_rate*size(rise)]; + rate=0; + } + } + } + var tmp=""; + for(var i=0;i