public static void HeapSortUsingGet <T>( [ValueSource("CollectionsSource")] IEnumerable <T> collection, [Values] bool ascending) { var ordered = ascending ? collection.OrderBy(x => x) : collection.OrderByDescending(x => x); var mmh = new MinMaxHeap <T>(collection); var extracted = new List <T>(); while (mmh.Count > 0) { T value; if (ascending) { value = mmh.GetMin(); _ = mmh.ExtractMin(); } else { value = mmh.GetMax(); _ = mmh.ExtractMax(); } extracted.Add(value); } Assert.IsTrue(ordered.SequenceEqual(extracted)); }
public static void ExtractMinTest <T>(IEnumerable <T> collection) { var ordered = collection.OrderBy(x => x); var mmh = new MinMaxHeap <T>(collection); var emptyHeap = new MinMaxHeap <T>(); var first = mmh.ExtractMin(); var second = mmh.GetMin(); Assert.Throws <InvalidOperationException>(() => emptyHeap.ExtractMin()); Assert.AreEqual(ordered.ElementAt(0), first); Assert.AreEqual(ordered.ElementAt(1), second); Assert.AreEqual(collection.Count() - 1, mmh.Count); }