diff --git a/NEWS.md b/NEWS.md index ae87adecd9..869f9b2f85 100644 --- a/NEWS.md +++ b/NEWS.md @@ -188,8 +188,8 @@ Note: We're only listing outstanding class updates. * Range - * `Range#to_set` and `Enumerator#to_set` now perform size checks to prevent - issues with endless ranges. [[Bug #21654]] + * `Range#to_set` now performs size checks to prevent issues with + endless ranges. [[Bug #21654]] * `Range#overlap?` now correctly handles infinite (unbounded) ranges. [[Bug #21185]] diff --git a/enumerator.c b/enumerator.c index c2b2bfa9a0..93671dfe71 100644 --- a/enumerator.c +++ b/enumerator.c @@ -3366,24 +3366,6 @@ enumerator_plus(VALUE obj, VALUE eobj) return new_enum_chain(rb_ary_new_from_args(2, obj, eobj)); } -/* - * call-seq: - * e.to_set -> set - * - * Returns a set generated from this enumerator. - * - * e = Enumerator.new { |y| y << 1 << 1 << 2 << 3 << 5 } - * e.to_set #=> # - */ -static VALUE enumerator_to_set(int argc, VALUE *argv, VALUE obj) -{ - VALUE size = rb_funcall(obj, id_size, 0); - if (RB_TYPE_P(size, T_FLOAT) && RFLOAT_VALUE(size) == INFINITY) { - rb_raise(rb_eArgError, "cannot convert an infinite enumerator to a set"); - } - return rb_call_super(argc, argv); -} - /* * Document-class: Enumerator::Product * @@ -4540,7 +4522,6 @@ InitVM_Enumerator(void) rb_define_method(rb_cEnumerator, "rewind", enumerator_rewind, 0); rb_define_method(rb_cEnumerator, "inspect", enumerator_inspect, 0); rb_define_method(rb_cEnumerator, "size", enumerator_size, 0); - rb_define_method(rb_cEnumerator, "to_set", enumerator_to_set, -1); rb_define_method(rb_cEnumerator, "+", enumerator_plus, 1); rb_define_method(rb_mEnumerable, "chain", enum_chain, -1); diff --git a/test/ruby/test_enumerator.rb b/test/ruby/test_enumerator.rb index 5fabea645d..177d7c04fa 100644 --- a/test/ruby/test_enumerator.rb +++ b/test/ruby/test_enumerator.rb @@ -1070,13 +1070,4 @@ class TestEnumerator < Test::Unit::TestCase enum = ary.each assert_equal(35.0, enum.sum) end - - def test_to_set - e = Enumerator.new { it << 1 << 1 << 2 << 3 << 5 } - set = e.to_set - assert_equal(Set[1, 2, 3, 5], set) - - ei = Enumerator.new(Float::INFINITY) { it << 1 << 1 << 2 << 3 << 5 } - assert_raise(ArgumentError) { ei.to_set } - end end diff --git a/test/ruby/test_set.rb b/test/ruby/test_set.rb index e8ac3e329e..70a61aa3b5 100644 --- a/test/ruby/test_set.rb +++ b/test/ruby/test_set.rb @@ -1003,6 +1003,12 @@ class TC_Enumerable < Test::Unit::TestCase set = assert_nothing_raised { enum.to_set } assert(set.is_a?(Set)) assert_equal(Set[1,2,3], set) + + enumerator = enum.to_enum + + set = assert_nothing_raised { enumerator.to_set } + assert(set.is_a?(Set)) + assert_equal(Set[1,2,3], set) end end