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 GetMaxTest <T>(IEnumerable <T> collection) { var emptyHeap = new MinMaxHeap <int>(); var mmh = new MinMaxHeap <T>(collection); var maxValue = mmh.GetMax(); Assert.Throws <InvalidOperationException>(() => emptyHeap.GetMax()); Assert.AreEqual(collection.Max(), maxValue); }
public static void ExtractMaxTest <T>(IEnumerable <T> collection) { var ordered = collection.OrderByDescending(x => x); var mmh = new MinMaxHeap <T>(collection); var emptyHeap = new MinMaxHeap <T>(); var first = mmh.ExtractMax(); var second = mmh.GetMax(); Assert.Throws <InvalidOperationException>(() => emptyHeap.ExtractMax()); Assert.AreEqual(ordered.ElementAt(0), first); Assert.AreEqual(ordered.ElementAt(1), second); Assert.AreEqual(collection.Count() - 1, mmh.Count); }
public static void AddTest <T>(IEnumerable <T> collection) { var mmh = new MinMaxHeap <T>(); foreach (var item in collection) { mmh.Add(item); } var minValue = mmh.GetMin(); var maxValue = mmh.GetMax(); Assert.AreEqual(collection.Min(), minValue); Assert.AreEqual(collection.Max(), maxValue); Assert.AreEqual(collection.Count(), mmh.Count); }
public static void CustomComparerTest() { var arr = new [] { "aaaa", "c", "dd", "bbb" }; var comparer = Comparer <string> .Create((a, b) => Comparer <int> .Default.Compare(a.Length, b.Length)); var mmh = new MinMaxHeap <string>(comparer: comparer); foreach (var s in arr) { mmh.Add(s); } Assert.AreEqual(comparer, mmh.Comparer); Assert.AreEqual("c", mmh.GetMin()); Assert.AreEqual("aaaa", mmh.GetMax()); }