* random.c (rand_init): Make it possible to specify arbitrary array

for init_genrand().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43736 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2013-11-20 11:05:38 +00:00
Родитель cdde8c23de
Коммит ced9ad5ab5
3 изменённых файлов: 6 добавлений и 7 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Wed Nov 20 19:45:22 2013 Tanaka Akira <akr@fsij.org>
* random.c (rand_init): Make it possible to specify arbitrary array
for init_genrand().
Wed Nov 20 17:34:13 2013 Koichi Sasada <ko1@atdot.net> Wed Nov 20 17:34:13 2013 Koichi Sasada <ko1@atdot.net>
* parse.y (rb_gc_mark_symbols): set global_symbols.minor_marked only * parse.y (rb_gc_mark_symbols): set global_symbols.minor_marked only

Просмотреть файл

@ -377,18 +377,12 @@ rand_init(struct MT *mt, VALUE vseed)
seed = rb_to_int(vseed); seed = rb_to_int(vseed);
len = rb_absint_numwords(seed, 32, NULL); len = rb_absint_numwords(seed, 32, NULL);
if (MT_MAX_STATE < len)
len = MT_MAX_STATE;
if (len > numberof(buf0)) if (len > numberof(buf0))
buf = ALLOC_N(unsigned int, len); buf = ALLOC_N(unsigned int, len);
sign = rb_integer_pack(seed, buf, len, sizeof(uint32_t), 0, sign = rb_integer_pack(seed, buf, len, sizeof(uint32_t), 0,
INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER); INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER);
if (sign < 0) if (sign < 0)
sign = -sign; sign = -sign;
if (sign != 2) { /* not overflow */
while (0 < len && buf[len-1] == 0)
len--;
}
if (len == 0) { if (len == 0) {
buf[0] = 0; buf[0] = 0;
len = 1; len = 1;

Просмотреть файл

@ -177,7 +177,7 @@ class TestRand < Test::Unit::TestCase
end end
def test_big_seed def test_big_seed
assert_random_int(%w(1143843490), 0x100000000, 2**1000000-1) assert_random_int(%w(2757555016), 0x100000000, 2**1000000-1)
end end
def test_random_gc def test_random_gc