📝 delete std/sort.nas & update test file

This commit is contained in:
ValKmjolnir 2023-07-23 00:30:14 +08:00
parent fe65085a7a
commit 31113ff69f
13 changed files with 143 additions and 127 deletions

View File

@ -1,10 +1,17 @@
var lib=dylib.dlopen("libkey"~(os.platform()=="windows"?".dll":".so")); var (
var kb=lib.nas_kbhit; kbhit,
var gt=lib.nas_getch; getch,
var nb=lib.nas_noblock; nonblock
var call=dylib.limitcall(0); ) = func {
var lib = dylib.dlopen("libkey"~(os.platform()=="windows"? ".dll":".so"));
var kbhit = func(){return call(kb);} var kb = lib.nas_kbhit;
var getch = func(){return call(gt);} var gt = lib.nas_getch;
var nonblock = func(){return call(nb);} var nb = lib.nas_noblock;
var call = dylib.limitcall(0);
return [
func(){return call(kb);},
func(){return call(gt);},
func(){return call(nb);}
];
}();

View File

@ -217,6 +217,35 @@ var println = func(elems...) {
return __println(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<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;}){
quick_sort_core(vec,0,size(vec)-1,cmp);
return nil;
}
}();
var isfunc = func(f) { var isfunc = func(f) {
return typeof(f)=="func"; return typeof(f)=="func";
} }

View File

@ -1,56 +0,0 @@
# sort.nas
# valkmjolnir 2021/4/2
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<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;}){
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);
quick_sort_core(vec,i+1,right);
return nil;
}
return func(vec){
quick_sort_core(vec,0,size(vec)-1);
return nil;
}
}();

View File

