From: nobu@... Date: 2018-01-26T04:03:27+00:00 Subject: [ruby-core:85126] [Ruby trunk Feature#4938] Add Random.bytes [patch] Issue #4938 has been updated by nobu (Nobuyoshi Nakada). Updated. ```diff diff --git i/random.c w/random.c index 43a3d2ffee..b800f1d9a1 100644 --- i/random.c +++ w/random.c @@ -1134,6 +1134,19 @@ rb_random_bytes(VALUE obj, long n) return genrand_bytes(rnd, n); } +/* + * call-seq: Random.bytes(size) -> a_string + * + * Returns a random binary string. The argument size specified the length of + * the result string. + */ +static VALUE +random_s_bytes(VALUE obj, VALUE len) +{ + rb_random_t *rnd = rand_start(&default_rand); + return genrand_bytes(rnd, NUM2LONG(rb_to_int(len))); +} + static VALUE range_values(VALUE vmax, VALUE *begp, VALUE *endp, int *exclp) { @@ -1636,6 +1649,7 @@ InitVM_Random(void) rb_define_singleton_method(rb_cRandom, "srand", rb_f_srand, -1); rb_define_singleton_method(rb_cRandom, "rand", random_s_rand, -1); + rb_define_singleton_method(rb_cRandom, "bytes", random_s_bytes, 1); rb_define_singleton_method(rb_cRandom, "new_seed", random_seed, 0); rb_define_singleton_method(rb_cRandom, "urandom", random_raw_seed, 1); rb_define_private_method(CLASS_OF(rb_cRandom), "state", random_s_state, 0); diff --git i/test/ruby/test_rand.rb w/test/ruby/test_rand.rb index 882d33fb40..136ee4f912 100644 --- i/test/ruby/test_rand.rb +++ w/test/ruby/test_rand.rb @@ -347,10 +347,15 @@ end def assert_random_bytes(r) + srand(0) assert_equal("", r.bytes(0)) - assert_equal("\xAC".force_encoding("ASCII-8BIT"), r.bytes(1)) - assert_equal("/\xAA\xC4\x97u\xA6\x16\xB7\xC0\xCC".force_encoding("ASCII-8BIT"), - r.bytes(10)) + assert_equal("", Random.bytes(0)) + x = "\xAC".force_encoding("ASCII-8BIT") + assert_equal(x, r.bytes(1)) + assert_equal(x, Random.bytes(1)) + x = "/\xAA\xC4\x97u\xA6\x16\xB7\xC0\xCC".force_encoding("ASCII-8BIT") + assert_equal(x, r.bytes(10)) + assert_equal(x, Random.bytes(10)) end def test_random_range ``` ---------------------------------------- Feature #4938: Add Random.bytes [patch] https://bugs.ruby-lang.org/issues/4938#change-69852 * Author: marcandre (Marc-Andre Lafortune) * Status: Assigned * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: ---------------------------------------- It could be useful to add a `Random.bytes` method (equivalent to `Random::DEFAULT.bytes`), as per the simple patch attached. ---Files-------------------------------- randombytes.diff (2.19 KB) randombytes-ruby22.diff (2.38 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: