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
use std::char;
use rand::{thread_rng, Rng, Rand};
use rand::distributions::range::SampleRange;

#[inline]
pub fn gen_range<T: PartialOrd + SampleRange>(start: T, end: T) -> T {
    thread_rng().gen_range(start, end)
}

#[inline]
pub fn random<T: Rand>() -> T {
    thread_rng().gen()
}

#[inline]
pub fn shuffle<T: Clone>(arr: &[T]) -> Vec<T> {
    let mut v = arr.to_vec();
    thread_rng().shuffle(&mut v);
    v
}

#[inline]
pub fn ascii_string(length: usize) -> String {
    thread_rng().gen_ascii_chars().take(length).collect()
}

#[inline]
pub fn gen_vec<T: Rand>(length: usize) -> Vec<T> {
    thread_rng().gen_iter::<T>().take(length).collect::<Vec<T>>()
}

#[inline]
pub fn numerify_sym(string: &str) -> String {
    string.chars()
        .map(|x| match x {
            'N' => char::from_digit(gen_range(1, 10), 10).unwrap(),
            '#' => char::from_digit(gen_range(0, 10), 10).unwrap(),
            other => other,
        })
        .collect()
}

#[inline]
pub fn take_one<'a>(list: &[&'a str]) -> &'a str {
    thread_rng().choose(list).expect("take_one got empty list")
}