mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 22:35:43 +08:00
aafea36235
Previous benchmark require fix wasn't actually working correctly for the old style require (or running in Lua).
101 lines
2.6 KiB
Lua
101 lines
2.6 KiB
Lua
local function prequire(name) local success, result = pcall(require, name); return if success then result else nil end
|
|
local bench = script and require(script.Parent.bench_support) or prequire("bench_support") or require("../bench_support")
|
|
|
|
function test()
|
|
|
|
-- $Id: methcall.lua,v 1.2 2004-06-12 16:19:43 bfulgham Exp $
|
|
-- http://shootout.alioth.debian.org
|
|
-- contributed by Roberto Ierusalimschy
|
|
|
|
--------------------------------------------------------------
|
|
-- Toggle class
|
|
--------------------------------------------------------------
|
|
|
|
Toggle = {}
|
|
|
|
function Toggle:value ()
|
|
return self.state
|
|
end
|
|
|
|
function Toggle:activate ()
|
|
self.state = not self.state
|
|
return self
|
|
end
|
|
|
|
function Toggle:new (start_state)
|
|
local o = {state = start_state}
|
|
self.__index =self
|
|
setmetatable(o, self)
|
|
return o
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------
|
|
-- NthToggle class
|
|
--------------------------------------------------------------
|
|
|
|
NthToggle = Toggle:new()
|
|
|
|
function NthToggle:activate ()
|
|
self.counter = self.counter + 1
|
|
if self.counter >= self.count_max then
|
|
Toggle.activate(self)
|
|
self.counter = 0
|
|
end
|
|
return self
|
|
end
|
|
|
|
function NthToggle:new (start_state, max_counter)
|
|
local o = Toggle.new(self, start_state)
|
|
o.count_max = max_counter
|
|
o.counter = 0
|
|
return o
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------
|
|
-- main
|
|
-----------------------------------------------------------
|
|
|
|
function main ()
|
|
local start = os.clock()
|
|
local N = 30000
|
|
|
|
local val = 1
|
|
local toggle = Toggle:new(val)
|
|
for i=1,N do
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
val = toggle:activate():value()
|
|
end
|
|
print(val and "true" or "false")
|
|
|
|
val = 1
|
|
local ntoggle = NthToggle:new(val, 3)
|
|
for i=1,N do
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
val = ntoggle:activate():value()
|
|
end
|
|
print(val and "true" or "false")
|
|
return os.clock() - start
|
|
end
|
|
|
|
return main()
|
|
end
|
|
|
|
bench.runCode(test, "MethodCalls") |