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)); }