From e454b315fc570f367ffaae811a33cf50ab27a339 Mon Sep 17 00:00:00 2001 From: ValKmjolnir Date: Thu, 2 Feb 2023 21:24:21 +0800 Subject: [PATCH] :rocket: add file::find_all_files_with_extension --- stl/file.nas | 19 +++++++ test/calc.nas | 140 +++++++++++++---------------------------------- test/datalog.nas | 46 ++++++++++++++-- test/hexdump.nas | 16 +++++- 4 files changed, 113 insertions(+), 108 deletions(-) diff --git a/stl/file.nas b/stl/file.nas index ce952dc..7824c3e 100644 --- a/stl/file.nas +++ b/stl/file.nas @@ -25,6 +25,25 @@ var file={ } }; +var find_all_files_with_extension=func(path,extensions...){ + var in_vec=func(ext){ + foreach(var i;extensions){ + if(ext==i){ + return 1; + } + } + return 0; + } + var res=[]; + foreach(var f;find_all_files(path)){ + var tmp=split('.',f); + if(size(tmp)>1 and in_vec(tmp[-1])){ + append(res,f); + } + } + return res; +} + var find_all_files=func(path){ if(!io.exists(path)) return []; diff --git a/test/calc.nas b/test/calc.nas index 5d59d63..32a113d 100644 --- a/test/calc.nas +++ b/test/calc.nas @@ -1,99 +1,18 @@ import.stl.padding; +import.stl.file; +import.stl.sort; -var source=[ - "main.cpp", - "nasal_ast.h", - "nasal_builtin.h", - "nasal_codegen.h", - "nasal_dbg.h", - "nasal_err.h", - "nasal_gc.h", - "nasal_import.h", - "nasal_lexer.h", - "nasal_opt.h", - "nasal_parse.h", - "nasal_vm.h", - "nasal.h" -]; +var source=find_all_files_with_extension(".","cpp","h"); +sort(source,func(a,b){return cmp(a,b)<0}); -var lib=[ - "fg_env.nas", - "file.nas", - "json.nas", - "lib.nas", - "list.nas", - "log.nas", - "module.nas", - "padding.nas", - "process_bar.nas", - "queue.nas", - "result.nas", - "sort.nas", - "stack.nas", - "string.nas" -]; +var lib=find_all_files_with_extension("./stl","nas"); +sort(lib,func(a,b){return cmp(a,b)<0}); -var testfile=[ - "ascii-art.nas", - "auto_crash.nas", - "bf.nas", - "bfconvertor.nas", - "bfs.nas", - "bigloop.nas", - "bp.nas", - "calc.nas", - "choice.nas", - "class.nas", - "console3D.nas", - "coroutine.nas", - "datalog.nas", - "diff.nas", - "donuts.nas", - "exception.nas", - "fib.nas", - "filesystem.nas", - "hexdump.nas", - "httptest.nas", - "json.nas", - "leetcode1319.nas", - "lexer.nas", - "life.nas", - "loop.nas", - "mandel.nas", - "mandelbrot.nas", - "mcpu.nas", - "md5.nas", - "md5compare.nas", - "module_test.nas", - "nasal_test.nas", - "occupation.nas", - "pi.nas", - "ppmgen.nas", - "prime.nas", - "qrcode.nas", - "quick_sort.nas", - "scalar.nas", - "snake.nas", - "tetris.nas", - "trait.nas", - "turingmachine.nas", - "utf8chk.nas", - "watchdog.nas", - "wavecollapse.nas", - "word_collector.nas", - "ycombinator.nas" -]; +var testfile=find_all_files_with_extension("./test","nas"); +sort(testfile,func(a,b){return cmp(a,b)<0}); -var module=[ - "fib.cpp", - "keyboard.cpp", - "matrix.cpp", - "nasocket.cpp", - "libfib.nas", - "libkey.nas", - "libmat.nas", - "libsock.nas" -]; +var module=find_all_files_with_extension("./module","cpp","nas"); +sort(module,func(a,b){return cmp(a,b)<0}); var longest=func(vec...){ var len=0; @@ -104,16 +23,35 @@ var longest=func(vec...){ } var padding_length=longest(source,lib,testfile,module); +var blank=func(s){ + if(!size(s)){ + return 1; + } + var space=[" "[0],"\n"[0],"\t"[0],"\r"[0]]; + for(var i=0;i=1000?substr(str(number/1000),0,3)~'k':str(number); - return rightpad(number,6); + return leftpad(number,6); } var calc=func(codetype,files,path=""){ @@ -122,20 +60,20 @@ var calc=func(codetype,files,path=""){ forindex(var i;files){ var s=io.exists(path~files[i])?io.fin(path~files[i]):""; (line_cnt,semi_cnt)=(count(s,'\n'),count(s,';')); - println(rightpad(files[i],padding_length),'| ', - column(line_cnt),'line | ', - column(semi_cnt),'semi | ', - rightpad(str(int(size(s)/1024)),6),'kb | ', + println(rightpad(files[i],padding_length),'|', + column(line_cnt),' line |', + column(semi_cnt),' semi |', + leftpad(str(int(size(s)/1024)),3),' kb | ', md5(s),' |'); bytes+=size(s); ctx~=s; line+=line_cnt; semi+=semi_cnt; } - println(rightpad("total:",padding_length),'| ', - column(line),'line | ', - column(semi),'semi | ', - rightpad(str(int(bytes/1024)),6),'kb | ', + println(rightpad("total:",padding_length),'|', + column(line),' line |', + column(semi),' semi |', + leftpad(str(int(bytes/1024)),3),' kb | ', md5(ctx),' |\n'); return int(bytes/1024); } diff --git a/test/datalog.nas b/test/datalog.nas index 46b3f6d..2d7ef38 100644 --- a/test/datalog.nas +++ b/test/datalog.nas @@ -11,9 +11,42 @@ var mess=func(vec) { } } -var equal_join=func(n) { - # color a(int) b(str) c(int) message a(int) b(str) - # color.c = message.a +var project=func(n) { + # get(s) :- color(_, s, _). + + var ts=maketimestamp(); + var bar=process_bar.high_resolution_bar(40); + + var color=[]; + setsize(color,n); + + var last_step=0; + ts.stamp(); + for(var i=0;i1/500) { + last_step=i; + print(" ",bar.bar((i+1)/n)~" \r"); + } + } + print(" ",bar.bar(1)~" ",rightpad(str(ts.elapsedMSec()/1000),5)," s | "); + + mess(color); + + ts.stamp(); + var cnt=0; + foreach(var c;color) { + var data=c[2]; + cnt+=1; + } + + println(rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); +} + +var select=func(n) { + # get(s) :- color(_, _, x), message(x, s). + var ts=maketimestamp(); var bar=process_bar.high_resolution_bar(40); @@ -64,6 +97,11 @@ var equal_join=func(n) { println(rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); } +println("project"); +for(var i=10;i<1e6;i*=10) { + project(i); +} +println("select"); for(var i=100;i<1e7;i*=10) { - equal_join(i); + select(i); } \ No newline at end of file diff --git a/test/hexdump.nas b/test/hexdump.nas index f722a59..5781e80 100644 --- a/test/hexdump.nas +++ b/test/hexdump.nas @@ -37,7 +37,14 @@ var s=func(){ "nasal.h" ]; if(size(runtime.argv())!=0){ - return io.fin(runtime.argv()[0]); + var argv=runtime.argv(); + if(argv[0]=="-h" or argv[0]=="--h"){ + println("usage:"); + println(" nasal hexdump.nas | get all files' hexdump."); + println(" nasal hexdump.nas [file] | get single file's hexdump."); + return ""; + } + return io.fin(argv[0]); } var ret=""; foreach(var elem;filename) @@ -56,10 +63,10 @@ var textprint=func(index){ var info=""; if(os.platform()=="windows"){ for(var i=index-cnt;i=128)?".":chr(s[i]); + info~=(s[i]<32 or s[i]>=127)?".":chr(s[i]); }else{ for(var i=index-cnt;i