From b90fc130ffc6bae78d55213879f855d7d5396624 Mon Sep 17 00:00:00 2001 From: Marek Safar Date: Mon, 3 Feb 2014 20:27:58 +0100 Subject: [PATCH] [corlib] Allow to use custom comparer when sorting null values. --- mcs/class/corlib/System/Array.cs | 6 +----- mcs/class/corlib/Test/System/ArrayTest.cs | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/mcs/class/corlib/System/Array.cs b/mcs/class/corlib/System/Array.cs index e1fc50b210b..bc22c019faa 100644 --- a/mcs/class/corlib/System/Array.cs +++ b/mcs/class/corlib/System/Array.cs @@ -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 (array, k - 1, k); diff --git a/mcs/class/corlib/Test/System/ArrayTest.cs b/mcs/class/corlib/Test/System/ArrayTest.cs index 71a21049911..eab4c40e143 100644 --- a/mcs/class/corlib/Test/System/ArrayTest.cs +++ b/mcs/class/corlib/Test/System/ArrayTest.cs @@ -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]; -- 2.25.1