[corlib] Allow to use custom comparer when sorting null values.
authorMarek Safar <marek.safar@gmail.com>
Mon, 3 Feb 2014 19:27:58 +0000 (20:27 +0100)
committerMarek Safar <marek.safar@gmail.com>
Mon, 3 Feb 2014 19:27:58 +0000 (20:27 +0100)
mcs/class/corlib/System/Array.cs
mcs/class/corlib/Test/System/ArrayTest.cs

index e1fc50b210b71547122b564414df395a63c66f27..bc22c019faa2219f4c357766d8f2ebecc9a10f28 100644 (file)
@@ -2557,11 +2557,7 @@ namespace System
                                        // switch to insertion sort
                                        for (i = low + 1; i <= high; i++) {
                                                for (k = i; k > low; k--) {
-                                                       // if keys[k] >= keys[k-1], break
-                                                       if (array[k-1] == null)
-                                                               break;
-                                                       
-                                                       if (array[k] != null && compare (array[k], array[k-1]) >= 0)
+                                                       if (compare (array[k], array[k-1]) >= 0)
                                                                break;
                                                        
                                                        swap<T> (array, k - 1, k);
index 71a21049911737b672aaa0b19f870bd3b902d8bf..eab4c40e1434ad47d8c4fb335497cb760a647a24 100644 (file)
@@ -2510,6 +2510,27 @@ public class ArrayTest
                }
        }
 
+       [Test]
+       public void Sort_NullValues ()
+       {
+               var s = new [] { "a", null, "b", null };
+               Array.Sort (s, (a, b) => {
+                       if (a == null) {
+                               return b == null ? 0 : 1;
+                       }
+
+                       if (b == null)
+                               return -1;
+
+                       return a.CompareTo (b);
+               });
+
+               Assert.AreEqual ("a", s [0], "#1");
+               Assert.AreEqual ("b", s [1], "#2");
+               Assert.IsNull (s [2], "#3");
+               Assert.IsNull (s [3], "#4");
+       }
+
        [Test] // #616416
        public void SortNonGenericDoubleItems () {
             double[] doubleValues = new double[11];