Skip to content

Commit 0e2d3d4

Browse files
author
Stjepan Glavina
committedMar 31, 2017
Test sort algorithms using a random cmp function
1 parent c6df67a commit 0e2d3d4

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed
 

‎src/libcollectionstest/slice.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -383,9 +383,11 @@ fn test_reverse() {
383383

384384
#[test]
385385
fn test_sort() {
386+
let mut rng = thread_rng();
387+
386388
for len in (2..25).chain(500..510) {
387389
for _ in 0..100 {
388-
let mut v: Vec<_> = thread_rng().gen_iter::<i32>().take(len).collect();
390+
let mut v: Vec<_> = rng.gen_iter::<i32>().take(len).collect();
389391
let mut v1 = v.clone();
390392

391393
v.sort();
@@ -399,6 +401,18 @@ fn test_sort() {
399401
}
400402
}
401403

404+
// Sort using a completely random comparison function.
405+
// This will reorder the elements *somehow*, but won't panic.
406+
let mut v = [0; 500];
407+
for i in 0..v.len() {
408+
v[i] = i as i32;
409+
}
410+
v.sort_by(|_, _| *rng.choose(&[Less, Equal, Greater]).unwrap());
411+
v.sort();
412+
for i in 0..v.len() {
413+
assert_eq!(v[i], i as i32);
414+
}
415+
402416
// Should not panic.
403417
[0i32; 0].sort();
404418
[(); 10].sort();

‎src/libcoretest/slice.rs

+12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
use core::cmp::Ordering::{Equal, Greater, Less};
1112
use core::slice::heapsort;
1213
use core::result::Result::{Ok, Err};
1314
use rand::{Rng, XorShiftRng};
@@ -268,6 +269,17 @@ fn sort_unstable() {
268269
}
269270
}
270271

272+
// Sort using a completely random comparison function.
273+
// This will reorder the elements *somehow*, but won't panic.
274+
for i in 0..v.len() {
275+
v[i] = i as i32;
276+
}
277+
v.sort_unstable_by(|_, _| *rng.choose(&[Less, Equal, Greater]).unwrap());
278+
v.sort_unstable();
279+
for i in 0..v.len() {
280+
assert_eq!(v[i], i as i32);
281+
}
282+
271283
// Should not panic.
272284
[0i32; 0].sort_unstable();
273285
[(); 10].sort_unstable();

0 commit comments

Comments
 (0)
Please sign in to comment.