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 GetMinTest <T>(IEnumerable <T> collection)
        {
            var emptyHeap = new MinMaxHeap <int>();
            var mmh       = new MinMaxHeap <T>(collection);

            var minValue = mmh.GetMin();

            Assert.Throws <InvalidOperationException>(() => emptyHeap.GetMin());
            Assert.AreEqual(collection.Min(), minValue);
        }
Esempio n. 3
0
        public static void ExtractMinTest <T>(IEnumerable <T> collection)
        {
            var ordered   = collection.OrderBy(x => x);
            var mmh       = new MinMaxHeap <T>(collection);
            var emptyHeap = new MinMaxHeap <T>();

            var first  = mmh.ExtractMin();
            var second = mmh.GetMin();

            Assert.Throws <InvalidOperationException>(() => emptyHeap.ExtractMin());
            Assert.AreEqual(ordered.ElementAt(0), first);
            Assert.AreEqual(ordered.ElementAt(1), second);
            Assert.AreEqual(collection.Count() - 1, mmh.Count);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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());
        }