Skip to content

Commit

Permalink
baroque exercises in specing Decomposer#each
Browse files Browse the repository at this point in the history
  • Loading branch information
chastell committed Mar 1, 2009
1 parent 13d8d16 commit f9f8d3b
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/art-decomp/decomposer.rb
Expand Up @@ -8,4 +8,14 @@ def initialize params
@qv_gen = params[:qv_gen].new @fsm, @archs
end

def each
@uv_gen.each do |u, v|
@qu_gen.each u, v do |qu|
@qv_gen.each u, v, qu do |g, qv|
yield Decomposition.new @fsm, u, v, qu, g, qv
end
end
end
end

end end
43 changes: 43 additions & 0 deletions spec/art-decomp/decomposer_spec.rb
Expand Up @@ -12,4 +12,47 @@
decomposer = Decomposer.new :fsm => fsm, :archs => archs, :uv_gen => uv_gen, :qu_gen => qu_gen, :qv_gen => qv_gen
end

context 'given that the three generators are working properly' do

it 'should poll the generators and yield the resulting decompositions one by one' do
fsm = mock 'FSM'
archs = Set[mock('Arch', :pins => 5), mock('Arch', :pins => 4)] # FIXME unmock
uv = mock 'UVGenerator'
qu = mock 'QuGenerator'
qv = mock 'QvGenerator'
uv_gen = mock 'UVGenerator class', :new => uv
qu_gen = mock 'QuGenerator class', :new => qu
qv_gen = mock 'QvGenerator class', :new => qv

u_a, v_a = [0,1], [2]
u_b, v_b = [0], [1,2]
uv.should_receive(:each).with(no_args).and_yield(u_a, v_a).and_yield(u_b, v_b)

qu_a1 = mock('Blanket')
qu_a2 = mock('Blanket')
qu.should_receive(:each).with(u_a, v_a).and_yield(qu_a1).and_yield(qu_a2)

qu_b = mock('Blanket')
qu.should_receive(:each).with(u_b, v_b).and_yield(qu_b)

g_a1, qv_a1 = mock('Blanket'), mock('Blanket')
qv.should_receive(:each).with(u_a, v_a, qu_a1).and_yield(g_a1, qv_a1)

g_a2, qv_a2 = mock('Blanket'), mock('Blanket')
qv.should_receive(:each).with(u_a, v_a, qu_a2).and_yield(g_a2, qv_a2)

g_bA, qv_bA = mock('Blanket'), mock('Blanket')
g_bB, qv_bB = mock('Blanket'), mock('Blanket')
qv.should_receive(:each).with(u_b, v_b, qu_b).and_yield(g_bA, qv_bA).and_yield(g_bB, qv_bB)

decomposer = Decomposer.new :fsm => fsm, :archs => archs, :uv_gen => uv_gen, :qu_gen => qu_gen, :qv_gen => qv_gen
results = []
decomposer.each { |dec| results << dec }
results.size.should == 4
results.first.should == Decomposition.new(fsm, u_a, v_a, qu_a1, g_a1, qv_a1)
results.last.should == Decomposition.new(fsm, u_b, v_b, qu_b, g_bB, qv_bB)
end

end

end

0 comments on commit f9f8d3b

Please sign in to comment.