From 13c68eb81ef16b8c361727bf92439cf51c43206e Mon Sep 17 00:00:00 2001 From: ka-weihe Date: Tue, 2 Jun 2020 06:39:38 +0200 Subject: [PATCH] rand: fix warnings --- vlib/crypto/rand/rand_test.v | 44 ------- vlib/rand/mt19937.v | 4 +- vlib/rand/mt19937_test.v | 22 ++-- vlib/rand/musl_rng.v | 6 +- vlib/rand/musl_rng_test.v | 20 +-- vlib/rand/pcg32.v | 8 +- vlib/rand/pcg32_test.v | 20 +-- vlib/rand/rand.v | 107 ----------------- vlib/rand/random_numbers_test.v | 207 -------------------------------- vlib/rand/splitmix64.v | 4 +- vlib/rand/splitmix64_test.v | 20 +-- vlib/rand/system_rng.c.v | 4 +- vlib/rand/system_rng_test.v | 48 ++++---- vlib/rand/wyrand.v | 4 +- vlib/rand/wyrand_test.v | 20 +-- 15 files changed, 90 insertions(+), 448 deletions(-) delete mode 100644 vlib/crypto/rand/rand_test.v diff --git a/vlib/crypto/rand/rand_test.v b/vlib/crypto/rand/rand_test.v deleted file mode 100644 index 42021d243f..0000000000 --- a/vlib/crypto/rand/rand_test.v +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2019-2020 Alexander Medvednikov. All rights reserved. -// Use of this source code is governed by an MIT license -// that can be found in the LICENSE file. -import crypto.rand - -fn get_random_bytes(no_bytes int) []byte { - r := rand.read(no_bytes) or { - assert false - return [] - } - assert r.len == no_bytes - return r -} - -fn test_crypto_rand_read() { - no_bytes := 100 - r1 := get_random_bytes(no_bytes) - r2 := get_random_bytes(no_bytes) - mut equals := 0 - for i in 0 .. r1.len { - if r1[i] == r2[i] { - equals++ - } - } - assert (100.0 * f32(equals) / f32(no_bytes)) < 20.0 -} - -fn test_crypto_rand_int_u64() { - max := u64(160) - mut unique := []u64{} - for _ in 0 .. 80 { - r := rand.int_u64(max) or { - assert false - return - } - if r >= max { - assert false - } - if r !in unique { - unique << r - } - } - assert unique.len >= 10 -} diff --git a/vlib/rand/mt19937.v b/vlib/rand/mt19937.v index 3fa7bf239b..26afac7109 100644 --- a/vlib/rand/mt19937.v +++ b/vlib/rand/mt19937.v @@ -234,7 +234,7 @@ pub fn (mut rng MT19937RNG) intn(max int) int { eprintln('max has to be positive.') exit(1) } - return int(rng.u32n(max)) + return int(rng.u32n(u32(max))) } // rng.i64n(max) - return a 64bit positive i64 in [0, max) @@ -244,7 +244,7 @@ pub fn (mut rng MT19937RNG) i64n(max i64) i64 { eprintln('max has to be positive.') exit(1) } - return i64(rng.u64n(max)) + return i64(rng.u64n(u64(max))) } // rng.int_in_range(min, max) - return a 32bit positive int in [0, max) diff --git a/vlib/rand/mt19937_test.v b/vlib/rand/mt19937_test.v index a392073b9c..068af67a52 100644 --- a/vlib/rand/mt19937_test.v +++ b/vlib/rand/mt19937_test.v @@ -14,7 +14,7 @@ const ( ) fn mt19937_basic_test() { - rng := rand.MT19937RNG{} + mut rng := rand.MT19937RNG{} rng.seed([u32(0xdeadbeef)]) target := [956529277, 3842322136, 3319553134, 1843186657, 2704993644, 595827513, 938518626, 1676224337, 3221315650, 1819026461] @@ -73,7 +73,7 @@ fn test_mt19937_variability() { } } -fn check_uniformity_u64(rng rand.MT19937RNG, range u64) { +fn check_uniformity_u64(mut rng rand.MT19937RNG, range u64) { range_f64 := f64(range) expected_mean := range_f64 / 2.0 mut variance := 0.0 @@ -94,12 +94,12 @@ fn test_mt19937_uniformity_u64() { mut rng := rand.MT19937RNG{} rng.seed(seed) for range in ranges { - check_uniformity_u64(rng, range) + check_uniformity_u64(mut rng, u64(range)) } } } -fn check_uniformity_f64(rng rand.MT19937RNG) { +fn check_uniformity_f64(mut rng rand.MT19937RNG) { expected_mean := 0.5 mut variance := 0.0 for _ in 0 .. sample_size { @@ -118,7 +118,7 @@ fn test_mt19937_uniformity_f64() { for seed in seeds { mut rng := rand.MT19937RNG{} rng.seed(seed) - check_uniformity_f64(rng) + check_uniformity_f64(mut rng) } } @@ -128,7 +128,7 @@ fn test_mt19937_u32n() { mut rng := rand.MT19937RNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32n(max) + value := rng.u32n(u32(max)) assert value >= 0 assert value < max } @@ -155,7 +155,7 @@ fn test_mt19937_u32_in_range() { mut rng := rand.MT19937RNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32_in_range(min, max) + value := rng.u32_in_range(u32(min), u32(max)) assert value >= min assert value < max } @@ -210,7 +210,7 @@ fn test_mt19937_int63() { fn test_mt19937_intn() { max := 2525642 for seed in seeds { - rng := rand.MT19937RNG{} + mut rng := rand.MT19937RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.intn(max) @@ -223,7 +223,7 @@ fn test_mt19937_intn() { fn test_mt19937_i64n() { max := i64(3246727724653636) for seed in seeds { - rng := rand.MT19937RNG{} + mut rng := rand.MT19937RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64n(max) @@ -237,7 +237,7 @@ fn test_mt19937_int_in_range() { min := -4252 max := 1034 for seed in seeds { - rng := rand.MT19937RNG{} + mut rng := rand.MT19937RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.int_in_range(min, max) @@ -251,7 +251,7 @@ fn test_mt19937_i64_in_range() { min := i64(-24095) max := i64(324058) for seed in seeds { - rng := rand.MT19937RNG{} + mut rng := rand.MT19937RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64_in_range(min, max) diff --git a/vlib/rand/musl_rng.v b/vlib/rand/musl_rng.v index 0cb05ec88a..8adb0211b8 100644 --- a/vlib/rand/musl_rng.v +++ b/vlib/rand/musl_rng.v @@ -106,7 +106,7 @@ pub fn (mut rng MuslRNG) u32_in_range(min, max u64) u64 { eprintln('max must be greater than min') exit(1) } - return min + rng.u32n(max - min) + return min + rng.u32n(u32(max - min)) } // rn.u64_in_range(min, max) - return a pseudorandom 64 bit unsigned u64 in [min, max) @@ -150,7 +150,7 @@ pub fn (mut rng MuslRNG) intn(max int) int { eprintln('max has to be positive.') exit(1) } - return int(rng.u32n(max)) + return int(rng.u32n(u32(max))) } // rng.i64n(max) - return a 64bit positive i64 in [0, max) @@ -160,7 +160,7 @@ pub fn (mut rng MuslRNG) i64n(max i64) i64 { eprintln('max has to be positive.') exit(1) } - return i64(rng.u64n(max)) + return i64(rng.u64n(u64(max))) } // rng.int_in_range(min, max) - return a 32bit positive int in [0, max) diff --git a/vlib/rand/musl_rng_test.v b/vlib/rand/musl_rng_test.v index 45c8d86a91..c59514a742 100644 --- a/vlib/rand/musl_rng_test.v +++ b/vlib/rand/musl_rng_test.v @@ -63,7 +63,7 @@ fn test_musl_variability() { } } -fn check_uniformity_u64(rng rand.MuslRNG, range u64) { +fn check_uniformity_u64(mut rng rand.MuslRNG, range u64) { range_f64 := f64(range) expected_mean := range_f64 / 2.0 mut variance := 0.0 @@ -84,12 +84,12 @@ fn test_musl_uniformity_u64() { mut rng := rand.MuslRNG{} rng.seed(seed) for range in ranges { - check_uniformity_u64(rng, range) + check_uniformity_u64(mut rng, u64(range)) } } } -fn check_uniformity_f64(rng rand.MuslRNG) { +fn check_uniformity_f64(mut rng rand.MuslRNG) { expected_mean := 0.5 mut variance := 0.0 for _ in 0 .. sample_size { @@ -108,7 +108,7 @@ fn test_musl_uniformity_f64() { for seed in seeds { mut rng := rand.MuslRNG{} rng.seed(seed) - check_uniformity_f64(rng) + check_uniformity_f64(mut rng) } } @@ -118,7 +118,7 @@ fn test_musl_u32n() { mut rng := rand.MuslRNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32n(max) + value := rng.u32n(u32(max)) assert value >= 0 assert value < max } @@ -145,7 +145,7 @@ fn test_musl_u32_in_range() { mut rng := rand.MuslRNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32_in_range(min, max) + value := rng.u32_in_range(u64(min), u64(max)) assert value >= min assert value < max } @@ -200,7 +200,7 @@ fn test_musl_int63() { fn test_musl_intn() { max := 2525642 for seed in seeds { - rng := rand.MuslRNG{} + mut rng := rand.MuslRNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.intn(max) @@ -213,7 +213,7 @@ fn test_musl_intn() { fn test_musl_i64n() { max := i64(3246727724653636) for seed in seeds { - rng := rand.MuslRNG{} + mut rng := rand.MuslRNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64n(max) @@ -227,7 +227,7 @@ fn test_musl_int_in_range() { min := -4252 max := 1034 for seed in seeds { - rng := rand.MuslRNG{} + mut rng := rand.MuslRNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.int_in_range(min, max) @@ -241,7 +241,7 @@ fn test_musl_i64_in_range() { min := i64(-24095) max := i64(324058) for seed in seeds { - rng := rand.MuslRNG{} + mut rng := rand.MuslRNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64_in_range(min, max) diff --git a/vlib/rand/pcg32.v b/vlib/rand/pcg32.v index 769ddb56fa..96fa6f88c1 100644 --- a/vlib/rand/pcg32.v +++ b/vlib/rand/pcg32.v @@ -14,7 +14,7 @@ mut: // TODO: Remove in Phase 2 of reorganizing Random pub fn new_pcg32(init_state, init_seq u64) PCG32RNG { - rng := PCG32RNG{} + mut rng := PCG32RNG{} rng.seed([u32(init_state), u32(init_state >> 32), u32(init_seq), u32(init_seq >> 32)]) return rng } @@ -104,7 +104,7 @@ pub fn (mut rng PCG32RNG) u32_in_range(min, max u64) u64 { eprintln('max must be greater than min') exit(1) } - return min + rng.u32n(max - min) + return min + rng.u32n(u32(max - min)) } // rn.u64_in_range(min, max) - return a pseudorandom 64 bit unsigned u64 in [min, max) @@ -148,7 +148,7 @@ pub fn (mut rng PCG32RNG) intn(max int) int { eprintln('max has to be positive.') exit(1) } - return int(rng.u32n(max)) + return int(rng.u32n(u32(max))) } // rng.i64n(max) - return a 64bit positive i64 in [0, max) @@ -158,7 +158,7 @@ pub fn (mut rng PCG32RNG) i64n(max i64) i64 { eprintln('max has to be positive.') exit(1) } - return i64(rng.u64n(max)) + return i64(rng.u64n(u64(max))) } // rng.int_in_range(min, max) - return a 32bit positive int in [0, max) diff --git a/vlib/rand/pcg32_test.v b/vlib/rand/pcg32_test.v index 0476176069..642f6c419d 100644 --- a/vlib/rand/pcg32_test.v +++ b/vlib/rand/pcg32_test.v @@ -61,7 +61,7 @@ fn test_pcg32_variability() { } } -fn check_uniformity_u64(rng rand.PCG32RNG, range u64) { +fn check_uniformity_u64(mut rng rand.PCG32RNG, range u64) { range_f64 := f64(range) expected_mean := range_f64 / 2.0 mut variance := 0.0 @@ -82,12 +82,12 @@ fn test_pcg32_uniformity_u64() { mut rng := rand.PCG32RNG{} rng.seed(seed) for range in ranges { - check_uniformity_u64(rng, range) + check_uniformity_u64(mut rng, u64(range)) } } } -fn check_uniformity_f64(rng rand.PCG32RNG) { +fn check_uniformity_f64(mut rng rand.PCG32RNG) { expected_mean := 0.5 mut variance := 0.0 for _ in 0 .. sample_size { @@ -106,7 +106,7 @@ fn test_pcg32_uniformity_f64() { for seed in seeds { mut rng := rand.PCG32RNG{} rng.seed(seed) - check_uniformity_f64(rng) + check_uniformity_f64(mut rng) } } @@ -116,7 +116,7 @@ fn test_pcg32_u32n() { mut rng := rand.PCG32RNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32n(max) + value := rng.u32n(u32(max)) assert value >= 0 assert value < max } @@ -143,7 +143,7 @@ fn test_pcg32_u32_in_range() { mut rng := rand.PCG32RNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32_in_range(min, max) + value := rng.u32_in_range(u64(min), u64(max)) assert value >= min assert value < max } @@ -198,7 +198,7 @@ fn test_pcg32_int63() { fn test_pcg32_intn() { max := 2525642 for seed in seeds { - rng := rand.PCG32RNG{} + mut rng := rand.PCG32RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.intn(max) @@ -211,7 +211,7 @@ fn test_pcg32_intn() { fn test_pcg32_i64n() { max := i64(3246727724653636) for seed in seeds { - rng := rand.PCG32RNG{} + mut rng := rand.PCG32RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64n(max) @@ -225,7 +225,7 @@ fn test_pcg32_int_in_range() { min := -4252 max := 1034 for seed in seeds { - rng := rand.PCG32RNG{} + mut rng := rand.PCG32RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.int_in_range(min, max) @@ -239,7 +239,7 @@ fn test_pcg32_i64_in_range() { min := i64(-24095) max := i64(324058) for seed in seeds { - rng := rand.PCG32RNG{} + mut rng := rand.PCG32RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64_in_range(min, max) diff --git a/vlib/rand/rand.v b/vlib/rand/rand.v index cb39509267..d734bae99f 100644 --- a/vlib/rand/rand.v +++ b/vlib/rand/rand.v @@ -27,10 +27,6 @@ pub fn rand_r(seed &int) int { return ns & 0x7fffffff } -const ( - default_rng = new_default({}) -) - pub struct PRNGConfigStruct { seed []u32 = time_seed_array(2) } @@ -41,109 +37,6 @@ pub fn new_default(config PRNGConfigStruct) &WyRandRNG { return rng } - -// u32() - returns a uniformly distributed pseudorandom 32-bit unsigned u32 -pub fn u32() u32 { - return default_rng.u32() -} - -// u64() - returns a uniformly distributed pseudorandom 64-bit unsigned u64 -pub fn u64() u64 { - return default_rng.u64() -} - -// u32n(max) - returns a uniformly distributed pseudorandom 32-bit unsigned u32 in [0, max) -pub fn u32n(max u32) u32 { - return default_rng.u32n(max) -} - -// u64n(max) - returns a uniformly distributed pseudorandom 64-bit unsigned u64 in [0, max) -pub fn u64n(max u64) u64 { - return default_rng.u64n(max) -} - -// u32n() - returns a uniformly distributed pseudorandom 32-bit unsigned u32 in [min, max) -pub fn u32_in_range(min, max u32) u32 { - return default_rng.u32_in_range(min, max) -} - -// u64_in_range(min, max) - returns a uniformly distributed pseudorandom 64-bit unsigned u64 in [min, max) -pub fn u64_in_range(min, max u64) u64 { - return default_rng.u64_in_range(min, max) -} - -// int() - returns a uniformly distributed pseudorandom 32-bit signed (possibly negative) int -pub fn int() int { - return default_rng.int() -} - -// intn(max) - returns a uniformly distributed pseudorandom 32-bit signed positive int in [0, max) -pub fn intn(max int) int { - return default_rng.intn(max) -} - -// int_in_range(min, max) - returns a uniformly distributed pseudorandom -// 32-bit signed int in [min, max) -pub fn int_in_range(min, max int) int { - return default_rng.int_in_range(min, max) -} - -// int31() - returns a uniformly distributed pseudorandom 31-bit signed positive int -pub fn int31() int { - return default_rng.int31() -} - -// i64() - returns a uniformly distributed pseudorandom 64-bit signed (possibly negative) i64 -pub fn i64() i64 { - return default_rng.i64() -} - -// i64n(max) - returns a uniformly distributed pseudorandom 64-bit signed positive i64 in [0, max) -pub fn i64n(max i64) i64 { - return default_rng.i64n(max) -} - -// i64_in_range(min, max) - returns a uniformly distributed pseudorandom -// 64-bit signed int in [min, max) -pub fn i64_in_range(min, max i64) i64 { - return default_rng.i64_in_range(min, max) -} - -// int63() - returns a uniformly distributed pseudorandom 63-bit signed positive int -pub fn int63() i64 { - return default_rng.int63() -} - -// f32() - returns a uniformly distributed 32-bit floating point in [0, 1) -pub fn f32() f32 { - return default_rng.f32() -} - -// f64() - returns a uniformly distributed 64-bit floating point in [0, 1) -pub fn f64() f64 { - return default_rng.f64() -} - -// f32n() - returns a uniformly distributed 32-bit floating point in [0, max) -pub fn f32n(max f32) f32 { - return default_rng.f32n(max) -} - -// f64n() - returns a uniformly distributed 64-bit floating point in [0, max) -pub fn f64n(max f64) f64 { - return default_rng.f64n(max) -} - -// f32_in_range(min, max) - returns a uniformly distributed 32-bit floating point in [min, max) -pub fn f32_in_range(min, max f32) f32 { - return default_rng.f32_in_range(min, max) -} - -// f64_in_range(min, max) - returns a uniformly distributed 64-bit floating point in [min, max) -pub fn f64_in_range(min, max f64) f64 { - return default_rng.f64_in_range(min, max) -} - // rand_f32 return a random f32 between 0 and max [deprecated] pub fn rand_f32(max f32) f32 { diff --git a/vlib/rand/random_numbers_test.v b/vlib/rand/random_numbers_test.v index 605b8a0dea..bcebc2b237 100644 --- a/vlib/rand/random_numbers_test.v +++ b/vlib/rand/random_numbers_test.v @@ -54,210 +54,3 @@ fn assert_randoms_equal(r1, r2 []int) { } } -fn test_rand_f32_old() { - for seed in seeds { - rand.seed(seed) - for _ in 0 .. rnd_count { - res := rand.rand_f32(100.0) - assert res >= 0.0 - assert res < 100.0 - } - } -} - -fn test_rand_f32_in_range_old() { - for seed in seeds { - rand.seed(seed) - for _ in 0 .. rnd_count { - res := rand.rand_f32_in_range(1.0, 2048.0) - assert res >= 1.0 - assert res < 2048.0 - } - } -} - -fn test_rand_f64_old() { - for seed in seeds { - rand.seed(seed) - for _ in 0 .. rnd_count { - res := rand.rand_f64(100.0) - assert res >= 0.0 - assert res < 100.0 - } - } -} - -fn test_rand_f64_in_range_old() { - for seed in seeds { - rand.seed(seed) - for _ in 0 .. rnd_count { - res := rand.rand_f64_in_range(1.0, 2048.0) - assert res >= 1.0 - assert res < 2048.0 - } - } -} - -fn test_rand_uniform_f32() { - for seed in seeds { - rand.seed(seed) - for _ in 0 .. rnd_count { - res := rand.rand_uniform_f32() - assert res >= 0.0 - assert res < 1.0 - } - } -} - -fn test_rand_uniform_f64() { - for seed in seeds { - rand.seed(seed) - for _ in 0 .. rnd_count { - res := rand.rand_uniform_f64() - assert res >= 0.0 - assert res < 1.0 - } - } -} - -fn test_rand_u32n() { - max := u32(4287502) - for _ in 0 .. rnd_count { - assert rand.u32n(max) < max - } -} - -fn test_rand_u64n() { - max := u64(23442353534587502) - for _ in 0 .. rnd_count { - assert rand.u64n(max) < max - } -} - -fn test_rand_u32_in_range() { - min := u32(5256) - max := u32(4287502) - for _ in 0 .. rnd_count { - value := rand.u32_in_range(min, max) - assert value >= min - assert value < max - } -} - -fn test_rand_u64_in_range() { - min := u64(4265266246) - max := u64(23442353534587502) - for _ in 0 .. rnd_count { - value := rand.u64_in_range(min, max) - assert value >= min - assert value < max - } -} - -fn test_rand_intn() { - max := 720948723 - for _ in 0 .. rnd_count { - value := rand.intn(max) - assert value >= 0 - assert value < max - } -} - -fn test_rand_i64n() { - max := i64(209487239094) - for _ in 0 .. rnd_count { - value := rand.i64n(max) - assert value >= 0 - assert value < max - } -} - -fn test_rand_int_in_range() { - min := -34058 - max := -10542 - for _ in 0 .. rnd_count { - value := rand.int_in_range(min, max) - assert value >= min - assert value < max - } -} - -fn test_rand_i64_in_range() { - min := i64(-5026245) - max := i64(209487239094) - for _ in 0 .. rnd_count { - value := rand.i64_in_range(min, max) - assert value >= min - assert value < max - } -} - -fn test_rand_int31() { - for _ in 0 .. rnd_count { - value := rand.int31() - assert value >= 0 - assert value <= math.max_i32 - } -} - -fn test_rand_int63() { - for _ in 0 .. rnd_count { - value := rand.int63() - assert value >= 0 - assert value <= math.max_i64 - } -} - -fn test_rand_f32() { - for _ in 0 .. rnd_count { - value := rand.f32() - assert value >= 0.0 - assert value < 1.0 - } -} - -fn test_rand_f64() { - for _ in 0 .. rnd_count { - value := rand.f64() - assert value >= 0.0 - assert value < 1.0 - } -} - -fn test_rand_f32n() { - max := f32(34.52) - for _ in 0 .. rnd_count { - value := rand.f32n(max) - assert value >= 0.0 - assert value < max - } -} - -fn test_rand_f64n() { - max := 3495.2 - for _ in 0 .. rnd_count { - value := rand.f64n(max) - assert value >= 0.0 - assert value < max - } -} - -fn test_rand_f32_in_range() { - min := f32(-10.4) - max := f32(43.2) - for _ in 0 .. rnd_count { - value := rand.f32_in_range(min, max) - assert value >= min - assert value < max - } -} - -fn test_rand_f64_in_range() { - min := -10980.4 - max := -2.0 - for _ in 0 .. rnd_count { - value := rand.f64_in_range(min, max) - assert value >= min - assert value < max - } -} \ No newline at end of file diff --git a/vlib/rand/splitmix64.v b/vlib/rand/splitmix64.v index 5ad00cb577..4012f78dfe 100644 --- a/vlib/rand/splitmix64.v +++ b/vlib/rand/splitmix64.v @@ -135,7 +135,7 @@ pub fn (mut rng SplitMix64RNG) intn(max int) int { eprintln('max has to be positive.') exit(1) } - return int(rng.u32n(max)) + return int(rng.u32n(u32(max))) } // rng.i64n(max) returns a pseudorandom int that lies in [0, max) @@ -145,7 +145,7 @@ pub fn (mut rng SplitMix64RNG) i64n(max i64) i64 { eprintln('max has to be positive.') exit(1) } - return i64(rng.u64n(max)) + return i64(rng.u64n(u64(max))) } // rng.int_in_range(min, max) returns a pseudorandom int that lies in [min, max) diff --git a/vlib/rand/splitmix64_test.v b/vlib/rand/splitmix64_test.v index 0099a1e403..f8da0be13c 100644 --- a/vlib/rand/splitmix64_test.v +++ b/vlib/rand/splitmix64_test.v @@ -63,7 +63,7 @@ fn test_splitmix64_variability() { } } -fn check_uniformity_u64(rng rand.SplitMix64RNG, range u64) { +fn check_uniformity_u64(mut rng rand.SplitMix64RNG, range u64) { range_f64 := f64(range) expected_mean := range_f64 / 2.0 mut variance := 0.0 @@ -84,12 +84,12 @@ fn test_splitmix64_uniformity_u64() { mut rng := rand.SplitMix64RNG{} rng.seed(seed) for range in ranges { - check_uniformity_u64(rng, range) + check_uniformity_u64(mut rng, u64(range)) } } } -fn check_uniformity_f64(rng rand.SplitMix64RNG) { +fn check_uniformity_f64(mut rng rand.SplitMix64RNG) { expected_mean := 0.5 mut variance := 0.0 for _ in 0 .. sample_size { @@ -108,7 +108,7 @@ fn test_splitmix64_uniformity_f64() { for seed in seeds { mut rng := rand.SplitMix64RNG{} rng.seed(seed) - check_uniformity_f64(rng) + check_uniformity_f64(mut rng) } } @@ -118,7 +118,7 @@ fn test_splitmix64_u32n() { mut rng := rand.SplitMix64RNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32n(max) + value := rng.u32n(u32(max)) assert value >= 0 assert value < max } @@ -145,7 +145,7 @@ fn test_splitmix64_u32_in_range() { mut rng := rand.SplitMix64RNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32_in_range(min, max) + value := rng.u32_in_range(u32(min), u32(max)) assert value >= min assert value < max } @@ -200,7 +200,7 @@ fn test_splitmix64_int63() { fn test_splimix64_intn() { max := 2525642 for seed in seeds { - rng := rand.SplitMix64RNG{} + mut rng := rand.SplitMix64RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.intn(max) @@ -213,7 +213,7 @@ fn test_splimix64_intn() { fn test_splimix64_i64n() { max := i64(3246727724653636) for seed in seeds { - rng := rand.SplitMix64RNG{} + mut rng := rand.SplitMix64RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64n(max) @@ -227,7 +227,7 @@ fn test_splimix64_int_in_range() { min := -4252 max := 230549862 for seed in seeds { - rng := rand.SplitMix64RNG{} + mut rng := rand.SplitMix64RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.int_in_range(min, max) @@ -241,7 +241,7 @@ fn test_splimix64_i64_in_range() { min := i64(-24095) max := i64(324058) for seed in seeds { - rng := rand.SplitMix64RNG{} + mut rng := rand.SplitMix64RNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64_in_range(min, max) diff --git a/vlib/rand/system_rng.c.v b/vlib/rand/system_rng.c.v index f957458982..0561b9bb9f 100644 --- a/vlib/rand/system_rng.c.v +++ b/vlib/rand/system_rng.c.v @@ -204,7 +204,7 @@ pub fn (r SysRNG) intn(max int) int { eprintln('max has to be positive.') exit(1) } - return int(r.u32n(max)) + return int(r.u32n(u32(max))) } // r.i64n(max) returns a pseudorandom i64 that lies in [0, max) @@ -214,7 +214,7 @@ pub fn (r SysRNG) i64n(max i64) i64 { eprintln('max has to be positive.') exit(1) } - return i64(r.u64n(max)) + return i64(r.u64n(u64(max))) } // r.int_in_range(min, max) returns a pseudorandom int that lies in [min, max) diff --git a/vlib/rand/system_rng_test.v b/vlib/rand/system_rng_test.v index bc4077fa5d..0309edf066 100644 --- a/vlib/rand/system_rng_test.v +++ b/vlib/rand/system_rng_test.v @@ -28,8 +28,8 @@ fn test_sys_rng_reproducibility() { // seed for another batch of data. for seed in seeds { seed_data := [seed] - r1 := rand.SysRNG{} - r2 := rand.SysRNG{} + mut r1 := rand.SysRNG{} + mut r2 := rand.SysRNG{} r1.seed(seed_data) ints1 := get_n_randoms(value_count, r1) r2.seed(seed_data) @@ -55,7 +55,7 @@ fn test_sys_rng_variability() { // improbable but not impossible. for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) mut values := []u64{cap: value_count} for i in 0 .. value_count { @@ -88,10 +88,10 @@ fn test_sys_rng_uniformity_u64() { ranges := [14019545, 80240, 130] for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for range in ranges { - check_uniformity_u64(rng, range) + check_uniformity_u64(rng, u64(range)) } } } @@ -114,7 +114,7 @@ fn test_sys_rng_uniformity_f64() { // The f64 version for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) check_uniformity_f64(rng) } @@ -124,10 +124,10 @@ fn test_sys_rng_u32n() { max := 16384 for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { - value := rng.u32n(max) + value := rng.u32n(u32(max)) assert value >= 0 assert value < max } @@ -138,7 +138,7 @@ fn test_sys_rng_u64n() { max := u64(379091181005) for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.u64n(max) @@ -153,10 +153,10 @@ fn test_sys_rng_u32_in_range() { min := 316846 for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { - value := rng.u32_in_range(min, max) + value := rng.u32_in_range(u32(min), u32(max)) assert value >= min assert value < max } @@ -168,7 +168,7 @@ fn test_sys_rng_u64_in_range() { min := u64(6848646868) for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.u64_in_range(min, max) @@ -182,7 +182,7 @@ fn test_sys_rng_intn() { max := 2525642 for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.intn(max) @@ -196,7 +196,7 @@ fn test_sys_rng_i64n() { max := i64(3246727724653636) for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.i64n(max) @@ -211,7 +211,7 @@ fn test_sys_rng_int_in_range() { max := 23054962 for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.int_in_range(min, max) @@ -226,7 +226,7 @@ fn test_sys_rng_i64_in_range() { max := i64(324058) for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.i64_in_range(min, max) @@ -241,7 +241,7 @@ fn test_sys_rng_int31() { sign_mask := 0x80000000 for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.int31() @@ -258,7 +258,7 @@ fn test_sys_rng_int63() { sign_mask := i64(0x8000000000000000) for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.int63() @@ -272,7 +272,7 @@ fn test_sys_rng_int63() { fn test_sys_rng_f32() { for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.f32() @@ -285,7 +285,7 @@ fn test_sys_rng_f32() { fn test_sys_rng_f64() { for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.f64() @@ -299,7 +299,7 @@ fn test_sys_rng_f32n() { max := f32(357.0) for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.f32() @@ -313,7 +313,7 @@ fn test_sys_rng_f64n() { max := 1.52e6 for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.f64() @@ -328,7 +328,7 @@ fn test_sys_rng_f32_in_range() { max := f32(125.0) for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.f32() @@ -343,7 +343,7 @@ fn test_sys_rng_f64_in_range() { max := 5015.2 for seed in seeds { seed_data := [seed] - rng := rand.SysRNG{} + mut rng := rand.SysRNG{} rng.seed(seed_data) for _ in 0 .. range_limit { value := rng.f64() diff --git a/vlib/rand/wyrand.v b/vlib/rand/wyrand.v index 3ec2263211..df682a7108 100644 --- a/vlib/rand/wyrand.v +++ b/vlib/rand/wyrand.v @@ -164,7 +164,7 @@ pub fn (mut rng WyRandRNG) intn(max int) int { eprintln('max has to be positive.') exit(1) } - return int(rng.u32n(max)) + return int(rng.u32n(u32(max))) } // rng.i64n(max) returns a pseudorandom int that lies in [0, max) @@ -174,7 +174,7 @@ pub fn (mut rng WyRandRNG) i64n(max i64) i64 { eprintln('max has to be positive.') exit(1) } - return i64(rng.u64n(max)) + return i64(rng.u64n(u64(max))) } // rng.int_in_range(min, max) returns a pseudorandom int that lies in [min, max) diff --git a/vlib/rand/wyrand_test.v b/vlib/rand/wyrand_test.v index 20350023c0..2eaa1d3014 100644 --- a/vlib/rand/wyrand_test.v +++ b/vlib/rand/wyrand_test.v @@ -63,7 +63,7 @@ fn test_wyrand_variability() { } } -fn check_uniformity_u64(rng rand.WyRandRNG, range u64) { +fn check_uniformity_u64(mut rng rand.WyRandRNG, range u64) { range_f64 := f64(range) expected_mean := range_f64 / 2.0 mut variance := 0.0 @@ -84,12 +84,12 @@ fn test_wyrand_uniformity_u64() { mut rng := rand.WyRandRNG{} rng.seed(seed) for range in ranges { - check_uniformity_u64(rng, range) + check_uniformity_u64(mut rng, u64(range)) } } } -fn check_uniformity_f64(rng rand.WyRandRNG) { +fn check_uniformity_f64(mut rng rand.WyRandRNG) { expected_mean := 0.5 mut variance := 0.0 for _ in 0 .. sample_size { @@ -108,7 +108,7 @@ fn test_wyrand_uniformity_f64() { for seed in seeds { mut rng := rand.WyRandRNG{} rng.seed(seed) - check_uniformity_f64(rng) + check_uniformity_f64(mut rng) } } @@ -118,7 +118,7 @@ fn test_wyrand_u32n() { mut rng := rand.WyRandRNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32n(max) + value := rng.u32n(u32(max)) assert value >= 0 assert value < max } @@ -145,7 +145,7 @@ fn test_wyrand_u32_in_range() { mut rng := rand.WyRandRNG{} rng.seed(seed) for _ in 0 .. range_limit { - value := rng.u32_in_range(min, max) + value := rng.u32_in_range(u32(min), u32(max)) assert value >= min assert value < max } @@ -200,7 +200,7 @@ fn test_wyrand_int63() { fn test_wyrand_intn() { max := 2525642 for seed in seeds { - rng := rand.WyRandRNG{} + mut rng := rand.WyRandRNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.intn(max) @@ -213,7 +213,7 @@ fn test_wyrand_intn() { fn test_wyrand_i64n() { max := i64(3246727724653636) for seed in seeds { - rng := rand.WyRandRNG{} + mut rng := rand.WyRandRNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64n(max) @@ -227,7 +227,7 @@ fn test_wyrand_int_in_range() { min := -4252 max := 1034 for seed in seeds { - rng := rand.WyRandRNG{} + mut rng := rand.WyRandRNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.int_in_range(min, max) @@ -241,7 +241,7 @@ fn test_wyrand_i64_in_range() { min := i64(-24095) max := i64(324058) for seed in seeds { - rng := rand.WyRandRNG{} + mut rng := rand.WyRandRNG{} rng.seed(seed) for _ in 0 .. range_limit { value := rng.i64_in_range(min, max)