コード例 #1
0
        static void Main()
        {
            RingQueue <int> ringQueue = new RingQueue <int>(new DoublingStrategy());

            ringQueue.Enqueue(0);
            ringQueue.Enqueue(1);
            ringQueue.Enqueue(2);
            ringQueue.Enqueue(3);
            ringQueue.Enqueue(4);
            ringQueue.Enqueue(5);
            ringQueue.Enqueue(6);
            ringQueue.Enqueue(7);
            ringQueue.Enqueue(8);
            ringQueue.Enqueue(9);

            for (int i = 0; i < 4; i++)
            {
                Console.WriteLine(ringQueue.Dequeue());
            }

            ringQueue.Enqueue(0);
            ringQueue.Enqueue(1);
            ringQueue.Enqueue(2);
            ringQueue.Enqueue(3);
            ringQueue.Enqueue(4);
            ringQueue.Enqueue(5);
            ringQueue.Enqueue(6);
            ringQueue.Enqueue(7);
            ringQueue.Enqueue(8);
            ringQueue.Enqueue(9);
            ringQueue.Enqueue(0);
            ringQueue.Enqueue(1);
            ringQueue.Enqueue(2);
            ringQueue.Enqueue(3);
            ringQueue.Enqueue(4);
            ringQueue.Enqueue(5);
            ringQueue.Enqueue(6);
            ringQueue.Enqueue(7);
            ringQueue.Enqueue(8);
            ringQueue.Enqueue(9);

            for (int i = ringQueue.Size; i > 0; i--)
            {
                Console.WriteLine(ringQueue.Dequeue());
            }

            ringQueue.Enqueue(1);

            for (int i = ringQueue.Size; i > 0; i--)
            {
                Console.WriteLine(ringQueue.Dequeue());
            }

            Console.ReadKey();
        }
コード例 #2
0
        public void RingQueueLostTest()
        {
            const int maxCount = 20;
            const int size     = 18;
            var       ring     = new RingQueue <int>(size);

            ring.IsEmpty.Should().BeTrue();
            ring.IsFull.Should().BeFalse();

            for (int i = 0; i < maxCount; i++)
            {
                ring.Enqueue(i);
                ring.Count.Should().Be(Math.Min(size, i + 1));
            }
            ring.Count.Should().Be(size);
            ring.IsFull.Should().BeTrue();
            ring.LostCount.Should().Be(maxCount - size);

            for (int i = maxCount - size; i < maxCount; i++)
            {
                int value = ring.Dequeue();
                value.Should().Be(i);
            }

            ring.IsEmpty.Should().BeTrue();
            ring.IsFull.Should().BeFalse();
        }
コード例 #3
0
        public void RingQueueMaxTest()
        {
            const int maxCount = 10;
            var       ring     = new RingQueue <int>(maxCount);

            ring.IsEmpty.Should().BeTrue();
            ring.IsFull.Should().BeFalse();

            for (int i = 0; i < maxCount; i++)
            {
                ring.Enqueue(i);
                ring.Count.Should().Be(i + 1);
            }
            ring.Count.Should().Be(maxCount);
            ring.IsFull.Should().BeTrue();
            ring.LostCount.Should().Be(0);

            for (int i = 0; i < maxCount; i++)
            {
                int value = ring.Dequeue();
                value.Should().Be(i);
            }

            ring.IsEmpty.Should().BeTrue();
            ring.IsFull.Should().BeFalse();
        }
コード例 #4
0
        public void RingQueueTest()
        {
            const int size = 3;
            var       ring = new RingQueue <int>(10);

            ring.IsEmpty.Should().BeTrue();
            ring.IsFull.Should().BeFalse();

            for (int i = 0; i < size; i++)
            {
                ring.Enqueue(i);
                ring.Count.Should().Be(i + 1);
            }
            ring.Count.Should().Be(size);
            ring.IsFull.Should().BeFalse();
            ring.LostCount.Should().Be(0);

            for (int i = 0; i < size; i++)
            {
                ring.Count.Should().Be(size - i);
                int value = ring.Dequeue();
                value.Should().Be(i);
            }

            ring.IsEmpty.Should().BeTrue();
            ring.IsFull.Should().BeFalse();
        }
コード例 #5
0
        public void RingQueueTryPeekTest()
        {
            const int maxCount = 2000;
            const int size     = 20;
            var       ring     = new RingQueue <int>(size);

            ring.IsEmpty.Should().BeTrue();
            ring.IsFull.Should().BeFalse();

            for (int i = 0; i < maxCount; i++)
            {
                ring.Enqueue(i);
                ring.Count.Should().Be(Math.Min(size, i + 1));
            }
            ring.Count.Should().Be(size);
            ring.IsFull.Should().BeTrue();
            ring.LostCount.Should().Be(maxCount - size);

            for (int i = maxCount - size; i < maxCount; i++)
            {
                (bool success, int peekValue)rtn = ring.TryPeek();
                rtn.success.Should().BeTrue();
                int value = ring.Dequeue();

                value.Should().Be(rtn.peekValue);
                value.Should().Be(i);
            }

            ring.IsEmpty.Should().BeTrue();
            ring.IsFull.Should().BeFalse();
        }