public void TestMaintainTopN() { const int N = 10; var numbers = Enumerable.Range(0, 1000).Shuffled(Rand.CreateJavaRandom(1)); var pq = new PriorityQueue <int>(); foreach (var n in numbers) { pq.Enqueue(n); if (pq.Count > N) { pq.Dequeue(); } } pq.CollectionEquals(Enumerable.Range(1000 - N, N)).ShouldEqual(true); }
public void TestMaintainTopNBatchAdds() { const int N = 25; var rand = Rand.CreateJavaRandom(123); var numbers = new Queue <int>(Enumerable.Range(0, 1000).Shuffled(rand)); var pq = new PriorityQueue <int>(); while (numbers.Count > 0) { var amountToAdd = Math.Min(numbers.Count, (int)Math.Round(50 * Math.Abs(rand.NextGaussian()))); pq.EnqueueRange(Enumerable.Range(0, amountToAdd).Select(_ => numbers.Dequeue())); while (pq.Count > N) { pq.Dequeue(); } } pq.CollectionEquals(Enumerable.Range(1000 - N, N)).ShouldEqual(true); }