mirror of
https://github.com/wren-lang/wren.git
synced 2026-01-09 21:28:39 +01:00
Fix test and add skynet example.
This commit is contained in:
27
example/skynet.wren
Normal file
27
example/skynet.wren
Normal file
@ -0,0 +1,27 @@
|
||||
// A million fiber microbenchmark based on: https://github.com/atemerev/skynet.
|
||||
class Skynet {
|
||||
static makeFiber(num, size, div) {
|
||||
return Fiber.new {
|
||||
if (size == 1) {
|
||||
Fiber.yield(num)
|
||||
} else {
|
||||
var fibers = []
|
||||
for (i in 0...div) {
|
||||
var subNum = num + i * (size / div)
|
||||
fibers.add(makeFiber(subNum, size / div, div))
|
||||
}
|
||||
|
||||
var sum = 0
|
||||
for (task in fibers) {
|
||||
sum = sum + task.call()
|
||||
}
|
||||
Fiber.yield(sum)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var start = System.clock
|
||||
var result = Skynet.makeFiber(0, 1000000, 10).call()
|
||||
var end = System.clock
|
||||
System.print("Result: %(result) in %(end - start) s")
|
||||
@ -27,6 +27,6 @@ for (i in 1..5000) {
|
||||
System.print(histogram.count) // expect: 24
|
||||
for (key in histogram.keys) {
|
||||
var error = (histogram[key] / (5000 / 24) - 1).abs
|
||||
if (error > 0.2) System.print("!!! %(error)")
|
||||
if (error > 0.21) System.print("!!! %(error)")
|
||||
}
|
||||
|
||||
|
||||
@ -122,7 +122,7 @@ class Test:
|
||||
timed_out[0] = True
|
||||
p.kill()
|
||||
|
||||
timer = Timer(2, kill_process, [proc])
|
||||
timer = Timer(5, kill_process, [proc])
|
||||
|
||||
try:
|
||||
timer.start()
|
||||
|
||||
Reference in New Issue
Block a user