1#[cfg(all(target_family = "wasm", not(target_os = "wasi")))]
2use wasm_bindgen_test::wasm_bindgen_test as test;
3
4#[cfg(all(target_family = "wasm", not(target_os = "wasi")))]
5wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
6
7#[test]
8fn bool() {
9 for x in &[false, true] {
10 while fastrand::bool() != *x {}
11 }
12}
13
14#[test]
15fn u8() {
16 for x in 0..10 {
17 while fastrand::u8(..10) != x {}
18 }
19
20 for x in 200..=u8::MAX {
21 while fastrand::u8(200..) != x {}
22 }
23}
24
25#[test]
26fn i8() {
27 for x in -128..-120 {
28 while fastrand::i8(..-120) != x {}
29 }
30
31 for x in 120..=127 {
32 while fastrand::i8(120..) != x {}
33 }
34}
35
36#[test]
37fn u32() {
38 for n in 1u32..10_000 {
39 let n = n.wrapping_mul(n);
40 let n = n.wrapping_mul(n);
41 if n != 0 {
42 for _ in 0..1000 {
43 assert!(fastrand::u32(..n) < n);
44 }
45 }
46 }
47}
48
49#[test]
50fn u64() {
51 for n in 1u64..10_000 {
52 let n = n.wrapping_mul(n);
53 let n = n.wrapping_mul(n);
54 let n = n.wrapping_mul(n);
55 if n != 0 {
56 for _ in 0..1000 {
57 assert!(fastrand::u64(..n) < n);
58 }
59 }
60 }
61}
62
63#[test]
64fn u128() {
65 for n in 1u128..10_000 {
66 let n = n.wrapping_mul(n);
67 let n = n.wrapping_mul(n);
68 let n = n.wrapping_mul(n);
69 let n = n.wrapping_mul(n);
70 if n != 0 {
71 for _ in 0..1000 {
72 assert!(fastrand::u128(..n) < n);
73 }
74 }
75 }
76}
77
78#[test]
79fn fill() {
80 let mut r = fastrand::Rng::new();
81 let mut a = [0u8; 64];
82 let mut b = [0u8; 64];
83
84 r.fill(&mut a);
85 r.fill(&mut b);
86
87 assert_ne!(a, b);
88}
89
90#[test]
91fn rng() {
92 let mut r = fastrand::Rng::new();
93
94 assert_ne!(r.u64(..), r.u64(..));
95
96 r.seed(7);
97 let a = r.u64(..);
98 r.seed(7);
99 let b = r.u64(..);
100 assert_eq!(a, b);
101}
102
103#[test]
104fn rng_init() {
105 let mut a = fastrand::Rng::new();
106 let mut b = fastrand::Rng::new();
107 assert_ne!(a.u64(..), b.u64(..));
108
109 a.seed(7);
110 b.seed(7);
111 assert_eq!(a.u64(..), b.u64(..));
112}
113
114#[test]
115fn with_seed() {
116 let mut a = fastrand::Rng::with_seed(7);
117 let mut b = fastrand::Rng::new();
118 b.seed(7);
119 assert_eq!(a.u64(..), b.u64(..));
120}
121
122#[test]
123fn choose_multiple() {
124 let mut a = fastrand::Rng::new();
125 let mut elements = (0..20).collect::<Vec<_>>();
126
127 while !elements.is_empty() {
128 let chosen = a.choose_multiple(0..20, 5);
129 for &x in &chosen {
130 elements.retain(|&y| y != x);
131 }
132 }
133}
134
135#[test]
136fn choice() {
137 let items = [1, 4, 9, 5, 2, 3, 6, 7, 8, 0];
138 let mut r = fastrand::Rng::new();
139
140 for item in &items {
141 while r.choice(&items).unwrap() != item {}
142 }
143}
144