public void State_DesignPatternTest()
        {
            //Arrange
            double a = 5;
            double b = 5;
            double c = 144;
            double d = 12;
            double result1, result2, result3, result4, result5, result6;
            String test1, test2;

            //Act
            ICalculatorComponent calculator = new Calculator();

            String  userInput = "addition";
            Invoker invoker   = new Invoker(userInput);

            invoker.Addition.Execute(invoker, calculator);
            calculator.TempOperations["Addition"].CreateCalculation(calculator, a, b);
            calculator.UserOperations.Add("+");
            calculator.CalculatorState.Add(new Context(new Unmodified()));
            result1 = calculator.TempOperations["Addition"].GetResult(calculator);

            userInput = "subtraction";
            invoker   = new Invoker(userInput);
            invoker.Subtraction.Execute(invoker, calculator);
            calculator.TempOperations["Subtraction"].CreateCalculation(calculator, a, b);
            calculator.UserOperations.Add("-");
            calculator.CalculatorState.Add(new Context(new Unmodified()));
            result2 = calculator.TempOperations["Subtraction"].GetResult(calculator);

            userInput = "multiplication";
            invoker   = new Invoker(userInput);
            invoker.Multiplication.Execute(invoker, calculator);
            calculator.TempOperations["Multiplication"].CreateCalculation(calculator, a, b);
            calculator.UserOperations.Add("*");
            calculator.CalculatorState.Add(new Context(new Unmodified()));
            result3 = calculator.TempOperations["Multiplication"].GetResult(calculator);

            userInput = "division";
            invoker   = new Invoker(userInput);
            invoker.Division.Execute(invoker, calculator);
            calculator.TempOperations["Division"].CreateCalculation(calculator, a, b);
            calculator.UserOperations.Add("/");
            calculator.CalculatorState.Add(new Context(new Unmodified()));
            result4 = calculator.TempOperations["Division"].GetResult(calculator);

            userInput = "square root";
            invoker   = new Invoker(userInput);
            invoker.SquareRoot.Execute(invoker, calculator);
            calculator.TempOperations["Square Root"].CreateCalculation(calculator, c);
            calculator.UserOperations.Add("SQUARE ROOT OF");
            calculator.CalculatorState.Add(new Context(new Unmodified()));
            result5 = calculator.TempOperations["Square Root"].GetResult(calculator);

            userInput = "square";
            invoker   = new Invoker(userInput);
            invoker.Square.Execute(invoker, calculator);
            calculator.TempOperations["Square"].CreateCalculation(calculator, d);
            calculator.UserOperations.Add("SQUARE OF");
            calculator.CalculatorState.Add(new Context(new Unmodified()));
            result6 = calculator.TempOperations["Square"].GetResult(calculator);

            Collection collection = new Collection();

            foreach (Calculation _calculation in calculator.CalculationHistory)
            {
                collection.CalculationHistory.Add(_calculation);
            }

            Iterator.Iterator iterator = collection.CreateIterator();

            iterator.First(calculator);

            // State will test for both "Unmodified" and "Modified" states of a calculation.
            test1 = calculator.CalculatorState[iterator.GetIndex()].State.GetType().Name;

            CalculationManipulation manipulator    = new CalculationManipulation();
            Calculation             oldCalculation = iterator.CurrentCalculation(calculator);
            Calculation             newCalculation = manipulator._edit.TwoVariables(oldCalculation, 99, 1, "addition");

            iterator.SetTwoVariableCalculation(calculator, newCalculation, "+");

            iterator.CurrentCalculation(calculator).Operation(iterator.CurrentCalculation(calculator).A, iterator.CurrentCalculation(calculator).B);

            test2 = calculator.CalculatorState[iterator.GetIndex()].State.GetType().Name;


            //Assert
            Assert.AreEqual("Unmodified", test1);
            Assert.AreEqual("Modified", test2);
        }
        public static void Activate(ICalculatorComponent calculator, String userInput)
        {
            Collection collection = new Collection();

            foreach (Calculation _calculation in calculator.CalculationHistory)
            {
                collection.CalculationHistory.Add(_calculation);
            }

            Iterator.Iterator iterator = collection.CreateIterator();


            // | 1 | View Calculation History (Format: Entire List)
            while (userInput.Equals("1"))
            {
                Prompts.ShowHistory();
                iterator.ShowAll(calculator);
                Prompts.Back();
                String enter = Console.ReadLine();
                userInput = "pass";
            }

            // | 2 | View Calculation History (Format: One By One)
            while (userInput.Equals("2"))
            {
                String enter = "";

                Prompts.IteratorTitle();
                iterator.First(calculator);

                while (enter != "EXIT")
                {
                    Prompts.IteratorOptions();
                    enter = Console.ReadLine();

                    while (enter.Equals("NEXT"))
                    {
                        iterator.Next(calculator);
                        enter = "pass";
                    }

                    while (enter.Equals("PREVIOUS"))
                    {
                        iterator.Previous(calculator);
                        enter = "pass";
                    }

                    while (enter.Equals("FIRST"))
                    {
                        iterator.First(calculator);
                        enter = "pass";
                    }

                    while (enter.Equals("LAST"))
                    {
                        iterator.Last(calculator);
                        enter = "pass";
                    }

                    while (enter.Equals("CHANGE"))
                    {
                        Prompts.ShowEdit();
                        Receiver.DisplayOperations(calculator, "");
                        string operation = Console.ReadLine();

                        CalculationManipulation manipulator    = new CalculationManipulation();
                        Calculation             oldCalculation = iterator.CurrentCalculation(calculator);
                        manipulator.EditCalculation(operation, oldCalculation, calculator, iterator);

                        iterator.Current(calculator);
                        WriteToConsole.Write("");

                        Prompts.Changed();
                        string temp = Console.ReadLine();
                        enter = "EXIT";
                    }

                    while (enter.Equals("REMOVE"))
                    {
                        CalculationManipulation manipulator = new CalculationManipulation();
                        manipulator.RemoveCalculation(calculator, iterator.GetIndex());
                        enter = "pass";
                        Prompts.Removed();
                        string temp = Console.ReadLine();
                        enter = "EXIT";
                    }

                    while ((!enter.Equals("NEXT")) && (!enter.Equals("PREVIOUS")) && (!enter.Equals("FIRST")) && (!enter.Equals("LAST") && (!enter.Equals("CHANGE") && (!enter.Equals("REMOVE")) && (!enter.Equals("pass")) && (!enter.Equals("EXIT")))))
                    {
                        Prompts.Enter();
                        string temp = Console.ReadLine();
                        enter = "pass";
                    }
                }

                userInput = "pass";
            }

            // | 5 | Check State Of All Calculations
            while (userInput.Equals("5"))
            {
                Prompts.StateTitle();
                iterator.ShowState(calculator);
                Prompts.StateOptions();
                String enter = Console.ReadLine();
                userInput = "pass";
            }
        }