Просто для быстрого наблюдения, поскольку я только что попытался выполнить такую рандомизированную сортировку, используя следующий код (чтобы некоторые базовые модульные тесты выполнялись в случайном порядке):
Action<object>[] tests = new Action<object>[] {
delegate { SearchStringByTree(SOURCE, distinctor.Keys, out treeResults, out treeTicks); },
delegate { SearchStringByIndexOf(SOURCE, distinctor.Keys, out indexOfResults, out indexOfTicks); },
delegate { SearchBinaryByTree(Encoding.UTF8.GetBytes(SOURCE), GetBytes(Encoding.UTF8, TERMS), out utf8Results, out utf8Ticks); },
delegate { SearchBinaryByTree(Encoding.UTF8.GetBytes(SOURCE), GetBytes(Encoding.ASCII, TERMS), out asciiResults, out asciiTicks); }
};
Random r = new Random();
Array.Sort(tests, delegate { return r.Next(-1, 2); });
Iслучайным образом получил следующее ArgumentException
:
IComparer (or the IComparable methods it relies upon) did not return zero
when Array.Sort called x. CompareTo(x). x: '' x's type: 'Action`1'
The IComparer: 'System.Array+FunctorComparer`1[System.Action`1[System.Object]]'.
Кажется, что Sort утверждает равенство для элементов, которые, как он знает, совпадают (при условии object.ReferenceEquals
), и, если Comparer не возвращает 0 для этихте, которые он знает, должны быть равны, он делает недействительным весь вид.