⚡ update test files
This commit is contained in:
parent
eca978e2b3
commit
9c6996b54e
22
makefile
22
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
|
||||
-@ ./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
|
34
stl/sort.nas
34
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<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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -46,6 +46,7 @@ var testfile=[
|
|||
"class.nas",
|
||||
"console3D.nas",
|
||||
"coroutine.nas",
|
||||
"datalog.nas",
|
||||
"diff.nas",
|
||||
"donuts.nas",
|
||||
"exception.nas",
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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);
|
|
@ -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);
|
||||
}
|
|
@ -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');
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.");
|
||||
}
|
||||
}();
|
|
@ -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);
|
||||
}
|
|
@ -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());
|
|
@ -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());
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue