Exemple #1
0
        public void FillRemoveMixTest()
        {
            var queue = new MyPriorityQueue(10);

            queue.Push("Max");
            Assert.Equal(0.1, queue.PercentageFilled);
            queue.Push("Susi");
            Assert.Equal(0.2, queue.PercentageFilled);
            Assert.Equal("Max", queue.Pop());
            Assert.Equal(0.1, queue.PercentageFilled);
            queue.Push("Muster");
            Assert.Equal(0.2, queue.PercentageFilled);
            Assert.Equal("Susi", queue.Pop());
            Assert.Equal("Muster", queue.Pop()); //
            Assert.Equal(0.0, queue.PercentageFilled);
            Assert.Throws <InvalidOperationException>(() => queue.Pop());
            queue.Push("Axl");
            Assert.Equal(0.1, queue.PercentageFilled);
            for (int i = 1; i < queue.Size; i++)
            {
                queue.Push(i.ToString());
            }
            Assert.Throws <InvalidOperationException>(() => queue.Push("Already full not possible"));
            Assert.Equal(1.0, queue.PercentageFilled);
        }
Exemple #2
0
        public void EmptyPopTest()
        {
            var queue = new MyPriorityQueue(2);

            // Can't pop on empty queue
            Assert.Throws <InvalidOperationException>(() => queue.Pop());
            queue.Push("Wolfi");
            Assert.Equal(0.5, queue.PercentageFilled);
            Assert.Equal("Wolfi", queue.Pop());
            Assert.Throws <InvalidOperationException>(() => queue.Pop());
        }
Exemple #3
0
        public void PopTwoValues()
        {
            MyPriorityQueue <int> sut = new MyPriorityQueue <int>();

            sut.Add(8);
            sut.Add(2);
            sut.Pop();
            sut.Pop();

            int actual = sut.Count();

            Assert.AreEqual(0, actual);
        }
        /// <summary>
        /// <para>
        /// Replacement for list.OrderBy(?).Take(n)
        /// </para>
        /// <para>
        /// 1- Low Memory usage (since this method requires only ~"2*n" elements be in memory)
        /// </para>
        /// 2- Speed up by an order of magnitude especially when the input is large.
        /// </summary>
        public static IEnumerable <T> TakeOrdered <T, TKey>(this IEnumerable <T> list, int n, Func <T, TKey> keySelector, bool ascending = true) where TKey : IComparable <TKey>
        {
            var pq = new MyPriorityQueue <T>(n,
                                             ascending
                        ?
                                             (Func <T, T, bool>)((a, b) => keySelector(a).CompareTo(keySelector(b)) >= 0)
                        :
                                             (Func <T, T, bool>)((a, b) => keySelector(a).CompareTo(keySelector(b)) < 0)
                                             );

            Stack <T> stack = new Stack <T>();

            int count = 0;

            foreach (T item in list)
            {
                pq.InsertWithOverflow(item);
                count++;
            }

            int min = Math.Min(count, n);

            for (int i = 0; i < min; i++)
            {
                stack.Push(pq.Pop());
            }

            for (int i = 0; i < min; i++)
            {
                yield return(stack.Pop());
            }
        }
Exemple #5
0
        public void PopOneValue()
        {
            MyPriorityQueue <int> sut = new MyPriorityQueue <int>();

            sut.Add(8);
            sut.Add(2);
            sut.Pop();

            int actual = sut.Peek();

            Assert.AreEqual(8, actual);
        }
Exemple #6
0
        public void AddLoadsOfLettersBigAndSmallAndPop()
        {
            MyPriorityQueue <string> sut = new MyPriorityQueue <string>();

            sut.Add("y");
            sut.Add("Y");
            sut.Add("a");
            sut.Add("A");
            sut.Add("j");
            sut.Add("L");
            sut.Add("R");
            sut.Add("r");
            sut.Add("B");
            sut.Pop();
            sut.Pop();
            sut.Pop();

            string actual = sut.Peek();

            Assert.AreEqual("j", actual);
        }
Exemple #7
0
        public void NormalQueueTest()
        {
            // First fill then remove
            string[] data  = { "Max", "Muster", "Müller", "Susi", "Mosi", "Gucki", "Hucki" };
            var      queue = new MyPriorityQueue(data.Length);

            // Fill it
            foreach (var item in data)
            {
                queue.Push(item);
            }

            // Pop It
            for (int i = 0; i < data.Length; i++)
            {
                Assert.Equal(data[i], queue.Pop());
            }
        }
Exemple #8
0
        public void PriorityPushTests()
        {
            var queue = new MyPriorityQueue(10);

            queue.Push("Susi");
            queue.Push("VIP MAX", PersonTypes.Vip);
            Assert.Equal("VIP MAX", queue.Pop());
            Assert.Equal("Susi", queue.Pop());
            queue.Push("Normal1");
            queue.Push("Normal2");
            queue.Push("VIP1", PersonTypes.Vip);
            queue.Push("VIP2", PersonTypes.Vip);
            queue.Push("Normal3");
            queue.Push("VIP3", PersonTypes.Vip);
            Assert.Equal("VIP1", queue.Pop());
            Assert.Equal("VIP2", queue.Pop());
            Assert.Equal("VIP3", queue.Pop());
            Assert.Equal("Normal1", queue.Pop());
            Assert.Equal("Normal2", queue.Pop());
            Assert.Equal("Normal3", queue.Pop());
        }