From dc215dcd9f96620b7c06a25a741d13b19c2f130b Mon Sep 17 00:00:00 2001 From: marcandre Date: Wed, 23 Oct 2013 15:10:48 +0000 Subject: * array.c: Add Array#to_h [Feature #7292] * enum.c: Add Enumerable#to_h git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_array.rb | 15 +++++++++++++++ test/ruby/test_enum.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) (limited to 'test/ruby') diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index f4faa9bedc..d7e1c365dd 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -1456,6 +1456,21 @@ class TestArray < Test::Unit::TestCase $, = nil end + def test_to_h + kvp = Object.new + def kvp.to_ary + [:obtained, :via_to_ary] + end + array = [ + [:key, :value], + [:ignore_me], + [:ignore, :me, :too], + :ignore_me, + kvp, + ] + assert_equal({key: :value, obtained: :via_to_ary}, array.to_h) + end + def test_uniq a = [] b = a.uniq diff --git a/test/ruby/test_enum.rb b/test/ruby/test_enum.rb index ea873a4069..b86ae274d1 100644 --- a/test/ruby/test_enum.rb +++ b/test/ruby/test_enum.rb @@ -103,6 +103,33 @@ class TestEnumerable < Test::Unit::TestCase assert_equal([1, 2, 3, 1, 2], @obj.to_a) end + def test_to_h + assert_equal({}, @obj.to_h) + obj = Object.new + def obj.each(*args) + yield args + yield [:key, :value] + yield [:ignore_me] + yield [:ignore, :me, :too] + yield :other_key, :other_value + yield :ignore_me + yield :ignore, :me, :too + yield + kvp = Object.new + def kvp.to_ary + [:obtained, :via_to_ary] + end + yield kvp + end + obj.extend Enumerable + assert_equal({ + :hello => :world, + :key => :value, + :other_key => :other_value, + :obtained => :via_to_ary, + }, obj.to_h(:hello, :world)) + end + def test_inject assert_equal(12, @obj.inject {|z, x| z * x }) assert_equal(48, @obj.inject {|z, x| z * 2 + x }) -- cgit v1.2.3