-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
/
Copy pathsort_utils.rs
63 lines (52 loc) · 1.38 KB
/
sort_utils.rs
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
55
56
57
58
59
60
61
62
63
use rand::Rng;
use std::time::Instant;
#[cfg(test)]
pub fn generate_random_vec(n: u32, range_l: i32, range_r: i32) -> Vec<i32> {
let mut arr = Vec::<i32>::with_capacity(n as usize);
let mut rng = rand::rng();
let mut count = n;
while count > 0 {
arr.push(rng.random_range(range_l..=range_r));
count -= 1;
}
arr
}
#[cfg(test)]
pub fn generate_nearly_ordered_vec(n: u32, swap_times: u32) -> Vec<i32> {
let mut arr: Vec<i32> = (0..n as i32).collect();
let mut rng = rand::rng();
let mut count = swap_times;
while count > 0 {
arr.swap(
rng.random_range(0..n as usize),
rng.random_range(0..n as usize),
);
count -= 1;
}
arr
}
#[cfg(test)]
pub fn generate_ordered_vec(n: u32) -> Vec<i32> {
generate_nearly_ordered_vec(n, 0)
}
#[cfg(test)]
pub fn generate_reverse_ordered_vec(n: u32) -> Vec<i32> {
let mut arr = generate_ordered_vec(n);
arr.reverse();
arr
}
#[cfg(test)]
pub fn generate_repeated_elements_vec(n: u32, unique_elements: u8) -> Vec<i32> {
let mut rng = rand::rng();
let v = rng.random_range(0..n as i32);
generate_random_vec(n, v, v + unique_elements as i32)
}
#[cfg(test)]
pub fn log_timed<F>(test_name: &str, f: F)
where
F: FnOnce(),
{
let before = Instant::now();
f();
println!("Elapsed time of {:?} is {:?}", test_name, before.elapsed());
}