]> git.lizzy.rs Git - rust.git/commitdiff
Code shuffle resiliently
authorAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 30 Jul 2020 13:40:15 +0000 (15:40 +0200)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 30 Jul 2020 13:48:35 +0000 (15:48 +0200)
crates/rust-analyzer/src/cli/analysis_stats.rs

index 187a0ebe6323f9692ba286e61938696dd64ee7c5..a270eb481c0eedef2bd2593553e5e5b15600dd28 100644 (file)
@@ -309,8 +309,13 @@ pub fn analysis_stats(
 }
 
 fn shuffle<T>(rng: &mut Rand32, slice: &mut [T]) {
-    for i in (1..slice.len()).rev() {
-        let idx = rng.rand_range(0..i as u32) as usize;
-        slice.swap(idx, i)
+    for i in 0..slice.len() {
+        randomize_first(rng, &mut slice[i..]);
+    }
+
+    fn randomize_first<T>(rng: &mut Rand32, slice: &mut [T]) {
+        assert!(!slice.is_empty());
+        let idx = rng.rand_range(0..slice.len() as u32) as usize;
+        slice.swap(0, idx);
     }
 }