1
0
forked from Mirror/wren
Files
wren/benchmark/method_call.lua
Bob Nystrom 507e89d3b3 Range operators!
Added ".." and "..." infix operators. Num implements them to
return Range objects. Those in turn implement the iterator
protocol, so now numeric for loops are easy:

    for (i in 1..10) { ... }

I also cleaned up the Wren benchmarks to use this.

In the process, I discovered the method_call benchmark really
just showed loop peformance, so I unrolled the loops in all of
the languages to stress method calls.
2013-12-25 15:01:45 -08:00

95 lines
2.2 KiB
Lua

-- $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 = 100000
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")
io.write(string.format("elapsed: %.8f\n", os.clock() - start))
end
main()