Files
Nasal-Interpreter/test/module_test.nas
T
ValKmjolnir 28a42346b7 📝 update scripts
2023-11-16 23:19:03 +08:00

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();