예제 #1
0
        public void MaxPriorityQueueTest()
        {
            int[] xs    = { 3, 2, 1, 6, 5, 9, 4 };
            var   queue = new MaxPriorityQueue <int>(xs.Length);

            for (int i = 0; i < xs.Length; i++)
            {
                queue.Insert(xs[i]);
            }
            Quick <int> .SimpleSort(xs);

            for (int i = xs.Length - 1; i > 0; i--)
            {
                int v = queue.DelMax();
                Assert.Equal(v, xs[i]);
            }
        }
예제 #2
0
        public void MaxPriorityQueueTest_InitWithKey()
        {
            int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            Shuffle.Do(a);

            MaxPriorityQueue <int> pq = new MaxPriorityQueue <int>(a);

            Assert.IsFalse(pq.IsEmpty());
            Assert.AreEqual(10, pq.Size());

            for (int i = 0; i < 10; i++)
            {
                int result = pq.Max();
                Assert.AreEqual(10 - i - 1, result);
                result = pq.DelMax();
                Assert.AreEqual(10 - i - 1, result);
            }
            Assert.IsTrue(pq.IsEmpty());
            Assert.AreEqual(0, pq.Size());
        }
예제 #3
0
        public void MaxPriorityQueueTest_Comparer()
        {
            Point[] points = new Point[10];
            for (int i = 0; i < 10; i++)
            {
                points[i] = new Point(i, 10 - i);
            }
            Shuffle.Do(points);

            MaxPriorityQueue <Point> pq = new MaxPriorityQueue <Point>(Point.X_ORDER);

            foreach (var value in points)
            {
                pq.Insert(value);
            }
            Assert.IsFalse(pq.IsEmpty());
            Assert.AreEqual(10, pq.Size());

            Point[] expectPoints = new Point[10];
            for (int i = 0; i < 10; i++)
            {
                expectPoints[i] = new Point(i, 10 - i);
            }
            Shuffle.Do(expectPoints);
            HeapSort.Sort(expectPoints, Point.X_ORDER, SortOrder.DESC);

            for (int i = 0; i < 10; i++)
            {
                var result = pq.Max();
                Assert.AreEqual(expectPoints[i].X, result.X);
                Assert.AreEqual(expectPoints[i].Y, result.Y);
                result = pq.DelMax();
                Assert.AreEqual(expectPoints[i].X, result.X);
                Assert.AreEqual(expectPoints[i].Y, result.Y);
            }
            Assert.IsTrue(pq.IsEmpty());
            Assert.AreEqual(0, pq.Size());
        }
예제 #4
0
 public void MaxPQ_Basic()
 {
     var pq = new MaxPriorityQueue<int>();
     pq.Insert(2, null);
     pq.Insert(6, null);
     pq.Insert(1, null);
     Assert.AreEqual(6, (int)(pq.DelMax().Item1));
     pq.Insert(9, null);
     pq.Insert(7, null);
     pq.Insert(1, null);
     Assert.AreEqual(9, (int)(pq.DelMax().Item1));
     pq.Insert(2, null);
     pq.Insert(6, null);
     pq.Insert(1, null);
     Assert.AreEqual(7, (int)(pq.DelMax().Item1));
     Assert.AreEqual(6, (int)(pq.Max().Item1));
     Assert.AreEqual(6, (int)(pq.DelMax().Item1));
     Assert.AreEqual(2, (int)(pq.DelMax().Item1));
     Assert.AreEqual(2, (int)(pq.DelMax().Item1));
 }