示例#1
0
        public void SomeCanBeDecreased()
        {
            var       rand    = new Random(42);
            const int count   = 100000;
            var       randoms = new List <int>(count);

            for (int i = 0; i < count; i++)
            {
                randoms.Add(rand.Next());
            }

            RandomMeldablePriorityTree <int> heap = null;
            var nodes = new List <RandomMeldablePriorityTree <int> >(count);

            for (int i = 0; i < count; i++)
            {
                var node = new RandomMeldablePriorityTree <int>(randoms[i]);
                nodes.Add(node);
                heap = RandomMeldablePriorityTree <int> .Meld(heap, node);
            }
            for (int i = 0; i < 200; i++)
            {
                var spot = rand.Next(count);
                var node = nodes[spot];
                heap           = heap.DecreaseKey(node, node.Element - 10);
                randoms[spot] -= 10;
            }

            var sorted = new List <int>(count);

            while (heap != null)
            {
                sorted.Add(heap.Element);
                heap = heap.DeleteMin();
            }

            randoms.Sort();

            Assert.True(randoms.SequenceEqual(sorted));
        }