diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-01-25 03:04:10 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-01-25 03:04:10 +0000 |
commit | aa436bdca6068a3e94dbc0a4a46a242a56355e2c (patch) | |
tree | 80ec96be355c21b0dfd25c213744eb1276826af5 /test/ruby/test_array.rb | |
parent | 7d87d0c466bc742b5776f2306637a73894c402ef (diff) | |
download | ruby-aa436bdca6068a3e94dbc0a4a46a242a56355e2c.tar.gz |
array.c: reduce to_ary call
* array.c (flatten): no need to call to_ary method on elements
beyond the given level. [ruby-core:67637] [Bug #10748]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_array.rb')
-rw-r--r-- | test/ruby/test_array.rb | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index 2cec70d452..bf14d3dfc9 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -790,6 +790,19 @@ class TestArray < Test::Unit::TestCase assert_not_same(a8, a9) end + def test_flatten_splat + bug10748 = '[ruby-core:67637] [Bug #10748]' + o = Object.new + o.singleton_class.class_eval do + define_method(:to_ary) do + raise bug10748 + end + end + a = @cls[@cls[o]] + assert_raise_with_message(RuntimeError, bug10748) {a.flatten} + assert_nothing_raised(RuntimeError, bug10748) {a.flatten(1)} + end + def test_flatten! a1 = @cls[ 1, 2, 3] a2 = @cls[ 5, 6 ] @@ -814,6 +827,19 @@ class TestArray < Test::Unit::TestCase assert_nil(@cls[].flatten!(0), '[ruby-core:23382]') end + def test_flatten_splat! + bug10748 = '[ruby-core:67637] [Bug #10748]' + o = Object.new + o.singleton_class.class_eval do + define_method(:to_ary) do + raise bug10748 + end + end + a = @cls[@cls[o]] + assert_raise_with_message(RuntimeError, bug10748) {a.flatten!} + assert_nothing_raised(RuntimeError, bug10748) {a.flatten!(1)} + end + def test_flatten_with_callcc need_continuation o = Object.new |