@ -1,8 +1,6 @@
import.std.padding; import.std.padding;
import.std.process_bar; import.std.process_bar;
var (leftpad, rightpad) = (padding.leftpad, padding.rightpad);
var char_ttf=[ var char_ttf=[
[" "," "," "," "," "," "], [" "," "," "," "," "," "],
[" █████╗ ","██╔══██╗","███████║","██╔══██║","██║ ██║","╚═╝ ╚═╝"], [" █████╗ ","██╔══██╗","███████║","██╔══██║","██║ ██║","╚═╝ ╚═╝"],
@ -136,43 +134,43 @@ var curve5=func(line=4){
var ansi_escape_sequence=func(){ var ansi_escape_sequence=func(){
# decoration # decoration
for(var i=0;i<10;i+=1) for(var i=0;i<10;i+=1)
print("\e["~i~"m",rightpad(i,4),"\e[0m"); print("\e["~i~"m",padding.rightpad(i,4),"\e[0m");
print("\n"); print("\n");
# 8/16 color # 8/16 color
for(var i=30;i<38;i+=1) for(var i=30;i<38;i+=1)
print("\e["~i~"m ",rightpad(i,4),"\e[0m"); print("\e["~i~"m ",padding.rightpad(i,4),"\e[0m");
for(var i=30;i<38;i+=1) for(var i=30;i<38;i+=1)
print("\e["~i~";1m ",rightpad(i,4),"\e[0m"); print("\e["~i~";1m ",padding.rightpad(i,4),"\e[0m");
print("\n"); print("\n");
for(var i=40;i<48;i+=1) for(var i=40;i<48;i+=1)
print("\e["~i~"m ",rightpad(i,4),"\e[0m"); print("\e["~i~"m ",padding.rightpad(i,4),"\e[0m");
for(var i=40;i<48;i+=1) for(var i=40;i<48;i+=1)
print("\e["~i~";1m ",rightpad(i,4),"\e[0m"); print("\e["~i~";1m ",padding.rightpad(i,4),"\e[0m");
print("\n"); print("\n");
for(var i=90;i<98;i+=1) for(var i=90;i<98;i+=1)
print("\e["~i~"m ",rightpad(i,4),"\e[0m"); print("\e["~i~"m ",padding.rightpad(i,4),"\e[0m");
for(var i=90;i<98;i+=1) for(var i=90;i<98;i+=1)
print("\e["~i~";1m ",rightpad(i,4),"\e[0m"); print("\e["~i~";1m ",padding.rightpad(i,4),"\e[0m");
print("\n"); print("\n");
for(var i=100;i<108;i+=1) for(var i=100;i<108;i+=1)
print("\e["~i~"m ",rightpad(i,4),"\e[0m"); print("\e["~i~"m ",padding.rightpad(i,4),"\e[0m");
for(var i=100;i<108;i+=1) for(var i=100;i<108;i+=1)
print("\e["~i~";1m ",rightpad(i,4),"\e[0m"); print("\e["~i~";1m ",padding.rightpad(i,4),"\e[0m");
print("\n"); print("\n");
# 256 color # 256 color
for(var i=0;i<16;i+=1) { for(var i=0;i<16;i+=1) {
for(var j=0;j<16;j+=1) { for(var j=0;j<16;j+=1) {
var code=str(i*16+j); var code=str(i*16+j);
print("\e[38;5;"~code~"m ",rightpad(code,4),"\e[0m"); print("\e[38;5;"~code~"m ",padding.rightpad(code,4),"\e[0m");
} }
print("\n"); print("\n");
} }
for(var i=0;i<16;i+=1) { for(var i=0;i<16;i+=1) {
for(var j=0;j<16;j+=1) { for(var j=0;j<16;j+=1) {
var code=str(i*16+j); var code=str(i*16+j);
print("\e[48;5;"~code~"m ",rightpad(code,4),"\e[0m"); print("\e[48;5;"~code~"m ",padding.rightpad(code,4),"\e[0m");
} }
print("\n"); print("\n");
} }
@ -182,14 +180,14 @@ var ansi_escape_sequence=func(){
var progress=[0,0,0,0,0,0,0,0]; var progress=[0,0,0,0,0,0,0,0];
var increase=[0.03,0.06,0.04,0.094,0.08,0.09,0.05,0.032]; var increase=[0.03,0.06,0.04,0.094,0.08,0.09,0.05,0.032];
foreach(var i;progress) { foreach(var i;progress) {
print("\e[1000D",bar.bar(i)," ",rightpad(str(int(i*100)),3)," % \n"); print("\e[1000D",bar.bar(i)," ",padding.rightpad(str(int(i*100)),3)," % \n");
} }
for(var i=0;i<1/0.03;i+=1) { for(var i=0;i<1/0.03;i+=1) {
print("\e[1000D","\e["~str(size(progress))~"A"); print("\e[1000D","\e["~str(size(progress))~"A");
forindex(var j;progress) { forindex(var j;progress) {
progress[j]+=increase[j]; progress[j]+=increase[j];
progress[j]=progress[j]>1?1:progress[j]; progress[j]=progress[j]>1?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); unix.sleep(0.01);
} }
@ -203,9 +201,15 @@ if(os.platform()=="windows"){
trans_ttf("just for test"); trans_ttf("just for test");
trans_ttf(" ValKmjolnir "); trans_ttf(" ValKmjolnir ");
print("curve 1\n");
curve1(); curve1();
print("curve 2\n");
curve2(); curve2();
print("curve 3\n");
curve3(); curve3();
print("curve 4\n");
curve4(); curve4();
print("curve 5\n");
curve5(); curve5();
print("ANSI escape sequence\n");
ansi_escape_sequence(); ansi_escape_sequence();

View File

@ -1,10 +1,5 @@
import.std.padding; import.std.padding;
import.std.file; 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"); var source=file.find_all_files_with_extension("./src","cpp","h");
sort(source,func(a,b){return cmp(a,b)<0}); sort(source,func(a,b){return cmp(a,b)<0});
@ -55,7 +50,7 @@ var count=func(s,c){
var column=func(number){ var column=func(number){
number=number>=1000?substr(str(number/1000),0,3)~'k':str(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=""){ var calc=func(codetype,files,path=""){
@ -64,20 +59,20 @@ var calc=func(codetype,files,path=""){
forindex(var i;files){ forindex(var i;files){
var s=io.exists(path~files[i])?io.readfile(path~files[i]):""; var s=io.exists(path~files[i])?io.readfile(path~files[i]):"";
(line_cnt,semi_cnt)=(count(s,'\n'),count(s,';')); (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(line_cnt),' line |',
column(semi_cnt),' semi |', column(semi_cnt),' semi |',
leftpad(str(int(size(s)/1024)),4),' kb | ', padding.leftpad(str(int(size(s)/1024)),4),' kb | ',
md5(s),' |'); md5(s),' |');
bytes+=size(s); bytes+=size(s);
ctx~=s; ctx~=s;
line+=line_cnt; line+=line_cnt;
semi+=semi_cnt; semi+=semi_cnt;
} }
println(rightpad("total:",padding_length),'|', println(padding.rightpad("total:",padding_length),'|',
column(line),' line |', column(line),' line |',
column(semi),' semi |', column(semi),' semi |',
leftpad(str(int(bytes/1024)),4),' kb | ', padding.leftpad(str(int(bytes/1024)),4),' kb | ',
md5(ctx),' |\n'); md5(ctx),' |\n');
return int(bytes/1024); return int(bytes/1024);
} }
@ -86,4 +81,4 @@ var all=calc("source code:",source,"src/")
+calc("lib:",lib,"std/") +calc("lib:",lib,"std/")
+calc("test file:",testfile,"test/") +calc("test file:",testfile,"test/")
+calc("module:",module,"module/"); +calc("module:",module,"module/");
println(rightpad("total:",padding_length),'|',leftpad(str(all),6),' kb |'); println(padding.rightpad("total:",padding_length),'|',padding.leftpad(str(all),6),' kb |');

View File

@ -25,15 +25,26 @@ import.module.libmat;
func(){ func(){
# allocate more spaces # allocate more spaces
var t=[]; for(var i = 0; i<10; i+=1) {
for(var i=0;i<16384;i+=1) runtime.gc.extend("str");
append(t,[],[],[],str(i)); runtime.gc.extend("vec");
t=[]; }
}(); }();
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)=( var (vec2add,vec2sub,vec2mul,vec2div,vec2len)=(
libmat.vec2.add, libmat.vec2.add,
libmat.vec2.sub, libmat.vec2.sub,
@ -41,6 +52,7 @@ var (vec2add,vec2sub,vec2mul,vec2div,vec2len)=(
libmat.vec2.div, libmat.vec2.div,
libmat.vec2.len libmat.vec2.len
); );
var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=( var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=(
libmat.vec3.add, libmat.vec3.add,
libmat.vec3.sub, libmat.vec3.sub,
@ -51,6 +63,7 @@ var (vec3add,vec3sub,vec3mul,vec3div,vec3neg,vec3norm,vec3len,vec3dot)=(
libmat.vec3.len, libmat.vec3.len,
libmat.vec3.dot libmat.vec3.dot
); );
var (rotateX,rotateY,rotateZ)=( var (rotateX,rotateY,rotateZ)=(
libmat.vec3.rx, libmat.vec3.rx,
libmat.vec3.ry, libmat.vec3.ry,

View File

@ -3,8 +3,6 @@
import.std.process_bar; import.std.process_bar;
import.std.padding; import.std.padding;
var (leftpad, rightpad) = (padding.leftpad, padding.rightpad);
if(os.platform()=="windows"){ if(os.platform()=="windows"){
system("chcp 65001"); system("chcp 65001");
system("color"); system("color");
@ -108,12 +106,17 @@ for(var t=0;t<10;t+=1){
coroutine.resume(co); coroutine.resume(co);
if(counter-int(counter/1000)*1000==0){ if(counter-int(counter/1000)*1000==0){
var rate=counter/2e5; 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(); tm.stamp();
for(var i=0;i<1e5;i+=1) for(var i=0;i<1e5;i+=1)
consumer(); 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 ");
} }

View File

@ -1,10 +1,6 @@
import.std.sort;
import.std.padding; import.std.padding;
import.std.process_bar; import.std.process_bar;
var sort = sort.sort;
var (leftpad, rightpad) = (padding.leftpad, padding.rightpad);
var mess=func(vec) { var mess=func(vec) {
srand(); srand();
var s=size(vec); var s=size(vec);
@ -30,10 +26,12 @@ var project=func(n) {
# generate process bar, every 0.2% # generate process bar, every 0.2%
if((i-last_step)/n>1/500) { if((i-last_step)/n>1/500) {
last_step=i; 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(color);
@ -44,7 +42,7 @@ var project=func(n) {
cnt+=1; 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) { var select=func(n) {
@ -66,10 +64,12 @@ var select=func(n) {
# generate process bar, every 0.2% # generate process bar, every 0.2%
if((i-last_step)/n>1/500) { if((i-last_step)/n>1/500) {
last_step=i; 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(color);
mess(message); 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) { var cartesian=func(n) {
@ -119,10 +119,12 @@ var cartesian=func(n) {
# generate process bar, every 0.2% # generate process bar, every 0.2%
if((i-last_step)/n>1/500) { if((i-last_step)/n>1/500) {
last_step=i; 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(color);
mess(message); 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"); println("project");

View File

@ -1,9 +1,8 @@
import.test.md5_self; import.test.md5_self;
import.std.process_bar; import.std.process_bar;
import.std.file; import.std.file;
srand();
var _md5 = md5_self._md5; srand();
var compare=func() { var compare=func() {
var ch=[ var ch=[
@ -24,7 +23,7 @@ var compare=func() {
} }
byte+=size(s); byte+=size(s);
var res=md5(s); var res=md5(s);
if(cmp(res,_md5(s))) { if(cmp(res,md5_self._md5(s))) {
die("error: "~str(i)); die("error: "~str(i));
} }
if (i-begin-int((i-begin)/4)*4==0) { if (i-begin-int((i-begin)/4)*4==0) {
@ -75,7 +74,7 @@ var filechecksum=func(){
var f=io.readfile(files[i]); var f=io.readfile(files[i]);
var res=md5(f); var res=md5(f);
byte+=size(f); byte+=size(f);
if(cmp(res,_md5(f))){ if(cmp(res,md5_self._md5(f))){
die("error: "~files[i]); die("error: "~files[i]);
} }
print( print(

View File

@ -1,10 +1,32 @@
import.std.sort;
var var_sort = sort.var_sort; var var_sort=func(){
var sort = sort.sort; 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);
quick_sort_core(vec,i+1,right);
return nil;
}
return func(vec){
quick_sort_core(vec,0,size(vec)-1);
return nil;
}
}();
var vec = [];
var vec=[];
setsize(vec, 1e4); setsize(vec, 1e4);
rand(time(0)); rand(time(0));
for(var i=0;i<1e4;i+=1) for(var i=0;i<1e4;i+=1)

View File

@ -1,4 +1,5 @@
import.module.libkey; import.module.libkey;
var list=func(){ var list=func(){
var (begin,end,len)=(nil,nil,0); var (begin,end,len)=(nil,nil,0);
return{ return{

View File

@ -1,5 +1,3 @@
import.std.sort;
var sort = sort.sort;
var to_lower=func(s){ var to_lower=func(s){
var tmp=""; var tmp="";

View File

@ -1,5 +1,4 @@
import.std.file; import.std.file;
import.std.sort;
if (size(arg)!=1) { if (size(arg)!=1) {
println("need a key string to search files."); println("need a key string to search files.");
@ -21,7 +20,7 @@ var do_flat = func(vec) {
append(flat, d.dir~"/"~f); append(flat, d.dir~"/"~f);
} }
} }
sort.sort(flat, func(a,b){return cmp(a,b)<0}); sort(flat, func(a,b){return cmp(a,b)<0});
return flat; return flat;
} }