def f0() yield("yield value") end import _Fiber fiber = _Fiber.new(f0) yield_value = _Fiber.run(fiber) assert(yield_value == "yield value") assert(!fiber.is_done) def f1() assert(yield("y") == "r") yield() end fiber = _Fiber.new(f1) assert(_Fiber.run(fiber) == "y") _Fiber.resume(fiber, "r") assert(!fiber.is_done) def f2(p1, p2, p3) r1 = yield(p3); assert(r1 == 'r1') r2 = yield(p2); assert(r2 == 'r2') r3 = yield(p1); assert(r3 == 'r3') return p1 + p2 * p3 end fiber = _Fiber.new(f2) p3 = _Fiber.run(fiber, 1, 2, 3); assert(p3 == 3) p2 = _Fiber.resume(fiber, 'r1'); assert(p2 == 2) p1 = _Fiber.resume(fiber, 'r2'); assert(p1 == 1) pa = _Fiber.resume(fiber, 'r3'); assert(pa == 7) assert(fiber.is_done) # If we got here, that means all test were passed. print('All TESTS PASSED')