mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
random.c: Random.bytes
* random.c (random_s_bytes): new method Random.bytes, which is equivalent to Random::DEFAULT.bytes. [Feature #4938] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
74bf1767e3
commit
1cd9c3ce62
3 changed files with 28 additions and 3 deletions
6
NEWS
6
NEWS
|
@ -34,6 +34,12 @@ with all sufficient information, see the ChangeLog file or Redmine
|
||||||
|
|
||||||
* Proc#call doesn't change $SAFE any more. [Feature #14250]
|
* Proc#call doesn't change $SAFE any more. [Feature #14250]
|
||||||
|
|
||||||
|
* Random
|
||||||
|
|
||||||
|
* New methods:
|
||||||
|
|
||||||
|
* added Random.bytes. [Feature #4938]
|
||||||
|
|
||||||
=== Stdlib updates (outstanding ones only)
|
=== Stdlib updates (outstanding ones only)
|
||||||
|
|
||||||
* Matrix
|
* Matrix
|
||||||
|
|
14
random.c
14
random.c
|
@ -1134,6 +1134,19 @@ rb_random_bytes(VALUE obj, long n)
|
||||||
return genrand_bytes(rnd, 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
|
static VALUE
|
||||||
range_values(VALUE vmax, VALUE *begp, VALUE *endp, int *exclp)
|
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, "srand", rb_f_srand, -1);
|
||||||
rb_define_singleton_method(rb_cRandom, "rand", random_s_rand, -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, "new_seed", random_seed, 0);
|
||||||
rb_define_singleton_method(rb_cRandom, "urandom", random_raw_seed, 1);
|
rb_define_singleton_method(rb_cRandom, "urandom", random_raw_seed, 1);
|
||||||
rb_define_private_method(CLASS_OF(rb_cRandom), "state", random_s_state, 0);
|
rb_define_private_method(CLASS_OF(rb_cRandom), "state", random_s_state, 0);
|
||||||
|
|
|
@ -347,10 +347,15 @@ END
|
||||||
end
|
end
|
||||||
|
|
||||||
def assert_random_bytes(r)
|
def assert_random_bytes(r)
|
||||||
|
srand(0)
|
||||||
assert_equal("", r.bytes(0))
|
assert_equal("", r.bytes(0))
|
||||||
assert_equal("\xAC".force_encoding("ASCII-8BIT"), r.bytes(1))
|
assert_equal("", Random.bytes(0))
|
||||||
assert_equal("/\xAA\xC4\x97u\xA6\x16\xB7\xC0\xCC".force_encoding("ASCII-8BIT"),
|
x = "\xAC".force_encoding("ASCII-8BIT")
|
||||||
r.bytes(10))
|
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
|
end
|
||||||
|
|
||||||
def test_random_range
|
def test_random_range
|
||||||
|
|
Loading…
Reference in a new issue