예제 #1
0
        public void CanRemove()
        {
            var pq = new TestPriorityQueue <char>();

            foreach (char c in "abcdefghijklmnopqrstuvwxyz")
            {
                pq.Add(c);
            }

            Assert.IsFalse(pq.Remove('$'));             // no such item
            Assert.AreEqual(26, pq.Count);

            // Last item: easy to remove
            Assert.IsTrue(pq.Remove('z'));
            Assert.AreEqual(25, pq.Count);
            Assert.AreEqual('a', pq.Top());
            Assert.IsFalse(pq.Contains('z'));

            // Remove a bottom row item:
            Assert.IsTrue(pq.Remove('w'));
            Assert.AreEqual(24, pq.Count);
            Assert.AreEqual('a', pq.Top());
            Assert.IsFalse(pq.Contains('w'));

            // Remove an inner item:
            Assert.IsTrue(pq.Remove('e'));
            Assert.AreEqual(23, pq.Count);
            Assert.AreEqual('a', pq.Top());
            Assert.IsFalse(pq.Contains('e'));

            // Remove the root item:
            Assert.IsTrue(pq.Remove('a'));
            Assert.AreEqual(22, pq.Count);
            Assert.AreEqual('b', pq.Top());
            Assert.IsFalse(pq.Contains('a'));

            // Remove returns false if not found:
            Assert.IsFalse(pq.Remove('z'));
            Assert.IsFalse(pq.Remove('w'));
            Assert.IsFalse(pq.Remove('e'));
            Assert.IsFalse(pq.Remove('a'));

            // Pop remaining items and verify order:
            Assert.AreEqual('b', pq.Pop());
            Assert.AreEqual('c', pq.Pop());
            Assert.AreEqual('d', pq.Pop());
            Assert.AreEqual('f', pq.Pop());
            Assert.AreEqual('g', pq.Pop());
            Assert.AreEqual('h', pq.Pop());
            Assert.AreEqual('i', pq.Pop());
            Assert.AreEqual('j', pq.Pop());
            Assert.AreEqual('k', pq.Pop());
            Assert.AreEqual('l', pq.Pop());
            Assert.AreEqual('m', pq.Pop());
            Assert.AreEqual('n', pq.Pop());
            Assert.AreEqual('o', pq.Pop());
            Assert.AreEqual('p', pq.Pop());
            Assert.AreEqual('q', pq.Pop());
            Assert.AreEqual('r', pq.Pop());
            Assert.AreEqual('s', pq.Pop());
            Assert.AreEqual('t', pq.Pop());
            Assert.AreEqual('u', pq.Pop());
            Assert.AreEqual('v', pq.Pop());
            Assert.AreEqual('x', pq.Pop());
            Assert.AreEqual('y', pq.Pop());

            Assert.AreEqual(0, pq.Count);
        }