File tree Expand file tree Collapse file tree 2 files changed +27
-1
lines changed Expand file tree Collapse file tree 2 files changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -383,9 +383,11 @@ fn test_reverse() {
383383
384384#[ test]
385385fn 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 ( ) ;
Original file line number Diff line number Diff line change 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 } ;
1112use core:: slice:: heapsort;
1213use core:: result:: Result :: { Ok , Err } ;
1314use 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 ( ) ;
You can’t perform that action at this time.
0 commit comments