summaryrefslogtreecommitdiff
path: root/test/ruby/test_arithmetic_sequence.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_arithmetic_sequence.rb')
-rw-r--r--test/ruby/test_arithmetic_sequence.rb72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/ruby/test_arithmetic_sequence.rb b/test/ruby/test_arithmetic_sequence.rb
index f4f47ea7a8..5e2a825265 100644
--- a/test/ruby/test_arithmetic_sequence.rb
+++ b/test/ruby/test_arithmetic_sequence.rb
@@ -26,6 +26,11 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_equal(10, 10.step(to: 1, by: -2).begin)
assert_equal(10, 10.step(to: -1, by: -2).begin)
assert_equal(10.0, 10.0.step(to: -1.0, by: -2.0).begin)
+
+ assert_equal(3, (3..).step(2).begin)
+ assert_equal(4, (4...).step(7).begin)
+ assert_equal(nil, (..10).step(9).begin)
+ assert_equal(nil, (...11).step(5).begin)
end
def test_end
@@ -44,6 +49,11 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_equal(1, 10.step(to: 1, by: -2).end)
assert_equal(-1, 10.step(to: -1, by: -2).end)
assert_equal(-1.0, 10.0.step(to: -1.0, by: -2.0).end)
+
+ assert_equal(nil, (3..).step(2).end)
+ assert_equal(nil, (4...).step(7).end)
+ assert_equal(10, (..10).step(9).end)
+ assert_equal(11, (...11).step(5).end)
end
def test_exclude_end_p
@@ -61,6 +71,11 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_equal(false, 10.step(to: 1, by: -1).exclude_end?)
assert_equal(false, 10.step(to: 1, by: -2).exclude_end?)
assert_equal(false, 10.step(to: -1, by: -2).exclude_end?)
+
+ assert_equal(false, (3..).step(2).exclude_end?)
+ assert_equal(true, (4...).step(7).exclude_end?)
+ assert_equal(false, (..10).step(9).exclude_end?)
+ assert_equal(true, (...11).step(5).exclude_end?)
end
def test_step
@@ -79,6 +94,11 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_equal(-2, 10.step(to: 1, by: -2).step)
assert_equal(-2, 10.step(to: -1, by: -2).step)
assert_equal(-2.0, 10.0.step(to: -1.0, by: -2.0).step)
+
+ assert_equal(2, (3..).step(2).step)
+ assert_equal(7, (4...).step(7).step)
+ assert_equal(9, (..10).step(9).step)
+ assert_equal(5, (...11).step(5).step)
end
def test_eq
@@ -107,6 +127,7 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_equal(seq.hash, seq.hash)
assert_equal(seq.hash, 1.step.hash)
assert_equal(seq.hash, 1.step(nil).hash)
+ assert_kind_of(String, seq.hash.to_s)
end
def test_first
@@ -145,6 +166,30 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_equal(10.0, seq.first)
assert_equal([10.0], seq.first(1))
assert_equal([10.0, 8.0, 6.0], seq.first(3))
+
+ seq = (1..).step(2)
+ assert_equal(1, seq.first)
+ assert_equal([1], seq.first(1))
+ assert_equal([1, 3, 5], seq.first(3))
+
+ seq = (..10).step(2)
+ assert_equal(nil, seq.first)
+ assert_raise(TypeError) { seq.first(1) }
+ assert_raise(TypeError) { seq.first(3) }
+ end
+
+ def test_first_bug15518
+ bug15518 = '[Bug #15518]'
+ seq = (1 .. 10.0).step(1)
+ five_float_classes = Array.new(5) { Float }
+ assert_equal(five_float_classes, seq.first(5).map(&:class), bug15518)
+ assert_equal([1.0, 2.0, 3.0, 4.0, 5.0], seq.first(5), bug15518)
+ seq = (1 .. Float::INFINITY).step(1)
+ assert_equal(five_float_classes, seq.first(5).map(&:class), bug15518)
+ assert_equal([1.0, 2.0, 3.0, 4.0, 5.0], seq.first(5), bug15518)
+ seq = (1 .. Float::INFINITY).step(1r)
+ assert_equal(five_float_classes, seq.first(5).map(&:class), bug15518)
+ assert_equal([1.0, 2.0, 3.0, 4.0, 5.0], seq.first(5), bug15518)
end
def test_last
@@ -219,6 +264,11 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_instance_of Integer, res[1]
end
+ def test_last_bug17218
+ seq = (1.0997r .. 1.1r).step(0.0001r)
+ assert_equal(1.1r, seq.last, '[ruby-core:100312] [Bug #17218]')
+ end
+
def test_to_a
assert_equal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 1.step(10).to_a)
assert_equal([1, 3, 5, 7, 9], 1.step(10, 2).to_a)
@@ -228,6 +278,17 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_equal([10.0, 8.0, 6.0, 4.0, 2.0], (10.0..1.0).step(-2.0).to_a)
end
+ def test_to_a_bug15444
+ seq = ((1/10r)..(1/2r)).step(1/10r)
+ assert_num_equal_type([1/10r, 1/5r, 3/10r, 2/5r, 1/2r], seq.to_a,
+ '[ruby-core:90648] [Bug #15444]')
+ end
+
+ def test_to_a_bug17218
+ seq = (1.0997r .. 1.1r).step(0.0001r)
+ assert_equal([1.0997r, 1.0998r, 1.0999r, 1.1r], seq.to_a, '[ruby-core:100312] [Bug #17218]')
+ end
+
def test_slice
seq = 1.step(10, 2)
assert_equal([[1, 3, 5], [7, 9]], seq.each_slice(3).to_a)
@@ -286,6 +347,11 @@ class TestArithmeticSequence < Test::Unit::TestCase
end
end
+ def test_next_bug15444
+ seq = ((1/10r)..(1/2r)).step(1/10r)
+ assert_equal(1/10r, seq.next, '[ruby-core:90648] [Bug #15444]')
+ end
+
def test_next_rewind
seq = 1.step(6, 2)
assert_equal(1, seq.next)
@@ -416,4 +482,10 @@ class TestArithmeticSequence < Test::Unit::TestCase
assert_num_equal_type([0.0, 0.0+1.0i, 0.0+2.0i], (0.0..).step(1.0i).take(3))
assert_num_equal_type([0.0+0.0i, 0.0+1.0i, 0.0+2.0i], (0.0i..).step(1.0i).take(3))
end
+
+ def test_sum
+ assert_equal([1, 3, 5, 7, 9].sum, (1..10).step(2).sum)
+ assert_equal([1.0, 2.5, 4.0, 5.5, 7.0, 8.5, 10.0].sum, (1.0..10.0).step(1.5).sum)
+ assert_equal([1/2r, 1r, 3/2r, 2, 5/2r, 3, 7/2r, 4].sum, ((1/2r)...(9/2r)).step(1/2r).sum)
+ end
end