diff options
| author | Stjepan Glavina <stjepang@gmail.com> | 2017-03-17 15:05:44 +0100 |
|---|---|---|
| committer | Stjepan Glavina <stjepang@gmail.com> | 2017-03-21 20:46:20 +0100 |
| commit | f1913e2a305f2ad9a655cb0a08cbce886e37ac27 (patch) | |
| tree | 3ff054772465aa3189eb4822d876408c2107c62c /src/libcoretest | |
| parent | 58c701f5c7dc26d9b55c631006ece52abe1ddce2 (diff) | |
| download | rust-f1913e2a305f2ad9a655cb0a08cbce886e37ac27.tar.gz rust-f1913e2a305f2ad9a655cb0a08cbce886e37ac27.zip | |
Implement feature sort_unstable
Diffstat (limited to 'src/libcoretest')
| -rw-r--r-- | src/libcoretest/lib.rs | 6 | ||||
| -rw-r--r-- | src/libcoretest/slice.rs | 41 |
2 files changed, 43 insertions, 4 deletions
diff --git a/src/libcoretest/lib.rs b/src/libcoretest/lib.rs index d84a1e22756..e8dbbd55df2 100644 --- a/src/libcoretest/lib.rs +++ b/src/libcoretest/lib.rs @@ -19,18 +19,22 @@ #![feature(decode_utf8)] #![feature(fixed_size_array)] #![feature(flt2dec)] +#![feature(fmt_internals)] #![feature(libc)] +#![feature(move_cell)] #![feature(nonzero)] +#![feature(ordering_chaining)] +#![feature(ptr_unaligned)] #![feature(rand)] #![feature(raw)] #![feature(sip_hash_13)] #![feature(slice_patterns)] +#![feature(sort_unstable)] #![feature(step_by)] #![feature(test)] #![feature(try_from)] #![feature(unicode)] #![feature(unique)] -#![feature(fmt_internals)] extern crate core; extern crate test; diff --git a/src/libcoretest/slice.rs b/src/libcoretest/slice.rs index ad39e6b081b..b51bae4db22 100644 --- a/src/libcoretest/slice.rs +++ b/src/libcoretest/slice.rs @@ -9,6 +9,7 @@ // except according to those terms. use core::result::Result::{Ok, Err}; +use rand::{Rng, XorShiftRng}; #[test] fn test_binary_search() { @@ -139,9 +140,6 @@ fn test_chunks_mut_last() { assert_eq!(c2.last().unwrap()[0], 4); } - - - #[test] fn test_windows_count() { let v: &[i32] = &[0, 1, 2, 3, 4, 5]; @@ -224,3 +222,40 @@ fn get_unchecked_mut_range() { assert_eq!(v.get_unchecked_mut(1..4), &mut [1, 2, 3][..]); } } + +#[test] +fn sort_unstable() { + let mut v = [0; 600]; + let mut v1 = [0; 600]; + let mut rng = XorShiftRng::new_unseeded(); + + for len in (2..25).chain(500..510) { + for &modulus in &[10, 1000] { + for _ in 0..100 { + for i in 0..len { + let num = rng.gen::<i32>() % modulus; + v[i] = num; + v1[i] = num; + } + + v.sort_unstable(); + assert!(v.windows(2).all(|w| w[0] <= w[1])); + + v1.sort_unstable_by(|a, b| a.cmp(b)); + assert!(v1.windows(2).all(|w| w[0] <= w[1])); + + v1.sort_unstable_by(|a, b| b.cmp(a)); + assert!(v1.windows(2).all(|w| w[0] >= w[1])); + } + } + } + + // Should not panic. + [0i32; 0].sort_unstable(); + [(); 10].sort_unstable(); + [(); 100].sort_unstable(); + + let mut v = [0xDEADBEEFu64]; + v.sort_unstable(); + assert!(v == [0xDEADBEEF]); +} |
