Nasal-Interpreter/test/module_test.nas

80 lines
2.1 KiB
Plaintext

use std.dylib;
use module.libfib;
println(keys(libfib));
libfib.test_ghost();
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){
tm.stamp();
for(var i=0;i<5e5;i+=1){
invoke(fd,40);
}
println("[time ] limited call: ",int(5e5/tm.elapsedMSec())," call/ms");
tm.stamp();
for(var i=0;i<5e5;i+=1){
vec_call(fd,40);
}
println("[time ] dynamic call: ",int(5e5/tm.elapsedMSec())," call/ms");
}
}
speed_test();