haar_lib/misc/
swap.rs

1//! 二次元`Vec`の要素swap
2
3/// `a[i1][j1]`と`a[i2][j2]`を交換する。
4pub fn swap_vv<T>(a: &mut [Vec<T>], i1: usize, j1: usize, i2: usize, j2: usize) {
5    let p1: *mut T = &mut a[i1][j1];
6    let p2: *mut T = &mut a[i2][j2];
7
8    unsafe {
9        p1.swap(p2);
10    }
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16    use rand::Rng;
17
18    #[test]
19    fn test() {
20        let mut rng = rand::thread_rng();
21
22        let n = rng.gen_range(10..100);
23        let m = rng.gen_range(10..100);
24
25        let mut a = vec![(0..m).map(|_| rng.gen::<u64>()).collect::<Vec<_>>(); n];
26
27        for _ in 0..1000 {
28            let i1 = rng.gen_range(0..n);
29            let i2 = rng.gen_range(0..n);
30            let j1 = rng.gen_range(0..m);
31            let j2 = rng.gen_range(0..m);
32
33            swap_vv(&mut a, i1, j1, i2, j2);
34        }
35    }
36}