diff --git a/ChangeLog b/ChangeLog index ff5ae43c38..da7c7eeee3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Jun 13 00:45:08 2015 Marc-Andre Lafortune + + * lib/prime.rb: Return sized enumerators. + Patch by Kenichi Kamiya [GH-931] + Sat Jun 13 00:45:06 2015 Marc-Andre Lafortune * lib/prime.rb: Fix with_object with no block given diff --git a/lib/prime.rb b/lib/prime.rb index 1eed28d914..c9575f6a2a 100644 --- a/lib/prime.rb +++ b/lib/prime.rb @@ -270,7 +270,7 @@ class Prime # see +Enumerator+#with_index. def with_index(offset = 0) - return enum_for(:with_index, offset) unless block_given? + return enum_for(:with_index, offset) { Float::INFINITY } unless block_given? return each_with_index(&proc) if offset == 0 each do |prime| @@ -281,11 +281,15 @@ class Prime # see +Enumerator+#with_object. def with_object(obj) - return enum_for(:with_object, obj) unless block_given? + return enum_for(:with_object, obj) { Float::INFINITY } unless block_given? each do |prime| yield prime, obj end end + + def size + Float::INFINITY + end end # An implementation of +PseudoPrimeGenerator+. diff --git a/test/test_prime.rb b/test/test_prime.rb index d4f056466f..48b017e2bc 100644 --- a/test/test_prime.rb +++ b/test/test_prime.rb @@ -106,6 +106,13 @@ class TestPrime < Test::Unit::TestCase end end + def test_enumerator_size + enum = Prime.each + assert_equal Float::INFINITY, enum.size + assert_equal Float::INFINITY, enum.with_object(nil).size + assert_equal Float::INFINITY, enum.with_index(42).size + end + def test_default_instance_does_not_have_compatibility_methods assert !Prime.instance.respond_to?(:succ) assert !Prime.instance.respond_to?(:next)