summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2021-02-20 12:12:35 +0900
committernagachika <nagachika@ruby-lang.org>2021-02-20 12:12:35 +0900
commit69d01653f831052acdc803aad0b78690ad61ca86 (patch)
tree6d833700829893520fa3b20416e3f42e517b7f8f /test
parentea222b05571741f36b59f615c2e83b3adafbd398 (diff)
merge revision(s) 1b1ea7b3bc9484e6e59d716fce2965a2f39d1e3d,b6e6807993c770c5d2e069d8741f5dadf0b38069: [Backport #17092]
Fix Array#flatten for recursive array when given positive depth [Bug #17092] --- array.c | 44 ++++++++++++++++++++++++++------------------ test/ruby/test_array.rb | 14 +++++++++++--- 2 files changed, 37 insertions(+), 21 deletions(-) Initialize memo pointer and use it consistently to silence gcc 7+ --- array.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_array.rb14
1 files changed, 11 insertions, 3 deletions
diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb
index 476cf795f0..f2956a7fba 100644
--- a/test/ruby/test_array.rb
+++ b/test/ruby/test_array.rb
@@ -886,6 +886,17 @@ class TestArray < Test::Unit::TestCase
assert_raise(NoMethodError, bug12738) { a.flatten.m }
end
+ def test_flatten_recursive
+ a = []
+ a << a
+ assert_raise(ArgumentError) { a.flatten }
+ b = [1]; c = [2, b]; b << c
+ assert_raise(ArgumentError) { b.flatten }
+
+ assert_equal([1, 2, b], b.flatten(1))
+ assert_equal([1, 2, 1, 2, 1, c], b.flatten(4))
+ end
+
def test_flatten!
a1 = @cls[ 1, 2, 3]
a2 = @cls[ 5, 6 ]
@@ -2624,9 +2635,6 @@ class TestArray < Test::Unit::TestCase
def test_flatten_error
a = []
- a << a
- assert_raise(ArgumentError) { a.flatten }
-
f = [].freeze
assert_raise(ArgumentError) { a.flatten!(1, 2) }
assert_raise(TypeError) { a.flatten!(:foo) }