@@ -356,7 +356,17 @@ describe "Multiset" do
356356
357357 describe " #each" do
358358 context " with no block given" do
359- it " iterates over unique elements" do
359+ context " with no values" do
360+ it " returns Stop" do
361+ iter = Multiset .new(Array (Int32 ).new).each
362+ iter.next.should be_a(Iterator ::Stop )
363+ iter.next.should be_a(Iterator ::Stop )
364+ iter.rewind
365+ iter.next.should be_a(Iterator ::Stop )
366+ end
367+ end
368+
369+ it " iterates over unique elements of one type" do
360370 iter = Multiset {1 , 2 , 3 }.each
361371 iter.next.should eq(1 )
362372 iter.next.should eq(2 )
@@ -367,6 +377,17 @@ describe "Multiset" do
367377 iter.next.should eq(1 )
368378 end
369379
380+ it " iterates over unique elements of union type" do
381+ iter = Multiset {1 , " a" , 3 }.each
382+ iter.next.should eq(1 )
383+ iter.next.should eq(" a" )
384+ iter.next.should eq(3 )
385+ iter.next.should be_a(Iterator ::Stop )
386+
387+ iter.rewind
388+ iter.next.should eq(1 )
389+ end
390+
370391 it " iterates over duplicate elements" do
371392 iter = Multiset {1 , 2 , 3 , 2 , 1 , 1 }.each
372393 iter.next.should eq(1 )
@@ -383,11 +404,18 @@ describe "Multiset" do
383404 end
384405
385406 context " with block" do
386- it " yields each element" do
387- ms = Multiset {1 , 2 , 2 , 3 }
407+ it " yields each over unique elements" do
408+ ms = Multiset {1 , 2 , 3 }
409+ elems = [] of Int32
410+ ms.each { |e | elems << e }
411+ elems.should eq [1 , 2 , 3 ]
412+ end
413+
414+ it " yields each over duplicate elements" do
415+ ms = Multiset {1 , 2 , 3 , 2 , 1 , 1 }
388416 elems = [] of Int32
389417 ms.each { |e | elems << e }
390- elems.should eq [1 , 2 , 2 , 3 ]
418+ elems.should eq [1 , 1 , 1 , 2 , 2 , 3 ]
391419 end
392420 end
393421 end
0 commit comments