From ad62d7809e4944f3f5e9d0f896af5be146d23b51 Mon Sep 17 00:00:00 2001 From: leviongit Date: Thu, 4 Apr 2024 20:36:44 +0200 Subject: [PATCH] fix: `Array#shuffle(!)` result distribution --- mrbgems/mruby-random/src/random.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 98d4fce4d..fdba482ee 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -261,7 +261,7 @@ static mrb_value mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary) { if (RARRAY_LEN(ary) > 1) { - mrb_int i, max; + mrb_int i; rand_state *random; mrb_sym kname = MRB_SYM(random); mrb_value r; @@ -270,13 +270,12 @@ mrb_ary_shuffle_bang(mrb_state *mrb, mrb_value ary) mrb_get_args(mrb, ":", &kw); random = check_random_arg(mrb, r); mrb_ary_modify(mrb, mrb_ary_ptr(ary)); - max = RARRAY_LEN(ary); for (i = RARRAY_LEN(ary) - 1; i > 0; i--) { mrb_int j; mrb_value *ptr = RARRAY_PTR(ary); mrb_value tmp; - j = rand_i(random, max); + j = rand_i(random, i + 1); tmp = ptr[i]; ptr[i] = ptr[j];