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

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

            int originalFront = deque.PeekAtItemFromFront();

            deque.DequeueItemFromBack();

            int newFront = deque.PeekAtItemFromFront();

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

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

            deque.EnqueueItemToFront(9);

            int front = deque.PeekAtItemFromFront();

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

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

            deque.DequeueItemFromFront();

            int newFront = deque.PeekAtItemFromFront();

            Assert.AreEqual(2, newFront);
        }
        public void SynchronisedDoubleEndedQueuePeekAtItemFromFrontThrowsIfQueueIsEmpty()
        {
            var deque = new SynchronisedDeque <int>();

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