2024-06-05 18:02:48 +01:00
|
|
|
local luau = require("@lune/luau")
|
|
|
|
|
|
|
|
local TEST_SCRIPT = [[
|
|
|
|
local start = os.clock()
|
|
|
|
local x
|
|
|
|
for i = 1, 1e6 do
|
|
|
|
x = math.sqrt(i)
|
|
|
|
end
|
|
|
|
local finish = os.clock()
|
|
|
|
|
|
|
|
return finish - start
|
|
|
|
]]
|
|
|
|
|
|
|
|
local TEST_BYTECODE = luau.compile(TEST_SCRIPT, {
|
|
|
|
optimizationLevel = 2,
|
|
|
|
coverageLevel = 0,
|
|
|
|
debugLevel = 0,
|
|
|
|
})
|
|
|
|
|
|
|
|
-- Load the bytecode with different configurations
|
|
|
|
local safeCodegenFunction = luau.load(TEST_BYTECODE, {
|
|
|
|
debugName = "safeCodegenFunction",
|
|
|
|
codegenEnabled = true,
|
|
|
|
})
|
|
|
|
local unsafeCodegenFunction = luau.load(TEST_BYTECODE, {
|
|
|
|
debugName = "unsafeCodegenFunction",
|
|
|
|
environment = {},
|
|
|
|
injectGlobals = true,
|
2024-06-05 18:21:30 +01:00
|
|
|
codegenEnabled = true,
|
2024-06-05 18:02:48 +01:00
|
|
|
})
|
|
|
|
local safeFunction = luau.load(TEST_BYTECODE, {
|
|
|
|
debugName = "safeFunction",
|
|
|
|
codegenEnabled = false,
|
|
|
|
})
|
|
|
|
local unsafeFunction = luau.load(TEST_BYTECODE, {
|
|
|
|
debugName = "unsafeFunction",
|
|
|
|
environment = {},
|
|
|
|
injectGlobals = true,
|
2024-06-05 18:21:30 +01:00
|
|
|
codegenEnabled = false,
|
2024-06-05 18:02:48 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
-- Run the functions to get the timings
|
|
|
|
local safeCodegenTime = safeCodegenFunction()
|
|
|
|
local unsafeCodegenTime = unsafeCodegenFunction()
|
|
|
|
local safeTime = safeFunction()
|
|
|
|
local unsafeTime = unsafeFunction()
|
|
|
|
|
|
|
|
-- Assert that safeCodegenTime is always twice as fast as both unsafe functions
|
|
|
|
local safeCodegenUpperBound = safeCodegenTime * 2
|
|
|
|
assert(
|
|
|
|
unsafeCodegenTime > safeCodegenUpperBound and unsafeTime > safeCodegenUpperBound,
|
|
|
|
"expected luau.load with codegenEnabled = true and no custom environment to use codegen"
|
|
|
|
)
|
|
|
|
|
|
|
|
-- Assert that safeTime is always atleast twice as fast as both unsafe functions
|
|
|
|
local safeUpperBound = safeTime * 2
|
|
|
|
assert(
|
|
|
|
unsafeCodegenTime > safeUpperBound and unsafeTime > safeUpperBound,
|
|
|
|
"expected luau.load with codegenEnabled = false and no custom environment to have safeenv enabled"
|
|
|
|
)
|
|
|
|
|
|
|
|
-- Normally we'd also want to check whether codegen is actually being enabled by
|
|
|
|
-- comparing timings of safe_codegen_fn and safe_fn but since we don't have a way of
|
|
|
|
-- checking whether the current device even supports codegen, we can't safely test this.
|