1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use rand::rngs::SmallRng;
use rand::{thread_rng, Rng, SeedableRng};
use rand_distr::StandardNormal;
pub fn increase_capacity<T>(size: usize, container: &mut Vec<T>) {
if container.capacity() < size {
let diff = size - container.capacity();
container.reserve(diff)
}
}
pub fn create_rng(seed: u64) -> SmallRng {
if seed == 0 {
match SmallRng::from_rng(thread_rng()) {
Ok(rng) => rng,
Err(_) => SmallRng::from_entropy(),
}
} else {
SmallRng::seed_from_u64(seed)
}
}
pub fn rand_unit_vec<RNG: Rng>(size: usize, rng: RNG) -> Vec<f32> {
rng.sample_iter(StandardNormal).take(size).collect()
}
pub fn all_eq<T>(u: &[T], v: &[T]) -> bool
where
T: PartialEq,
{
if u.len() != v.len() {
return false;
}
for (u_, v_) in u.iter().zip(v) {
if u_ != v_ {
return false;
}
}
true
}
#[cfg(test)]
mod test {
use super::*;
use rand::SeedableRng;
#[test]
fn test_all_eq() {
assert!(all_eq(&[1, 2], &[1, 2]));
assert!(all_eq(&[1., 2.], &[1., 2.]));
assert!(!all_eq(&[1.1, -1.], &[1., 2.]));
}
}