# tests/ffi ## Requirements gcc for library compiling (for external-\*) ## Test Results **External tests** - [x] [external_math](./external_math/init.luau) - [x] [external_pointer](./external_pointer/init.luau) - [x] [external_print](./external_print/init.luau) - [x] [external_struct](./external_struct/init.luau) - [x] [external_closure](./external_closure/init.luau) **Luau-side** - [ ] [pretty_print](./pretty_print) > need box, ref test - [x] [isInteger](./isInteger) - [ ] [into_boundary](./into_boundary) > need assertion - [ ] [from_boundary](./from_boundary) > need assertion - [ ] [cast](./cast) > need assertion ## Benchmark Results > Note: LuaJit's os.clock function returns process CPU time (used) which much smaller then Luau's os.clock output. In this benchmark, luau uses 'time.h' instead of os.clock. See [utility/proc_clock](./utility/proc_clock/init.luau) ### [benchmark/external_call](./benchmark/external_call/init.luau) **Target external c function** ```c int add(int a, int b) { return a + b; } ``` bench_scale = 1000000 **Lune ffi call function** > cargo run run tests/ffi/benchmark/external_call > cargo run --profile=release run tests/ffi/benchmark/external_call Lune release target: 0.205127 (sec) Lune dev target: 1.556489 (sec) **LuaJit ffi call function** > luajit tests/ffi/benchmark/external_call/luajit.lua LuaJIT 2.1.1727870382: 0.001682 (sec) flags = JIT ON SSE3 SSE4.1 BMI2 fold cse dce fwd dse narrow loop abc sink fuse **Deno ffi call function** > deno run --unstable-ffi --allow-ffi ./tests/ffi/benchmark/external_call/deno.ts Deno 1.46.3: 0.006384 (sec) v8 = 12.9.202.5-rusty **Sysinformation** > CPU: AMD Ryzen 5 7600 (12) @ 5.1 > MEM: 61898MiB 5600 MT/s > KERNEL: 6.8.12-2-pve (Proxmox VE 8.2.7 x86_64)