1pub 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}