ruby--ruby/test/ruby/test_enumerator.rb

48 lines
847 B
Ruby
Raw Normal View History

require 'test/unit'
class TestEnumerator < Test::Unit::TestCase
def enum_test obj
i = 0
obj.map{|e|
e
}.sort
end
def test_iterators
assert_equal [0, 1, 2], enum_test(3.times)
assert_equal [:x, :y, :z], enum_test([:x, :y, :z].each)
assert_equal [[:x, 1], [:y, 2]], enum_test({:x=>1, :y=>2})
end
## Enumerator as Iterator
def test_next
e = 3.times
3.times{|i|
assert_equal i, e.next
}
assert_raise(StopIteration){e.next}
end
def test_loop
e = 3.times
i = 0
loop{
assert_equal(i, e.next)
i += 1
}
end
def test_nested_itaration
def (o = Object.new).each
yield :ok1
yield [:ok2, :x].each.next
end
e = o.to_enum
assert_equal :ok1, e.next
assert_equal :ok2, e.next
assert_raise(StopIteration){e.next}
end
end