Skip to content

Instantly share code, notes, and snippets.

@adkron adkron/bdd.rb
Created Apr 16, 2014

Embed
What would you like to do?
class Fifo
EmptyError = Class.new(Exception)
Node = Struct.new(:value, :next)
attr_accessor :size, :top
private :size=, :top=
def initialize
self.size = 0
self.top = nil
end
def empty?
size.zero?
end
def pop
raise EmptyError if empty?
self.size = size - 1
value, self.top = top.value, top.next
value
end
def push(element)
self.size = size + 1
self.top = Node.new(element, top)
end
end
describe Fifo do
context "when it is new" do
it do
is_expected.to be_empty
end
specify do
expect(subject.size).to be_zero
end
specify do
expect{ subject.pop }.to raise_error Fifo::EmptyError
end
specify do
expect{ subject.push :element }.to change{ subject.size }.by(1)
end
end
context "with one element" do
before do
subject.push :element
end
it do
is_expected.to_not be_empty
end
specify do
expect(subject.size).to eql(1)
end
describe "popping an element" do
specify do
expect{ subject.pop }.to change{ subject.size }.by(-1)
end
specify do
expect(subject.pop).to eql(:element)
end
end
end
context "with more than one element" do
before do
subject.push :first_element
subject.push :second_element
end
specify do
expect(subject.pop).to eql(:second_element)
end
specify do
subject.pop
expect(subject.pop).to eql(:first_element)
end
end
end
__END__
push
pop
empty
top
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.