1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

rand: simplify rand.PRNG, move to optional types for error handling (#13570)

This commit is contained in:
Subhomoy Haldar
2022-02-23 16:06:14 +05:30
committed by GitHub
parent 5c0b7b0d05
commit 114a341f5f
49 changed files with 609 additions and 1586 deletions

View File

@ -12,7 +12,7 @@ fn get_n_random_ints(seed_data []u32, n int) []int {
mut values := []int{cap: n}
rand.seed(seed_data)
for _ in 0 .. n {
values << rand.intn(n)
values << rand.intn(n) or { panic("Couldn't obtain int") }
}
return values
}
@ -29,7 +29,7 @@ fn test_rand_reproducibility() {
fn test_rand_u32n() {
max := u32(16384)
for _ in 0 .. rnd_count {
value := rand.u32n(max)
value := rand.u32n(max) or { panic("Couldn't obtain u32") }
assert value >= 0
assert value < max
}
@ -38,7 +38,7 @@ fn test_rand_u32n() {
fn test_rand_u64n() {
max := u64(379091181005)
for _ in 0 .. rnd_count {
value := rand.u64n(max)
value := rand.u64n(max) or { panic("Couldn't obtain u64") }
assert value >= 0
assert value < max
}
@ -48,7 +48,7 @@ fn test_rand_u32_in_range() {
max := u32(484468466)
min := u32(316846)
for _ in 0 .. rnd_count {
value := rand.u32_in_range(min, max)
value := rand.u32_in_range(min, max) or { panic("Couldn't obtain u32 in range") }
assert value >= min
assert value < max
}
@ -58,7 +58,7 @@ fn test_rand_u64_in_range() {
max := u64(216468454685163)
min := u64(6848646868)
for _ in 0 .. rnd_count {
value := rand.u64_in_range(min, max)
value := rand.u64_in_range(min, max) or { panic("Couldn't obtain u64 in range") }
assert value >= min
assert value < max
}
@ -67,7 +67,7 @@ fn test_rand_u64_in_range() {
fn test_rand_intn() {
max := 2525642
for _ in 0 .. rnd_count {
value := rand.intn(max)
value := rand.intn(max) or { panic("Couldn't obtain int") }
assert value >= 0
assert value < max
}
@ -76,7 +76,7 @@ fn test_rand_intn() {
fn test_rand_i64n() {
max := i64(3246727724653636)
for _ in 0 .. rnd_count {
value := rand.i64n(max)
value := rand.i64n(max) or { panic("Couldn't obtain i64") }
assert value >= 0
assert value < max
}
@ -86,7 +86,7 @@ fn test_rand_int_in_range() {
min := -4252
max := 23054962
for _ in 0 .. rnd_count {
value := rand.int_in_range(min, max)
value := rand.int_in_range(min, max) or { panic("Couldn't obtain int in range") }
assert value >= min
assert value < max
}
@ -96,7 +96,7 @@ fn test_rand_i64_in_range() {
min := i64(-24095)
max := i64(324058)
for _ in 0 .. rnd_count {
value := rand.i64_in_range(min, max)
value := rand.i64_in_range(min, max) or { panic("Couldn't obtain i64 in range") }
assert value >= min
assert value < max
}
@ -144,7 +144,7 @@ fn test_rand_f64() {
fn test_rand_f32n() {
max := f32(357.0)
for _ in 0 .. rnd_count {
value := rand.f32n(max)
value := rand.f32n(max) or { panic("Couldn't obtain f32") }
assert value >= 0.0
assert value < max
}
@ -153,7 +153,7 @@ fn test_rand_f32n() {
fn test_rand_f64n() {
max := f64(1.52e6)
for _ in 0 .. rnd_count {
value := rand.f64n(max)
value := rand.f64n(max) or { panic("Couldn't obtain f64") }
assert value >= 0.0
assert value < max
}
@ -163,7 +163,7 @@ fn test_rand_f32_in_range() {
min := f32(-24.0)
max := f32(125.0)
for _ in 0 .. rnd_count {
value := rand.f32_in_range(min, max)
value := rand.f32_in_range(min, max) or { panic("Couldn't obtain f32 in range") }
assert value >= min
assert value < max
}
@ -173,7 +173,7 @@ fn test_rand_f64_in_range() {
min := f64(-548.7)
max := f64(5015.2)
for _ in 0 .. rnd_count {
value := rand.f64_in_range(min, max)
value := rand.f64_in_range(min, max) or { panic("Couldn't obtain f64 in range") }
assert value >= min
assert value < max
}
@ -204,7 +204,7 @@ fn test_rand_string_from_set() {
]
for charset in sets {
for _ in 0 .. string_count {
len := rand.intn(rnd_count)
len := rand.intn(rnd_count) or { panic("Couldn't obtain int") }
str := rand.string_from_set(charset, len)
assert str.len == len
for character in str {
@ -275,17 +275,17 @@ fn test_rand_ascii() {
fn ensure_same_output(mut rng rand.PRNG) {
for _ in 0 .. 100 {
assert rand.int() == rng.int()
assert rand.intn(45) == rng.intn(45)
assert rand.intn(45) or { 0 } == rng.intn(45) or { 0 }
assert rand.u64() == rng.u64()
assert rand.f64() == rng.f64()
assert rand.u32n(25) == rng.u32n(25)
assert rand.u32n(25) or { 0 } == rng.u32n(25) or { 0 }
}
}
fn test_new_global_rng() {
old := rand.get_current_rng()
// MuslRNG
// MuslRNG
mut rng1a := musl.MuslRNG{}
mut rng1b := musl.MuslRNG{}
seed1 := [u32(1234)]