Skip to content

Instantly share code, notes, and snippets.

@pochi
Created October 26, 2012 00:39
Show Gist options
  • Save pochi/3956350 to your computer and use it in GitHub Desktop.
Save pochi/3956350 to your computer and use it in GitHub Desktop.
Fiber sample
# coding: utf-8
require 'rspec'
require 'fiber'
describe 'FiberTest' do
let(:fiber) do
Fiber.new do |name|
last_name = Fiber.yield("#{name}")
"#{name} #{last_name}"
end
end
describe '.current()' do
subject { Fiber.current() }
it { should be_instance_of(Fiber) }
end
# Can't yield from root fiber
describe '.yield()' do
subject { Fiber.yield("pochi") }
it do
expect { subject }.to raise_exception(FiberError)
end
end
describe '#alive?' do
describe 'when fiber alive' do
context 'never called' do
subject { fiber.alive? }
it { should be_true }
end
context 'once called' do
before { fiber.resume("pochi") }
subject { fiber.alive? }
it { should be_true }
end
end
context 'when fiver dead' do
before { 2.times { |_| fiber.resume("pochi") } }
subject { fiber.alive? }
it { should be_false }
end
end
describe '#resume(name)' do
context 'when once called' do
subject { fiber.resume("pochi") }
it { should == "pochi" }
end
context "when twice called" do
before { fiber.resume("pochi") }
subject { fiber.resume("kuroda") }
it do
pending 'Test should not work'
should = "kuroda pochi"
end
end
end
end
describe 'FiberSample' do
before do
@num = 1
@fiber = Fiber.new do
loop { Fiber.yield @num; @num+=1 }
end
end
context 'calc' do
subject { 10.times { |_| @fiber.resume } }
it { should == 10 }
end
context 'calc2' do
before do
@twice_fiber = Fiber.new do
loop { Fiber.yield @num; @num+=2}
end
10.times do |_|
@fiber.resume
@twice_fiber.resume
end
end
subject do
@twice_fiber.resume
end
it { should == 30 }
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment