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));
        }
Esempio n. 2
0
        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);
        }