1 #[cfg(all(target_family = "wasm", not(target_os = "wasi")))]
2 use wasm_bindgen_test::wasm_bindgen_test as test;
3 
4 #[cfg(all(target_family = "wasm", not(target_os = "wasi")))]
5 wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
6 
7 #[test]
bool()8 fn bool() {
9     for x in &[false, true] {
10         while fastrand::bool() != *x {}
11     }
12 }
13 
14 #[test]
u8()15 fn 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]
i8()26 fn 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]
u32()37 fn 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]
u64()50 fn 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]
u128()64 fn 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]
fill()79 fn 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]
rng()91 fn 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]
rng_init()104 fn 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]
with_seed()115 fn 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]
choose_multiple()123 fn 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]
choice()136 fn 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