diff options
-rw-r--r-- | random.c | 2 | ||||
-rw-r--r-- | test/ruby/test_array.rb | 11 |
2 files changed, 12 insertions, 1 deletions
@@ -1018,7 +1018,7 @@ rb_random_ulong_limited(VALUE obj, unsigned long limit) rb_random_t *rnd = try_get_rnd(obj); if (!rnd) { VALUE lim = ulong_to_num_plus_1(limit); - VALUE v = rb_to_int(rb_funcallv(obj, id_rand, 1, &lim)); + VALUE v = rb_to_int(rb_funcallv_public(obj, id_rand, 1, &lim)); unsigned long r = NUM2ULONG(v); if (rb_num_negative_p(v)) { rb_raise(rb_eRangeError, "random number too small %ld", r); diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index bdb603bec5..24a8eae346 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -2337,6 +2337,13 @@ class TestArray < Test::Unit::TestCase end ary = (0...10000).to_a assert_equal(ary.rotate, ary.shuffle(random: gen_to_int)) + + assert_raise(NoMethodError) { + ary.shuffle(random: Object.new) + } + assert_raise(NoMethodError) { + ary.shuffle!(random: Object.new) + } end def test_sample @@ -2437,6 +2444,10 @@ class TestArray < Test::Unit::TestCase end ary = (0...10000).to_a assert_equal(5000, ary.sample(random: gen_to_int)) + + assert_raise(NoMethodError) { + ary.sample(random: Object.new) + } end def test_cycle |