move sandbox benches
This commit is contained in:
parent
9e5092acdb
commit
4ad87f81f3
133
bench/sandbox_bench_test.go
Normal file
133
bench/sandbox_bench_test.go
Normal file
@ -0,0 +1,133 @@
|
||||
package luajit_bench
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
luajit "git.sharkk.net/Sky/LuaJIT-to-Go"
|
||||
)
|
||||
|
||||
// BenchmarkSandboxLuaExecution measures the performance of executing raw Lua code
|
||||
func BenchmarkSandboxLuaExecution(b *testing.B) {
|
||||
sandbox := luajit.NewSandbox()
|
||||
defer sandbox.Close()
|
||||
|
||||
// Simple Lua code that does some computation
|
||||
code := `
|
||||
local sum = 0
|
||||
for i = 1, 100 do
|
||||
sum = sum + i
|
||||
end
|
||||
return sum
|
||||
`
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result, err := sandbox.Run(code)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to run code: %v", err)
|
||||
}
|
||||
if result != float64(5050) {
|
||||
b.Fatalf("Incorrect result: %v", result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkSandboxBytecodeExecution measures the performance of executing precompiled bytecode
|
||||
func BenchmarkSandboxBytecodeExecution(b *testing.B) {
|
||||
sandbox := luajit.NewSandbox()
|
||||
defer sandbox.Close()
|
||||
|
||||
// Same code as above, but precompiled
|
||||
code := `
|
||||
local sum = 0
|
||||
for i = 1, 100 do
|
||||
sum = sum + i
|
||||
end
|
||||
return sum
|
||||
`
|
||||
|
||||
// Compile the bytecode once
|
||||
bytecode, err := sandbox.Compile(code)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to compile bytecode: %v", err)
|
||||
}
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result, err := sandbox.RunBytecode(bytecode)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to run bytecode: %v", err)
|
||||
}
|
||||
if result != float64(5050) {
|
||||
b.Fatalf("Incorrect result: %v", result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkSandboxComplexComputation measures performance with more complex computation
|
||||
func BenchmarkSandboxComplexComputation(b *testing.B) {
|
||||
sandbox := luajit.NewSandbox()
|
||||
defer sandbox.Close()
|
||||
|
||||
// More complex Lua code that calculates Fibonacci numbers
|
||||
code := `
|
||||
function fibonacci(n)
|
||||
if n <= 1 then
|
||||
return n
|
||||
end
|
||||
return fibonacci(n-1) + fibonacci(n-2)
|
||||
end
|
||||
|
||||
return fibonacci(15) -- Not too high to avoid excessive runtime
|
||||
`
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result, err := sandbox.Run(code)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to run code: %v", err)
|
||||
}
|
||||
if result != float64(610) {
|
||||
b.Fatalf("Incorrect result: %v", result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkSandboxFunctionCall measures performance of calling a registered Go function
|
||||
func BenchmarkSandboxFunctionCall(b *testing.B) {
|
||||
sandbox := luajit.NewSandbox()
|
||||
defer sandbox.Close()
|
||||
|
||||
// Register a simple addition function
|
||||
add := func(s *luajit.State) int {
|
||||
a := s.ToNumber(1)
|
||||
b := s.ToNumber(2)
|
||||
s.PushNumber(a + b)
|
||||
return 1
|
||||
}
|
||||
|
||||
err := sandbox.RegisterFunction("add", add)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to register function: %v", err)
|
||||
}
|
||||
|
||||
// Lua code that calls the Go function in a loop
|
||||
code := `
|
||||
local sum = 0
|
||||
for i = 1, 100 do
|
||||
sum = add(sum, i)
|
||||
end
|
||||
return sum
|
||||
`
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result, err := sandbox.Run(code)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to run code: %v", err)
|
||||
}
|
||||
if result != float64(5050) {
|
||||
b.Fatalf("Incorrect result: %v", result)
|
||||
}
|
||||
}
|
||||
}
|
@ -648,129 +648,3 @@ func createTempLuaFile(content string) (string, error) {
|
||||
func removeTempFile(path string) {
|
||||
os.Remove(path)
|
||||
}
|
||||
|
||||
// BenchmarkSandboxLuaExecution measures the performance of executing raw Lua code
|
||||
func BenchmarkSandboxLuaExecution(b *testing.B) {
|
||||
sandbox := luajit.NewSandbox()
|
||||
defer sandbox.Close()
|
||||
|
||||
// Simple Lua code that does some computation
|
||||
code := `
|
||||
local sum = 0
|
||||
for i = 1, 100 do
|
||||
sum = sum + i
|
||||
end
|
||||
return sum
|
||||
`
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result, err := sandbox.Run(code)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to run code: %v", err)
|
||||
}
|
||||
if result != float64(5050) {
|
||||
b.Fatalf("Incorrect result: %v", result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkSandboxBytecodeExecution measures the performance of executing precompiled bytecode
|
||||
func BenchmarkSandboxBytecodeExecution(b *testing.B) {
|
||||
sandbox := luajit.NewSandbox()
|
||||
defer sandbox.Close()
|
||||
|
||||
// Same code as above, but precompiled
|
||||
code := `
|
||||
local sum = 0
|
||||
for i = 1, 100 do
|
||||
sum = sum + i
|
||||
end
|
||||
return sum
|
||||
`
|
||||
|
||||
// Compile the bytecode once
|
||||
bytecode, err := sandbox.Compile(code)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to compile bytecode: %v", err)
|
||||
}
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result, err := sandbox.RunBytecode(bytecode)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to run bytecode: %v", err)
|
||||
}
|
||||
if result != float64(5050) {
|
||||
b.Fatalf("Incorrect result: %v", result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkSandboxComplexComputation measures performance with more complex computation
|
||||
func BenchmarkSandboxComplexComputation(b *testing.B) {
|
||||
sandbox := luajit.NewSandbox()
|
||||
defer sandbox.Close()
|
||||
|
||||
// More complex Lua code that calculates Fibonacci numbers
|
||||
code := `
|
||||
function fibonacci(n)
|
||||
if n <= 1 then
|
||||
return n
|
||||
end
|
||||
return fibonacci(n-1) + fibonacci(n-2)
|
||||
end
|
||||
|
||||
return fibonacci(15) -- Not too high to avoid excessive runtime
|
||||
`
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result, err := sandbox.Run(code)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to run code: %v", err)
|
||||
}
|
||||
if result != float64(610) {
|
||||
b.Fatalf("Incorrect result: %v", result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkSandboxFunctionCall measures performance of calling a registered Go function
|
||||
func BenchmarkSandboxFunctionCall(b *testing.B) {
|
||||
sandbox := luajit.NewSandbox()
|
||||
defer sandbox.Close()
|
||||
|
||||
// Register a simple addition function
|
||||
add := func(s *luajit.State) int {
|
||||
a := s.ToNumber(1)
|
||||
b := s.ToNumber(2)
|
||||
s.PushNumber(a + b)
|
||||
return 1
|
||||
}
|
||||
|
||||
err := sandbox.RegisterFunction("add", add)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to register function: %v", err)
|
||||
}
|
||||
|
||||
// Lua code that calls the Go function in a loop
|
||||
code := `
|
||||
local sum = 0
|
||||
for i = 1, 100 do
|
||||
sum = add(sum, i)
|
||||
end
|
||||
return sum
|
||||
`
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
result, err := sandbox.Run(code)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to run code: %v", err)
|
||||
}
|
||||
if result != float64(5050) {
|
||||
b.Fatalf("Incorrect result: %v", result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user