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![
26 std::iter::repeat_with(|| rng.gen::<u64>())
27 .take(m)
28 .collect::<Vec<_>>();
29 n
30 ];
31
32 for _ in 0..1000 {
33 let i1 = rng.gen_range(0..n);
34 let i2 = rng.gen_range(0..n);
35 let j1 = rng.gen_range(0..m);
36 let j2 = rng.gen_range(0..m);
37
38 swap_vv(&mut a, i1, j1, i2, j2);
39 }
40 }
41}