forked from Mirror/wren
Mainly to get rid of one top level directory. But this will also be useful when there are tests of the embedding API.
80 lines
1.8 KiB
Ruby
80 lines
1.8 KiB
Ruby
#!/usr/bin/ruby
|
|
# -*- mode: ruby -*-
|
|
# $Id: methcall.ruby,v 1.1 2004-05-19 18:10:41 bfulgham Exp $
|
|
# http://www.bagley.org/~doug/shootout/
|
|
# with help from Aristarkh Zagorodnikov
|
|
|
|
class Toggle
|
|
def initialize(start_state)
|
|
@bool = start_state
|
|
end
|
|
|
|
def value
|
|
@bool
|
|
end
|
|
|
|
def activate
|
|
@bool = !@bool
|
|
self
|
|
end
|
|
end
|
|
|
|
class NthToggle < Toggle
|
|
def initialize(start_state, max_counter)
|
|
super start_state
|
|
@count_max = max_counter
|
|
@counter = 0
|
|
end
|
|
|
|
def activate
|
|
@counter += 1
|
|
if @counter >= @count_max
|
|
super
|
|
@counter = 0
|
|
end
|
|
self
|
|
end
|
|
end
|
|
|
|
def main()
|
|
start = Time.now
|
|
|
|
n = 100000
|
|
|
|
val = 1
|
|
toggle = Toggle.new(val)
|
|
n.times 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
|
|
if val then puts "true" else puts "false" end
|
|
|
|
val = 1
|
|
ntoggle = NthToggle.new(val, 3)
|
|
n.times 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
|
|
if val then puts "true" else puts "false" end
|
|
|
|
puts "elapsed: " + (Time.now - start).to_s
|
|
end
|
|
|
|
main()
|