v / vlib / rand / random_bytes_test.v
103 lines · 99 sloc · 2.17 KB · 2332ecff4811b8c97dfda8e825170e9397962519
Raw
1import rand
2
3fn test_rand_bytes() {
4 mut randoms := []string{}
5 for i in 0 .. 100 {
6 x := rand.bytes(i)!.hex()
7 if x.len > 0 {
8 randoms << x
9 }
10 assert x.len == i * 2
11 }
12 mut differences := 0
13 for idx in 1 .. randoms.len {
14 start := randoms[idx]#[0..8]
15 prev_start := randoms[idx - 1]#[0..8]
16 if start != prev_start {
17 differences++
18 }
19 }
20 assert differences > 95 // normally around 98
21 dump(differences)
22}
23
24fn test_prng_rand_bytes() {
25 mut randoms := []string{}
26 mut rng := rand.get_current_rng()
27 for i in 0 .. 100 {
28 x := rng.bytes(i)!.hex()
29 if x.len > 0 {
30 randoms << x
31 }
32 assert x.len == i * 2
33 }
34 mut differences := 0
35 for idx in 1 .. randoms.len {
36 start := randoms[idx]#[0..8]
37 prev_start := randoms[idx - 1]#[0..8]
38 if start != prev_start {
39 differences++
40 }
41 }
42 assert differences > 95 // normally around 98
43 dump(differences)
44}
45
46fn test_rand_read() {
47 max := 50
48 mut a := []u8{len: max}
49 mut differences := 0
50 for j in 1 .. max {
51 start := '00'.repeat(j)
52 for k in j + 1 .. max {
53 end := '00'.repeat(max - k)
54 middle := '00'.repeat(k - j)
55 // eprintln('> j: ${j} | k: ${k} | start: ${start} | middle: ${middle} | end: ${end}')
56 for i in 0 .. max {
57 a[i] = 0
58 }
59 assert a[j..k].hex() == middle
60 for i in 0 .. 10 {
61 rand.read(mut a[j..k])
62 // dump(a.hex())
63 assert a[0..j].hex() == start
64 assert a[k..].hex() == end
65 if a[j..k].hex() != middle {
66 differences++
67 }
68 }
69 }
70 }
71 dump(differences)
72 assert differences > 11700 // normally around 11758
73}
74
75fn test_prng_rand_read() {
76 max := 50
77 mut a := []u8{len: max}
78 mut differences := 0
79 mut rng := rand.get_current_rng()
80 for j in 1 .. max {
81 start := '00'.repeat(j)
82 for k in j + 1 .. max {
83 end := '00'.repeat(max - k)
84 middle := '00'.repeat(k - j)
85 // eprintln('> j: ${j} | k: ${k} | start: ${start} | middle: ${middle} | end: ${end}')
86 for i in 0 .. max {
87 a[i] = 0
88 }
89 assert a[j..k].hex() == middle
90 for i in 0 .. 10 {
91 rng.read(mut a[j..k])
92 // dump(a.hex())
93 assert a[0..j].hex() == start
94 assert a[k..].hex() == end
95 if a[j..k].hex() != middle {
96 differences++
97 }
98 }
99 }
100 }
101 dump(differences)
102 assert differences > 11700 // normally around 11758
103}
104