mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* enumerator.c (next_i): fix to return with Fiber#yield at
the end of each block. [ruby-dev:31470] * enumerator.c (enumerator_next_p): call init_next if not initialized. [ruby-dev:31514] * test/ruby/test_enumerator.rb: add tests for Enumerator. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13120 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
009debfd02
commit
ad56f8c611
4 changed files with 73 additions and 10 deletions
48
test/ruby/test_enumerator.rb
Normal file
48
test/ruby/test_enumerator.rb
Normal file
|
@ -0,0 +1,48 @@
|
|||
require 'test/unit'
|
||||
|
||||
class TestEnumerator < Test::Unit::TestCase
|
||||
def enum_test obj
|
||||
i = 0
|
||||
obj.map{|e|
|
||||
[i+=1, e]
|
||||
}
|
||||
end
|
||||
|
||||
def test_iterators
|
||||
assert_equal [[1, 0], [2, 1], [3, 2]], enum_test(3.times)
|
||||
assert_equal [[1, :x], [2, :y], [3, :z]], enum_test([:x, :y, :z].each)
|
||||
assert_equal [[1, [:x, 1]], [2, [: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_next?
|
||||
e = 3.times
|
||||
assert_equal true, e.next?
|
||||
3.times{|i|
|
||||
assert_equal true, e.next?
|
||||
assert_equal i, e.next
|
||||
}
|
||||
assert_equal false, e.next?
|
||||
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
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue