public void SynchronisedDoubleEndedQueueDequeuingItemFrontUpdatesCount()
        {
            var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };

            var deque = new SynchronisedDeque <int>(items);

            deque.DequeueItemFromFront();

            Assert.AreEqual(7, deque.Count);
        }
        public void SynchronisedDoubleEndedQueueSupportsDequeuingItemFromFrontOfQueue()
        {
            var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };

            var deque = new SynchronisedDeque <int>(items);

            int front = deque.DequeueItemFromFront();

            Assert.AreEqual(1, front);
        }
        public void SynchronisedDoubleEndedQueueSupportsDequeueingFromFrontUntilQueueIsEmptySingleThreaded()
        {
            var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };

            var deque = new SynchronisedDeque <int>();

            deque.EnqueueRangeToFront(items);

            while (!deque.IsEmpty)
            {
                deque.DequeueItemFromFront();
            }
            Assert.AreEqual(0, deque.Count);
        }
        public void SynchronisedDoubleEndedQueueDequeuingItemFrontDoesNotImpactBack()
        {
            var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };

            var deque = new SynchronisedDeque <int>(items);

            int originalBack = deque.PeekAtItemFromBack();

            deque.DequeueItemFromFront();

            int newBack = deque.PeekAtItemFromBack();

            Assert.AreEqual(newBack, originalBack);
        }
        public void SynchronisedDoubleEndedQueueDequeueItemFromFrontThrowsIfQueueIsEmpty()
        {
            var deque = new SynchronisedDeque <int>();

            Assert.Throws <InvalidOperationException>(() => deque.DequeueItemFromFront());
        }