forked from Mirror/wren
Blocks, functions, and methods now have the same code for handling their bodies. This means that single-line methods work like single-line functions: they return the result of their expression.
70 lines
1.3 KiB
Plaintext
70 lines
1.3 KiB
Plaintext
class Toggle {
|
|
new(startState) {
|
|
_state = startState
|
|
}
|
|
|
|
value { _state }
|
|
activate {
|
|
_state = !_state
|
|
return this
|
|
}
|
|
}
|
|
|
|
class NthToggle is Toggle {
|
|
new(startState, maxCounter) {
|
|
super(startState)
|
|
_countMax = maxCounter
|
|
_count = 0
|
|
}
|
|
|
|
activate {
|
|
_count = _count + 1
|
|
if (_count >= _countMax) {
|
|
super.activate
|
|
_count = 0
|
|
}
|
|
|
|
return this
|
|
}
|
|
}
|
|
|
|
var start = IO.clock
|
|
var n = 100000
|
|
var val = true
|
|
var toggle = new Toggle(val)
|
|
|
|
for (i in 0...n) {
|
|
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
|
|
}
|
|
|
|
IO.print(toggle.value)
|
|
|
|
val = true
|
|
var ntoggle = new NthToggle(val, 3)
|
|
|
|
for (i in 0...n) {
|
|
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
|
|
}
|
|
|
|
IO.print(ntoggle.value)
|
|
|
|
IO.print("elapsed: " + (IO.clock - start).toString)
|