about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2012-09-06 12:11:48 -0700
committerTim Chevalier <chevalier@alum.wellesley.edu>2012-09-06 12:11:48 -0700
commit55bd6cee2ff9123c68d7361e235ac99927f4b062 (patch)
treed0b9aaff894c445dbba828a668cc92fa7fb8d2d6 /src/libstd
parentb4e547d71aa379e702a737550e479116914b19cf (diff)
Test that merge sort is stable -- thanks to Jesse Jones
Closes #3399
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/sort.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/libstd/sort.rs b/src/libstd/sort.rs
index 4c10e274d49..64ea19d35f9 100644
--- a/src/libstd/sort.rs
+++ b/src/libstd/sort.rs
@@ -307,6 +307,28 @@ mod tests {
         let v2 = merge_sort(le, v1);
         assert v2 == ~[1, 2, 3];
     }
+
+    #[test]
+    fn test_merge_sort_stability()
+    {
+        // tjc: funny that we have to use parens
+        pure fn ile(x: &(&static/str), y: &(&static/str)) -> bool
+        {
+            unchecked            // to_lower is not pure...
+            {
+                let x = x.to_lower();
+                let y = y.to_lower();
+                x <= y
+            }
+        }
+
+        let names1 = ~["joe bob", "Joe Bob", "Jack Brown", "JOE Bob",
+                       "Sally Mae", "JOE BOB", "Alex Andy"];
+        let names2 = ~["Alex Andy", "Jack Brown", "joe bob", "Joe Bob",
+                       "JOE Bob", "JOE BOB", "Sally Mae"];
+        let names3 = merge_sort(ile, names1);
+        assert names3 == names2;
+    }
 }
 
 // Local Variables: