update test files

This commit is contained in:
ValKmjolnir 2022-12-03 01:24:56 +08:00
parent eca978e2b3
commit 9c6996b54e
14 changed files with 247 additions and 65 deletions

View File

@ -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
-@ ./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

View File

@ -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<j){
while(i<j and cmp(tmp,vec[j]))
j-=1;
vec[i]=vec[j];
while(i<j and cmp(vec[i],tmp))
i+=1;
vec[j]=vec[i];
j-=1;
}
vec[i]=tmp;
quick_sort_core(vec,left,i-1,cmp);
quick_sort_core(vec,i+1,right,cmp);
return nil;
}
return func(vec,cmp=func(a,b){return a<=b;}){
return func(vec,cmp=func(a,b){return a<b;}){
quick_sort_core(vec,0,size(vec)-1,cmp);
return nil;
}
}();
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<j){
while(i<j and tmp<vec[j])
j-=1;
vec[i]=vec[j];
while(i<j and vec[i]<tmp)
i+=1;
vec[j]=vec[i];
j-=1;
}
vec[i]=tmp;
quick_sort_core(vec,left,i-1,cmp);
quick_sort_core(vec,i+1,right,cmp);
return nil;
}
return func(vec){
quick_sort_core(vec,0,size(vec)-1,cmp);
return nil;
}

View File

@ -86,7 +86,7 @@ var curve3=func(line=2){
var shadow=[" ","░","▒","▓","█","▀","▄","▐","▌"];
var s="";
for(var i=0;i<size(arr);i+=1)
s~=shadow[arr[i]];
s~=shadow[arr[i]];
println(s);
}
return;

View File

