mirror of
https://github.com/ruby/ruby.git
synced 2026-01-26 20:19:19 +00:00
Revert the override of Enumerator#to_set that performed size checks
[Bug #21780]
This commit is contained in:
parent
54d3945ee5
commit
79f36c544a
4
NEWS.md
4
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]]
|
||||
|
||||
19
enumerator.c
19
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 #=> #<Set: {1, 2, 3, 5}>
|
||||
*/
|
||||
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);
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user