public void MinHeapInitialises() { int testOrder = 2; var minDHeap = new MinDHeap <int>(testOrder); Assert.IsNotNull(minDHeap); }
internal static IEnumerable <T> MergeBy <T, TKey>(IEnumerable <IEnumerable <T> > lists, Func <T, TKey> keySelector, IComparer <TKey> comparer, bool descending) { var initialItems = lists .Select(l => l.GetEnumerator()) .Where(i => i.MoveNext()); IComparer <T> keyComparer = comparer != null ? new KeySelectorComparer <T, TKey>(keySelector, comparer) : new KeySelectorComparer <T, TKey>(keySelector); var enumerableComparer = new EnumeratorComparer <T>(keyComparer); DHeap <IEnumerator <T> > heap; if (descending) { heap = new MaxDHeap <IEnumerator <T> >(2, initialItems, enumerableComparer); } else { heap = new MinDHeap <IEnumerator <T> >(2, initialItems, enumerableComparer); } while (!heap.IsEmpty) { var i = heap.RemoveRoot(); yield return(i.Current); if (i.MoveNext()) { heap.Insert(i); } } }
public void MinHeapInitialisesAndInsertsSpecifiedCollection() { int testOrder = 2; IList <int> testCollection = new List <int> { 50, 51, 38, 37, 23, 11, 5, 3 }; var minDHeap = new MinDHeap <int>(testOrder, testCollection.Randomize()); Assert.AreEqual(testCollection.Count, minDHeap.Count); }
public void MinHeapRemoveRootReturnsSmallestValue() { int testOrder = 2; IList <int> testCollection = new List <int> { 50, 51, 38, 37, 23, 11, 5, 3 }; var minDHeap = new MinDHeap <int>(testOrder, testCollection.Randomize()); int root = minDHeap.RemoveRoot(); Assert.AreEqual(3, root); }
public void MinHeapMovesNextSmallestValueToRootAfterRemoveRoot() { int testOrder = 2; IList <int> testCollection = new List <int> { 50, 51, 38, 37, 23, 11, 5, 3 }; var minDHeap = new MinDHeap <int>(testOrder, testCollection.Randomize()); minDHeap.RemoveRoot(); int newRoot = minDHeap.Peek(); Assert.AreEqual(5, newRoot); }
public void MinHeapDoesNotInsertItemAsRootIfItemIsLargerThanOriginalRoot() { int testOrder = 2; IList <int> testCollection = new List <int> { 50, 51, 38, 37, 23, 11, 5, 3 }; var minDHeap = new MinDHeap <int>(testOrder, testCollection.Randomize()); int originalRoot = minDHeap.Peek(); minDHeap.Insert(4); int newRoot = minDHeap.Peek(); Assert.AreEqual(3, originalRoot); Assert.AreEqual(3, newRoot); }
public void MinHeapSupportsConsumingEnumerable() { int testOrder = 2; IList <int> testCollection = new List <int> { 50, 51, 38, 37, 23, 11, 5, 3 }; var minDHeap = new MinDHeap <int>(testOrder, testCollection.Randomize()); var consumingEnumerator = minDHeap.GetConsumingEnumerable().GetEnumerator(); Assert.DoesNotThrow(() => { while (consumingEnumerator.MoveNext()) { //ignore empty block } }); }
public void MinHeapConsumingEnumerableRemovesAllElements() { const int expectedCount = 0; int testOrder = 2; IList <int> testCollection = new List <int> { 50, 51, 38, 37, 23, 11, 5, 3 }; var minDHeap = new MinDHeap <int>(testOrder, testCollection.Randomize()); var consumingEnumerator = minDHeap.GetConsumingEnumerable().GetEnumerator(); while (consumingEnumerator.MoveNext()) { //ignore empty block } Assert.AreEqual(expectedCount, minDHeap.Count); }
public void MinHeapInsertsItemInCollectionAsRootIfItemIsSmallerThanOriginalRoot() { int testOrder = 2; IList <int> testCollection = new List <int> { 50, 51, 38, 37, 23, 11, 5, 3 }; IList <int> newCollection = new List <int> { 2, 4, 6, 8, 10, 12, 14, 16, 18 }; var minDHeap = new MinDHeap <int>(testOrder, testCollection.Randomize()); int originalRoot = minDHeap.Peek(); minDHeap.InsertRange(newCollection.Randomize()); int newRoot = minDHeap.Peek(); Assert.AreEqual(3, originalRoot); Assert.AreEqual(2, newRoot); }