mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* enumerator.c (enumerator_next_p): should check correctly even when
e.next has not been called before. * enumerator.c (enumerator_next): raise StopIteration (name taken from Python) instead of IndexError. * enum.c (enum_zip): catch StopIteration exception. * enumerator.c (enumerator_with_index): return Enumerator if no block is given. * test/ruby/test_iterator.rb (TestIterator::test_enumerator): add test for enumerators. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12905 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cc317d9208
commit
c186fdb90b
5 changed files with 68 additions and 14 deletions
|
@ -488,4 +488,23 @@ class TestIterator < Test::Unit::TestCase
|
|||
def test_block_given_within_iterator
|
||||
assert_equal(["b"], ["a", "b", "c"].grep(IterString.new("b")) {|s| s})
|
||||
end
|
||||
|
||||
def test_enumerator
|
||||
[1,2,3].each.with_index {|x,i|
|
||||
assert_equal(x, i+1)
|
||||
}
|
||||
|
||||
e = [1,2,3].each
|
||||
assert_equal(1, e.next)
|
||||
assert_equal(true, e.next?)
|
||||
assert_equal(2, e.next)
|
||||
assert_equal(3, e.next)
|
||||
assert_raises(StopIteration){e.next}
|
||||
e.rewind
|
||||
assert_equal(true, e.next?)
|
||||
assert_equal(1, e.next)
|
||||
|
||||
assert_equal([[1, 8, 10], [2, 6, 11], [3, 4, 12]],
|
||||
(1..10).zip([8,6,4],(10..100)).to_a)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue