Files
Nasal-Interpreter/test/module_test.nas
2022-12-09 00:56:53 +08:00

78 lines
2.1 KiB
Plaintext

var libfib=func(){
var (dd,fib,qfib)=(nil,nil,nil);
var invoke=dylib.limitcall(1);
return {
open:func(){
if(dd==nil){
dd=dylib.dlopen("libfib."~(os.platform()=="windows"?"dll":"so"));
fib=dd.fib;
qfib=dd.quick_fib;
}else{
println("[info ] already loaded.");
}
},
close:func(){
if(dd==nil){
println("[error ] already closed.");
return;
}
dylib.dlclose(dd.lib);
(dd,fib,qfib)=(nil,nil,nil);
},
fib:func(x){
if(fib!=nil)
return invoke(fib,x);
println("[error ] cannot call fib.");
return nil;
},
qfib:func(x){
if(qfib!=nil)
return invoke(qfib,x);
println("[error ] cannot call qfib.");
return nil;
}
}
}();
println("[keys ] ",keys(libfib));
libfib.open();
libfib.open();
var tm=maketimestamp();
tm.stamp();
println("[result] ",libfib.fib(35));
println("[time ] ",tm.elapsedMSec()," ms");
tm.stamp();
println("[result] ",libfib.qfib(35));
println("[time ] ",tm.elapsedMSec()," ms");
libfib.close();
println("[result] ",libfib.fib(35));
println("[result] ",libfib.qfib(35));
libfib.close();
var speed_test=func(){
var d=dylib.dlopen("libfib."~(os.platform()=="windows"?"dll":"so"));
println("[dylib ] ",d);
var fd=d.quick_fib;
var vec_call=dylib.dlcall;
var invoke=dylib.limitcall(1);
var tm=maketimestamp();
for(var t=0;t<10;t+=1){
var cnt=0;
tm.stamp();
while(tm.elapsedMSec()<50){
invoke(fd,35);
cnt+=1;
}
println("[time ] limited call: ",int(cnt/tm.elapsedMSec())," call/ms");
cnt=0;
tm.stamp();
while(tm.elapsedMSec()<50){
vec_call(fd,35);
cnt+=1;
}
println("[time ] dynamic call: ",int(cnt/tm.elapsedMSec())," call/ms");
}
}
speed_test();