bloomfilter_rs/
random_sequence.rs1use rand::Rng;
2use std::ops::Range;
3pub fn random_elem_from_range<T>(range: Range<T>) -> T
10where
11 T: std::cmp::PartialOrd + rand::distributions::uniform::SampleUniform + Copy,
12{
13 let first_element_in_range = range.start;
14 if !range.is_empty() {
15 rand::thread_rng().gen_range::<T, Range<T>>(range)
16 } else {
17 first_element_in_range
18 }
19}
20
21pub fn random_sequence_from_range<T>(range: Range<T>, sequence_length: usize) -> Vec<T>
28where
29 T: std::cmp::PartialOrd + rand::distributions::uniform::SampleUniform + Copy,
30{
31 (0..sequence_length)
32 .map(|_| random_elem_from_range(range.clone()))
33 .collect()
34}
35
36#[cfg(test)]
37mod tests {
38 mod get_elem_from_range {
39 use super::super::random_elem_from_range;
40 #[test]
41 fn sample_int_range() {
42 random_elem_from_range(0..10);
43 }
44 #[test]
45 fn sample_float_range() {
46 random_elem_from_range(0.0..1.0);
47 }
48 #[test]
49 fn sample_empty_range() {
50 assert_eq!(random_elem_from_range(0..0), 0);
51 }
52 }
53 mod random_sequence_from_range {
54 use super::super::random_sequence_from_range;
55 #[test]
56 fn get_range_with_ten_elements() {
57 let sampled_range: Vec<i32> = random_sequence_from_range(0..0, 10);
58 assert_eq!(sampled_range.len(), 10);
59 }
60 }
61}