/// <summary>
        /// Does a generic heap test.
        /// </summary>
        /// <param name="heap">Heap to be checked.</param>
        /// <param name="input">Input values.</param>
        private static void HeapTest <Value>(IHeap <Value, Value> heap, List <Value> input) where Value : IComparable
        {
            List <Value> sortedInput = new List <Value>(input);

            sortedInput.Sort();

            input.ForEach(number => heap.Add(number, number));
            Assert.AreEqual(input.Count, heap.GetSize());

            Assert.AreEqual(sortedInput[0], heap.GetMinKey());

            heap.Clear();
            Assert.AreEqual(0, heap.GetSize());

            input.ForEach(number => heap.Add(number, number));
            List <Value> result = new List <Value>();

            while (heap.GetSize() != 0)
            {
                result.Add(heap.RemoveMin());
            }

            Assert.IsTrue(CollectionsEquality.Equals(sortedInput, result));
        }