about summary refs log tree commit diff
path: root/src/libcoretest
diff options
context:
space:
mode:
authorStjepan Glavina <stjepang@gmail.com>2017-03-17 15:05:44 +0100
committerStjepan Glavina <stjepang@gmail.com>2017-03-21 20:46:20 +0100
commitf1913e2a305f2ad9a655cb0a08cbce886e37ac27 (patch)
tree3ff054772465aa3189eb4822d876408c2107c62c /src/libcoretest
parent58c701f5c7dc26d9b55c631006ece52abe1ddce2 (diff)
downloadrust-f1913e2a305f2ad9a655cb0a08cbce886e37ac27.tar.gz
rust-f1913e2a305f2ad9a655cb0a08cbce886e37ac27.zip
Implement feature sort_unstable
Diffstat (limited to 'src/libcoretest')
-rw-r--r--src/libcoretest/lib.rs6
-rw-r--r--src/libcoretest/slice.rs41
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]);
+}