public IEnumerator <Contact> GetEnumerator() { while (heap.Count > 0) { yield return(heap.RemoveMin()); } }
static void HeapTest() { MinMaxHeap<int> heapRemoveMin = new MinMaxHeap<int>(); heapRemoveMin.DebugCheckHeapProperty = true; MinMaxHeap<int> heapRemoveMax = new MinMaxHeap<int>(); heapRemoveMax.DebugCheckHeapProperty = true; List<int> doubleCheckMin = new List<int>(); List<int> doubleCheckMax = new List<int>(); Random r = new Random(); // Generate the list of numbers to populate the heaps and to check against if (true) { for (int i = 0; i < 700; i++) { int randInt = r.Next(-10000, 10000); doubleCheckMin.Add(randInt); } } else { // Manually test degenerate cases doubleCheckMin.Add(-55); doubleCheckMin.Add(31); doubleCheckMin.Add(-93); //doubleCheckMin.Add(64); } for (int i = 0; i < doubleCheckMin.Count; i++) { int randInt = doubleCheckMin[i]; // heap.Add("" + i, i); heapRemoveMin.Add(randInt, randInt); heapRemoveMax.Add(randInt, randInt); doubleCheckMax.Add(randInt); } doubleCheckMin.Sort(); // Default. Ascending doubleCheckMax.Sort(delegate (int x, int y) { if (x == y) return 0; if (x > y) return -1; if (x < y) return 1; return 0; }); Console.WriteLine(" -- NOW REMOVE MIN --"); int checkCount = 0; while (heapRemoveMin.Count > 0) { int min = heapRemoveMin.FindMin(); if (doubleCheckMin[checkCount] != min) { throw new Exception("WRONG!"); } heapRemoveMin.RemoveMin(); checkCount++; Console.WriteLine(min); } Console.WriteLine(" -- NOW REMOVE MAX --"); checkCount = 0; while (heapRemoveMax.Count > 0) { //Console.WriteLine("iteration " + checkCount); //Console.WriteLine(heapRemoveMax.PrintTree()); int max = heapRemoveMax.RemoveMax(); if (doubleCheckMax[checkCount] != max) { throw new Exception("WRONG!"); } checkCount++; Console.WriteLine(max); } }