public void MultipleStacksUsingSingleArray1FixedSizeCompleteTestPopEmptyStack()
        {
            // Create stack & push three items.
            var st = new MultipleStacksUsingSingleArray1FixedSizeComplete <int>(2);

            try
            {
                st.Pop(stackNumber: 0);
            }
            catch (InvalidOperationException)
            {
                // Exception.
                Assert.IsTrue(true);
                return;
            }

            // No exception.
            Assert.Fail();
        }
        public void MultipleStacksUsingSingleArray1FixedSizeCompleteTestInvalidStackNumber()
        {
            // Create three stack with 2 items each.
            var st = new MultipleStacksUsingSingleArray1FixedSizeComplete <int>(capacityPerStack: 3, stackCount: 2);

            try
            {
                st.Push(stackNumber: 2, item: 1);
            }
            catch (ArgumentException)
            {
                // Exception.
                Assert.IsTrue(true);
                return;
            }

            // No exception.
            Assert.Fail();
        }
        public void MultipleStacksUsingSingleArray1FixedSizeCompleteTestOverflow()
        {
            // Create three stack with 2 items each.
            var st = new MultipleStacksUsingSingleArray1FixedSizeComplete <int>(2);

            // Push 3 items to first stack.
            st.Push(stackNumber: 0, item: 1);
            st.Push(stackNumber: 0, item: 2);

            try
            {
                st.Push(stackNumber: 0, item: 3);
            }
            catch (InvalidOperationException)
            {
                // Exception.
                Assert.IsTrue(true);
                return;
            }

            // No exception.
            Assert.Fail();
        }
        public void MultipleStacksUsingSingleArray1FixedSizeCompleteTwoItems()
        {
            // Create three stacks with capacity of 3.
            var st = new MultipleStacksUsingSingleArray1FixedSizeComplete <int>(3);

            // Check the count of each stack.
            Assert.AreEqual(0, st.Count(0));
            Assert.AreEqual(0, st.Count(1));
            Assert.AreEqual(0, st.Count(2));

            // Push an item onto the 0 stack.
            st.Push(stackNumber: 0, item: 1);

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(0, st.Count(1));
            Assert.AreEqual(0, st.Count(2));

            // Push an item onto the 1 stack.
            st.Push(stackNumber: 1, item: 1);

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(1, st.Count(1));
            Assert.AreEqual(0, st.Count(2));

            // Push a second item onto the 1 stack.
            st.Push(stackNumber: 1, item: 2);

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(2, st.Count(1));
            Assert.AreEqual(0, st.Count(2));

            // Push an item onto the 2 stack.
            st.Push(stackNumber: 2, item: 1);

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(2, st.Count(1));
            Assert.AreEqual(1, st.Count(2));

            // Push a second item onto the 2 stack.
            st.Push(stackNumber: 2, item: 2);

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(2, st.Count(1));
            Assert.AreEqual(2, st.Count(2));

            // Push an second item onto the 0 stack.
            st.Push(stackNumber: 0, item: 2);

            // Peek at the items.
            Assert.AreEqual(2, st.Peek(0));
            Assert.AreEqual(2, st.Peek(1));
            Assert.AreEqual(2, st.Peek(2));

            // Pop the item from the 0 stack.
            Assert.AreEqual(2, st.Pop(0));

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(2, st.Count(1));
            Assert.AreEqual(2, st.Count(2));

            // Pop the item from the 1 stack.
            Assert.AreEqual(2, st.Pop(1));

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(1, st.Count(1));
            Assert.AreEqual(2, st.Count(2));

            // Pop the item from the 2 stack.
            Assert.AreEqual(2, st.Pop(2));

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(1, st.Count(1));
            Assert.AreEqual(1, st.Count(2));
        }
        public void MultipleStacksUsingSingleArray1FixedSizeCompleteTestOneItem()
        {
            // Create three stacks with capacity of 1.
            var st = new MultipleStacksUsingSingleArray1FixedSizeComplete <int>(1);

            // Check the count of each stack.
            Assert.AreEqual(0, st.Count(0));
            Assert.AreEqual(0, st.Count(1));
            Assert.AreEqual(0, st.Count(2));

            // Push an item onto the first stack.
            st.Push(0, 1);

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(0, st.Count(1));
            Assert.AreEqual(0, st.Count(2));

            // Push an item onto the second stack.
            st.Push(1, 2);

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(1, st.Count(1));
            Assert.AreEqual(0, st.Count(2));

            // Push an item onto the third stack.
            st.Push(2, 3);

            // Check the count of each stack.
            Assert.AreEqual(1, st.Count(0));
            Assert.AreEqual(1, st.Count(1));
            Assert.AreEqual(1, st.Count(2));

            // Peek at the items.
            Assert.AreEqual(1, st.Peek(0));
            Assert.AreEqual(2, st.Peek(1));
            Assert.AreEqual(3, st.Peek(2));

            // Pop the item from the first stack.
            Assert.AreEqual(1, st.Pop(0));

            // Check the count of each stack.
            Assert.AreEqual(0, st.Count(0));
            Assert.AreEqual(1, st.Count(1));
            Assert.AreEqual(1, st.Count(2));

            // Pop the item from the second stack.
            Assert.AreEqual(2, st.Pop(1));

            // Check the count of each stack.
            Assert.AreEqual(0, st.Count(0));
            Assert.AreEqual(0, st.Count(1));
            Assert.AreEqual(1, st.Count(2));

            // Pop the item from the third stack.
            Assert.AreEqual(3, st.Pop(2));

            // Check the count of each stack.
            Assert.AreEqual(0, st.Count(0));
            Assert.AreEqual(0, st.Count(1));
            Assert.AreEqual(0, st.Count(2));
        }