From 80ccb8e86f28d3cdf3f4ca1fd8581bd5a2acec90 Mon Sep 17 00:00:00 2001 From: ktsj Date: Wed, 4 May 2016 09:06:59 +0000 Subject: * lib/set.rb (Set#{delete_if,keep_if,collect!,reject!,select!,classify,divide}, SortedSet#{delete_if,keep_if}): Return sized enumerators. * test/test_set.rb: add test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54903 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/test_set.rb | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'test/test_set.rb') diff --git a/test/test_set.rb b/test/test_set.rb index cb0727558e..9439974fea 100644 --- a/test/test_set.rb +++ b/test/test_set.rb @@ -432,6 +432,12 @@ class TC_Set < Test::Unit::TestCase ret = set.delete_if { |i| i % 3 == 0 } assert_same(set, ret) assert_equal(Set[1,2,4,5,7,8,10], set) + + set = Set.new(1..10) + enum = set.delete_if + assert_equal(set.size, enum.size) + assert_same(set, enum.each { |i| i % 3 == 0 }) + assert_equal(Set[1,2,4,5,7,8,10], set) end def test_keep_if @@ -444,6 +450,12 @@ class TC_Set < Test::Unit::TestCase ret = set.keep_if { |i| i % 3 != 0 } assert_same(set, ret) assert_equal(Set[1,2,4,5,7,8,10], set) + + set = Set.new(1..10) + enum = set.keep_if + assert_equal(set.size, enum.size) + assert_same(set, enum.each { |i| i % 3 != 0 }) + assert_equal(Set[1,2,4,5,7,8,10], set) end def test_collect! @@ -462,6 +474,22 @@ class TC_Set < Test::Unit::TestCase assert_same(set, ret) assert_equal(Set[2,4,6,'A','B','C',nil], set) + + set = Set[1,2,3,'a','b','c',-1..1,2..4] + enum = set.collect! + + assert_equal(set.size, enum.size) + assert_same(set, enum.each { |i| + case i + when Numeric + i * 2 + when String + i.upcase + else + nil + end + }) + assert_equal(Set[2,4,6,'A','B','C',nil], set) end def test_reject! @@ -474,6 +502,12 @@ class TC_Set < Test::Unit::TestCase ret = set.reject! { |i| i % 3 == 0 } assert_same(set, ret) assert_equal(Set[1,2,4,5,7,8,10], set) + + set = Set.new(1..10) + enum = set.reject! + assert_equal(set.size, enum.size) + assert_same(set, enum.each { |i| i % 3 == 0 }) + assert_equal(Set[1,2,4,5,7,8,10], set) end def test_select! @@ -486,6 +520,12 @@ class TC_Set < Test::Unit::TestCase ret = set.select! { |i| i % 3 != 0 } assert_same(set, ret) assert_equal(Set[1,2,4,5,7,8,10], set) + + set = Set.new(1..10) + enum = set.select! + assert_equal(set.size, enum.size) + assert_equal(nil, enum.each { |i| i <= 10 }) + assert_equal(Set.new(1..10), set) end def test_merge @@ -563,6 +603,18 @@ class TC_Set < Test::Unit::TestCase assert_equal(Set[3,6,9], ret[0]) assert_equal(Set[1,4,7,10], ret[1]) assert_equal(Set[2,5,8], ret[2]) + + set = Set.new(1..10) + enum = set.classify + + assert_equal(set.size, enum.size) + ret = enum.each { |i| i % 3 } + assert_equal(3, ret.size) + assert_instance_of(Hash, ret) + ret.each_value { |value| assert_instance_of(Set, value) } + assert_equal(Set[3,6,9], ret[0]) + assert_equal(Set[1,4,7,10], ret[1]) + assert_equal(Set[2,5,8], ret[2]) end def test_divide @@ -596,6 +648,17 @@ class TC_Set < Test::Unit::TestCase raise "unexpected group: #{s.inspect}" end } + + set = Set.new(1..10) + enum = set.divide + ret = enum.each { |i| i % 3 } + + assert_equal(set.size, enum.size) + assert_equal(3, ret.size) + n = 0 + ret.each { |s| n += s.size } + assert_equal(set.size, n) + assert_equal(set, ret.flatten) end def test_taintness -- cgit v1.2.1