aboutsummaryrefslogtreecommitdiffstats
path: root/test/ruby/test_lazy_enumerator.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_lazy_enumerator.rb')
-rw-r--r--test/ruby/test_lazy_enumerator.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/test/ruby/test_lazy_enumerator.rb b/test/ruby/test_lazy_enumerator.rb
index e76a53e650..80977a0bbd 100644
--- a/test/ruby/test_lazy_enumerator.rb
+++ b/test/ruby/test_lazy_enumerator.rb
@@ -587,4 +587,26 @@ EOS
assert_equal([4, 6, 6, 4, 0, 4], e.first(6))
assert_equal([4, 6, 6, 4, 0, 4], e.first(6))
end
+
+ def test_with_index
+ feature7877 = '[ruby-dev:47025] [Feature #7877]'
+ leibniz = ->(n) {
+ (0..Float::INFINITY).lazy.with_index {|i, j|
+ raise IndexError, "limit exceeded (#{n})" unless j < n
+ ((-1) ** j) / (2*i+1).to_f
+ }.take(n).reduce(:+)
+ }
+ assert_nothing_raised(IndexError, feature7877) {
+ assert_in_epsilon(Math::PI/4, leibniz[1000])
+ }
+
+ ary = (0..Float::INFINITY).lazy.with_index(2) {|i, j| [i-1, j] }.take(2).to_a
+ assert_equal([[-1, 2], [0, 3]], ary)
+
+ ary = (0..Float::INFINITY).lazy.with_index(2).take(2).to_a
+ assert_equal([[0, 2], [1, 3]], ary)
+
+ ary = (0..Float::INFINITY).lazy.with_index.take(2).to_a
+ assert_equal([[0, 0], [1, 1]], ary)
+ end
end