@ -46,6 +46,7 @@ var testfile=[
"class.nas",
"console3D.nas",
"coroutine.nas",
"datalog.nas",
"diff.nas",
"donuts.nas",
"exception.nas",

View File

@ -73,7 +73,7 @@ println("coroutine state:\e[91m ",coroutine.status(co),"\e[0m");
println("ok");
# pressure test
var main=func(){
for(var t=0;t<5;t+=1){
var productor=func(){
for(var i=0;;i+=1)
coroutine.yield(i);
@ -96,7 +96,4 @@ var main=func(){
while(tm.elapsedMSec()<total)
consumer();
println();
}
for(var i=0;i<5;i+=1)
main();
}

63
test/datalog.nas Normal file
View File

@ -0,0 +1,63 @@
import.stl.sort;
import.stl.process_bar;
var test=func(n){
var ts=maketimestamp();
var bar=process_bar.high_resolution_bar(50);
var color=[];
var message=[];
setsize(color,n);
setsize(message,n);
var last_step=0;
ts.stamp();
for(var i=0;i<n;i+=1){
color[i]=[i,"color "~i,i+n*10];
message[i]=[i+n*10,"message "~i];
if((i-last_step)/n>1/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]<b[2]});
sort(message,func(a,b){return a[0]<b[0]});
var cnt=0;
foreach(var c;color){
var left=0;
var right=size(message)-1;
var data=c[2];
while(left<=right){
var mid=int((left+right)/2);
var res=message[mid][0];
if(data==res){
cnt+=1;
break;
}else if(data>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);

View File

@ -49,4 +49,8 @@ var main=func(run_time){
}
}
main(5e2);
if(size(runtime.argv()) and !math.isnan(num(runtime.argv()[0]))){
main(num(runtime.argv()[0]));
}else{
main(5e2);
}

View File

@ -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');

View File

@ -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",

View File

@ -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;i<size(statistics);i+=1){
total+=1;
var u=rand()*rand()*(rand()>0.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<size(statistics);i+=1){
tmp~="-";
}
println("\e[7;1H \e[32m+"~tmp~"+\e[0m");
println("\e[8;1H \e[32m|",s[0],"|\e[0m");
println("\e[9;1H \e[32m|",s[1],"|\e[0m");
println("\e[10;1H \e[32m|",s[2],"|\e[0m");
println("\e[11;1H \e[32m|",s[3],"|\e[0m");
println("\e[12;1H \e[32m+"~tmp~"+\e[0m");
println("\e[13;1H Press 'q' to quit.");
}
}();

View File

@ -4,4 +4,29 @@ rand(time(0));
for(var i=0;i<1e4;i+=1)
append(vec,int(rand()*1e5));
sort(vec);
println(vec);
println(vec);
var test=func(n){
var a=[];
setsize(a,n);
for(var i=0;i<n;i+=1){
a[i]=int(rand()*n);
}
var ts=maketimestamp();
ts.stamp();
var_sort(a);
println("[time] ",str(n)," in ",ts.elapsedMSec()/1000," sec (value)");
var a=[];
setsize(a,n);
for(var i=0;i<n;i+=1){
a[i]=int(rand()*n);
}
ts.stamp();
sort(a);
println("[time] ",str(n)," in ",ts.elapsedMSec()/1000," sec (lambda)");
}
for(var i=1000;i<1e7;i*=10){
test(i);
}

View File

@ -174,15 +174,22 @@ var game=func(x,y){
}
var co=coroutine.create(func(){
var t=maketimestamp();
while(1){
t.stamp();
while(t.elapsedMSec()<20);
coroutine.yield();
var moved=-1;
for(var i=0;i<30;i+=1){
var ch=libkey.nonblock();
if(moved==-1 and ch!=nil){
moved=ch;
}
coroutine.yield(nil);
unix.sleep(0.01);
}
coroutine.yield(moved);
}
});
var main=func(){
var main=func(argv){
var should_skip=(size(argv)!=0 and argv[0]=="--skip");
# enable unicode
if(os.platform()=="windows")
system("chcp 65001");
@ -191,12 +198,14 @@ var main=func(){
var g=game(15,10);
g.print();
print("\rpress any key to start...");
libkey.getch();
if(!should_skip){
libkey.getch();
}
print("\r \r");
var counter=20;
while(1){
var ch=libkey.nonblock();
if(ch!=nil){
while((var ch=coroutine.resume(co)[0])==nil);
if(ch!=nil and ch!=-1){
if(ch=='q'[0])
break;
elsif(ch=='p'[0]){
@ -206,20 +215,19 @@ var main=func(){
}
g.move(chr(ch));
}
counter-=1;
if(!counter){
counter=20;
g.next();
if(g.gameover())
break;
g.print();
}
coroutine.resume(co);
g.next();
if(g.gameover())
break;
g.print();
}
println(g.gameover()<=1?"game over.":"you win!");
println("press 'q' to quit.");
if(should_skip){
return;
}
while(libkey.getch()!='q'[0]);
}
main();
main(runtime.argv());

View File

@ -270,7 +270,9 @@ var mapgen=func(mapx,mapy){
};
}
var main=func(){
var main=func(argv){
var should_skip=(size(argv)!=0 and argv[0]=="--skip");
var init_counter=should_skip?5:30;
# windows use chcp 65001 to output unicode
if(os.platform()=="windows")
system("chcp 65001");
@ -292,10 +294,13 @@ var main=func(){
exchange();
var map=mapgen(mapx:12,mapy:18);
libkey.getch();
if(!should_skip){
libkey.getch();
}
print("\ec");
map.print();
var counter=30;
var counter=init_counter;
while(1){
# nonblock input one character
var ch=libkey.nonblock();
@ -325,7 +330,7 @@ var main=func(){
map.checkmap();
if(map.gameover())
break;
counter=30;
counter=init_counter;
}
unix.sleep(0.02);
counter-=1;
@ -341,7 +346,9 @@ var main=func(){
"\e[36m'\e[94mq\e[95m' ",
"\e[35mt\e[36mo \e[94mq\e[95mu\e[91mi\e[92mt\e[0m\n"
);
while(libkey.getch()!='q'[0]);
if(!should_skip){
while(libkey.getch()!='q'[0]);
}
};
main();
main(runtime.argv());

View File

@ -96,7 +96,7 @@ var map=func(){
# enable unicode
if(os.platform()=="windows")
system("chcp 65001");
map.new(80);
map.new(90);
var interval=1/160;
for(var iter=0;iter<100;iter+=1){
map.print(1);