Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }