コード例 #1
0
ファイル: Modulo.cs プロジェクト: tannert44/SimpleCalculator
 public int ModuloConstants(string input, Constant constant)
 {
     Parser parse = new Parser();
     int constant_value;
     int number_value;
     Char result1;
     Char result2;
     int result3;
     int result4;
     bool test1 = Char.TryParse(parse.GetFirst(input), out result1);
     bool test2 = Char.TryParse(parse.GetSecond(input), out result2);
     bool test3 = int.TryParse(parse.GetFirst(input), out result3);
     bool test4 = int.TryParse(parse.GetSecond(input), out result4);
     if (test1 && !test3 && test4)
     {
         constant_value = constant.GetConstant(result1);
         number_value = result4;
     }
     else if (test2 && !test4 && test3)
     {
         constant_value = constant.GetConstant(result2);
         number_value = result3;
     }
     else if (test1 && test2 && !test3 && !test4)
     {
         constant_value = constant.GetConstant(result1);
         number_value = constant.GetConstant(result2);
     }
     else
     {
         throw new FormatException();
     }
     return constant_value % number_value;
 }
コード例 #2
0
 public int EvaluateInput(string input, Constant constant)
 {
     Parse parse = new Parse();
     Add add_input = new Add();
     Subtract subtract_input = new Subtract();
     Multiply multiply_input = new Multiply();
     Divide divide_input = new Divide();
     Modulo modulo_input = new Modulo();
     if (parse.OperatorInput(input) == '+')
     {
         return add_input.AddConstants(input, constant);
     }
     if (parse.OperatorInput(input) == '-')
     {
         return subtract_input.SubtractConstants(input, constant);
     }
     if (parse.OperatorInput(input) == '*')
     {
         return multiply_input.MultiplyConstants(input, constant);
     }
     if (parse.OperatorInput(input) == '/')
     {
         return divide_input.DivideConstants(input, constant);
     }
     if (parse.OperatorInput(input) == '%')
     {
         return modulo_input.ModuloConstants(input, constant);
     }
     throw new FormatException();
 }
コード例 #3
0
 public void ConstantCanAdd()
 {
     Constant newConstant = new Constant();
     newConstant.addConst("a", 2);
     Evaluate twoPlusThree = new Evaluate("a + 3", newConstant);
     Assert.AreEqual(5, twoPlusThree.doMath());
 }
コード例 #4
0
        public void ConstantTestIfCanGetValueOfConstant()
        {
            Constant constant = new Constant();
            constant.AddToConstants('x', 5);

            Assert.AreEqual(5, constant.GetValueOf('x'));
        }
コード例 #5
0
        static void Main(string[] args)
        {
            int count = 0;
            Constant currentConstant = new Constant();
            Evaluate expression;

            while (true)
            {
                Console.Write("[{0}]> ", count);
                string input = Console.ReadLine();
                expression = new Evaluate(input, currentConstant);
                if (input.ToLower() == "exit" || input.ToLower() == "quit")
                {
                    break;
                }
                else if (input.IndexOf("=")> -1)
                {
                    //set variable

                    Parse addConstant = new Parse(input, currentConstant);
                    addConstant.setOperatorIndex();
                    currentConstant.addConst(addConstant.StringFirst(), addConstant.secondNum());
                    // = saved 'x' as '3'
                    Console.WriteLine("= saved '" + addConstant.StringFirst() + "' as '" + addConstant.secondNum() + "'");

                }
                else
                {
                    int answer = expression.doMath();
                    Console.WriteLine("   = {0}", answer);
                    count++;

                }
            }
        }
コード例 #6
0
 public void EvaluateInputWorksForConstantAddition()
 {
     string input = "a+5";
     Constant constant = new Constant();
     constant.AddConstant('a', 1);
     Evaluate newSession = new Evaluate();
     Assert.AreEqual(6, newSession.EvaluateInput(input, constant));
 }
コード例 #7
0
 public void ConstantCanAddMultipleConstantsToList()
 {
     Constant myConstant = new Constant();
     myConstant.addConst("a", 5);
     myConstant.addConst("b", 8);
     Assert.AreEqual(5, myConstant.getNum("a"));
     Assert.AreEqual(8, myConstant.getNum("b"));
 }
コード例 #8
0
 public void ConstantEnsureICanAddConstantToDictionary()
 {
     Constant constant = new Constant();
     constant.AddConstant('x', 5);
     int result;
     constant.constant_dictionary.TryGetValue('x', out result);
     Assert.AreEqual(5, result);
 }
コード例 #9
0
        public void ConstantTestIfCanAddToDictionaryIfConstantAlreadyExists()
        {
            Constant constant = new Constant();
            constant.AddToConstants('x', 5);
            constant.AddToConstants('x', 10);

            Assert.AreEqual(5, constant.Constants['x']);
        }
コード例 #10
0
 public void ParseAllowsConstantsFirst()
 {
     Constant newConstant = new Constant();
     Parse aplus3 = new Parse("a + 3", newConstant);
     aplus3.addConst("a", 5);
     aplus3.setOperatorIndex();
     Assert.AreEqual(5, aplus3.firstNum());
 }
コード例 #11
0
 public void EvaluateInputConstantMultiply()
 {
     string input = "a*8";
     Constant constant = new Constant();
     constant.AddConstant('a', 1);
     Evaluate newSession = new Evaluate();
     Assert.AreEqual(5, newSession.EvaluateInput(input, constant));
 }
コード例 #12
0
 public void EvaluateInputConstantModulo()
 {
     string input = "a%5";
     Constant constant = new Constant();
     constant.AddConstant('a', 11);
     Evaluate newSession = new Evaluate();
     Assert.AreEqual(1, newSession.EvaluateInput(input, constant));
 }
コード例 #13
0
 public void EvaluateInputConstantSubtract()
 {
     string input = "a-8";
     Constant constant = new Constant();
     constant.AddConstant('a', 7);
     Evaluate newSession = new Evaluate();
     Assert.AreEqual(2, newSession.EvaluateInput(input, constant));
 }
コード例 #14
0
 public void EvaluateInputConstantDivision()
 {
     string input = "a/5";
     Constant constant = new Constant();
     constant.AddConstant('a', 10);
     Evaluate newSession = new Evaluate();
     Assert.AreEqual(2, newSession.EvaluateInput(input, constant));
 }
コード例 #15
0
        public void ConstantTestGetExpressionWithIncorrectValues()
        {
            string input = "x = y + 1";
            Constant constant = new Constant(input);
            int expected = 5;

            Assert.AreEqual(expected, constant.GetExpression());
        }
コード例 #16
0
        public void ConstantTestGetExpressionWithOneThingOneRightSide()
        {
            Constant constant = new Constant();
            string input = "x = 12";
            constant.ChangeExpression(input);
            int expected = 12;

            Assert.AreEqual(expected, constant.GetExpression());
        }
コード例 #17
0
        public void ConstantTestGetExpression()
        {
            string input = "x = 12 + 12";
            Constant constant = new Constant();
            constant.ChangeExpression(input);
            int expected = 24;

            Assert.AreEqual(expected, constant.GetExpression());
        }
コード例 #18
0
        public void ConstantTestAddToListMethod()
        {
            Constant constant = new Constant();
            char expectedConst = 'x';
            int expectedNum = 5;
            constant.AddToConstants(expectedConst, expectedNum);

            Assert.AreEqual(expectedNum, constant.Constants[expectedConst]);
        }
コード例 #19
0
        public void ConstantTestGetExpressionWithOtherConstants()
        {
            Constant constant = new Constant();
            string input = "x = 12 + 12";
            constant.ChangeExpression(input);
            constant.GetExpression();
            constant.ChangeExpression("y = x + 2");
            int expected = 26;

            Assert.AreEqual(expected, constant.GetExpression());
        }
コード例 #20
0
ファイル: AddTest.cs プロジェクト: tannert44/SimpleCalculator
 public void AddWorksWithConstantsBackwards()
 {
     string mock_input = "22 + a";
     Parser parse = new Parser();
     int toBeKey = int.Parse(parse.GetFirst(mock_input));
     char toBeKeyValue = char.Parse(parse.GetSecond(mock_input));
     Constant constant = new Constant();
     constant.AddConstant(toBeKeyValue, 1);
     Add items = new Add();
     Assert.AreEqual(23, items.AddConstants(mock_input, constant));
 }
コード例 #21
0
 public void DivideWorksWithConstants()
 {
     string mock_input = "a / 2";
     Parser parse = new Parser();
     char toBeKey = char.Parse(parse.GetFirst(mock_input));
     int toBeKeyValue = int.Parse(parse.GetSecond(mock_input));
     Constant constant = new Constant();
     constant.AddConstant(toBeKey, 2);
     Divide items = new Divide();
     Assert.AreEqual(1, items.DivideConstants(mock_input, constant));
 }
コード例 #22
0
 public void ModuloWorksWithConstants()
 {
     string mock_input = "a % 2";
     Parser parse = new Parser();
     char toBeKey = char.Parse(parse.GetFirst(mock_input));
     int toBeKeyValue = int.Parse(parse.GetSecond(mock_input));
     Constant constant = new Constant();
     constant.AddConstant(toBeKey, 5);
     Modulo items = new Modulo();
     Assert.AreEqual(1, items.ModuloConstants(mock_input, constant));
 }
コード例 #23
0
 public void SubtractWorksWithConstants()
 {
     string mock_input = "a - 2";
     Parser parse = new Parser();
     char toBeKey = char.Parse(parse.GetFirst(mock_input));
     int toBeKeyValue = int.Parse(parse.GetSecond(mock_input));
     Constant constant = new Constant();
     constant.AddConstant(toBeKey, 1);
     Subtract items = new Subtract();
     Assert.AreEqual(-1, items.SubtractConstants(mock_input, constant));
 }
コード例 #24
0
 public void MultiplyWorksWithConstants()
 {
     string mock_input = "a * 2";
     Parser parse = new Parser();
     char toBeKey = char.Parse(parse.GetFirst(mock_input));
     int toBeKeyValue = int.Parse(parse.GetSecond(mock_input));
     Constant constant = new Constant();
     constant.AddConstant(toBeKey, 1);
     Multiply items = new Multiply();
     Assert.AreEqual(2, items.MultiplyConstants(mock_input, constant));
 }
コード例 #25
0
ファイル: Program.cs プロジェクト: tannert44/SimpleCalculator
        static void Main(string[] args)
        {
            int count = 0;
            Parser parse = new Parser();
            Constant constant = new Constant();
            Evaluate evaluate_input = new Evaluate();
            Char result1;
            Char result2;
            int result3;
            int result4;

            while (true)
            {
                Console.Write("[{0}]", count);
                string input = Console.ReadLine();
                if (input.ToLower() == "exit" || input.ToLower() == "quit")
                {
                    break;
                }
                bool testIfFirstIsChar = Char.TryParse(parse.GetFirst(input), out result1);
                bool testIfSecondIsChar = Char.TryParse(parse.GetSecond(input), out result2);
                bool testIfFirstIsNum = int.TryParse(parse.GetFirst(input), out result3);
                bool testIfSecondIsNum = int.TryParse(parse.GetSecond(input), out result4);
                if (input.Length == 1)
                {
                    Console.WriteLine(" = {0} is {1}", input, constant.GetConstant(char.Parse(input)));
                }
                else if (testIfFirstIsChar && !testIfFirstIsNum && parse.GetOperator(input) == '=')
                {
                    constant.AddConstant(result1, result4);
                    Console.WriteLine("= '{0}' is '{1}' ", result1, result4);
                }
                else if (testIfFirstIsChar && !testIfFirstIsNum && testIfSecondIsNum || testIfSecondIsChar && !testIfSecondIsNum && testIfFirstIsNum || !testIfFirstIsNum && !testIfSecondIsNum)
                {
                    Console.WriteLine("= {0}", evaluate_input.EvaluateInput(input, constant));
                }
                else if (testIfFirstIsNum && testIfSecondIsNum)
                {
                    Console.WriteLine("= {0}", evaluate_input.EvaluateInput(input));
                }
                count++;
            }
        }
コード例 #26
0
 static void Main(string[] args)
 {
     Console.WriteLine("Calculator");
     int count = 0;
     string input;
     Constant constant = new Constant();
     while (true)
     {
         Console.Write("[{0}]> ", count);
         input = Console.ReadLine();
         if(input == "exit" || input == "quit")
         {
             Console.WriteLine("loggin out");
             break;
         }
         ProcessInput PI = new ProcessInput(input);
         try
         {
             Evaluate ev = new Evaluate(PI.GetFirstInputNumber(), PI.GetOperator(), PI.GetSecondInputNumber());
             Console.WriteLine("   = " + ev.Operate());
         }
         catch
         {
             constant.ChangeExpression(input);
             try
             {
                 Console.WriteLine(constant.GetExpression());
             }
             catch
             {
                 Console.WriteLine("Error! Try again . . .");
             }
         }
         count++;
     }
 }
コード例 #27
0
 public void ConstantEnsureICanCreateConstant()
 {
     Constant constant = new Constant();
     Assert.IsNotNull(constant);
 }
コード例 #28
0
        static void Main(string[] args)
        {
            int    counter     = 0;
            string lastAnswer  = "";
            string lastCommand = "";

            while (true)
            {
                Console.Write("[{0}]>", counter);

                string inputString = Console.ReadLine();

                //all the patterns

                //exit pattern
                string exitPattern = @"^(exit|quit|EXIT|QUIT)$";
                Match  exit        = Regex.Match(inputString.ToLower(), exitPattern);

                //lastAnswer Pattern
                string lastAnswerPattern = @"^last$";
                Match  lastAnswerP       = Regex.Match(inputString.ToLower(), lastAnswerPattern);

                //lastCommand Pattern
                string lastCommandPattern = @"^lastq$";
                Match  lastCommandP       = Regex.Match(inputString.ToLower(), lastCommandPattern);

                //regular calculation pattern
                string RegurlarCalculationPattern = @"^(?<digit1>[0-9]+)(?<operation>(\+|\-|\*|\/))(?<digit2>[0-9]+)$";
                Match  m1 = Regex.Match(inputString, RegurlarCalculationPattern);

                //modulus pattern
                string modulusPattern   = @"^\|(?<sign>\-?)(?<number>\d+)\|$";
                Match  modulusOperation = Regex.Match(inputString, modulusPattern);

                //x=5 pattern
                string constSetPattern   = @"^(?<constantLetter>[a-zA-Z])(\s?)\=(\s?)(?<constantNumber>\d+)$";
                Match  constantOperation = Regex.Match(inputString, constSetPattern);

                //x pattern
                string constGetPattern = @"^(?<constLetter>[a-zA-Z])$";
                Match  constantGet     = Regex.Match(inputString, constGetPattern);

                //x+1 pattern
                string letterPlusNumPattern = @"^(?<const>[a-zA-Z])(?<operation>(\+|\-|\*|\/))(?<digit>[0-9]+)$";
                Match  constOperation       = Regex.Match(inputString, letterPlusNumPattern);

                //1+x pattern
                string numPlusLetterPattern = @"^(?<digit>[0-9]+)(?<operation>(\+|\-|\*|\/))(?<const>[a-zA-Z])$";
                Match  numPlusLetterP       = Regex.Match(inputString, numPlusLetterPattern);

                //x+y pattern
                string letterPlusLetterPattern = @"^(?<const1>[a-zA-Z])(?<operation>(\+|\-|\*|\/))(?<const2>[a-zA-Z])$";
                Match  letterPlusLetterP       = Regex.Match(inputString, letterPlusLetterPattern);



                //exit pattern
                if (exit.Success == true)
                {
                    break;
                }

                //lastAnswer Pattern
                else if (lastAnswerP.Success == true)
                {
                    Console.WriteLine(lastAnswer);
                }

                //lastCommand Pattern
                else if (lastCommandP.Success == true)
                {
                    Console.WriteLine(lastCommand);
                }

                //regular calculation pattern
                else if (m1.Success == true)
                {
                    lastCommand = inputString;

                    int    number1   = int.Parse(m1.Groups["digit1"].Value);
                    int    number2   = int.Parse(m1.Groups["digit2"].Value);
                    string operation = m1.Groups["operation"].Value;
                    if (operation == "+")
                    {
                        Addition addition       = new Addition();
                        int      additionResult = addition.AdditionOperation(number1, number2);
                        Console.WriteLine("=" + additionResult);
                        lastAnswer = "=" + additionResult;
                        counter++;
                        continue;
                    }
                    else if (operation == "-")
                    {
                        Subtraction subtraction       = new Subtraction();
                        int         subtractionResult = subtraction.SubtractionOperation(number1, number2);
                        Console.WriteLine("=" + subtractionResult);
                        lastAnswer = "=" + subtractionResult;
                        counter++;
                        continue;
                    }
                    else if (operation == "*")
                    {
                        Multiplication multi       = new Multiplication();
                        int            multiResult = multi.MultiplicationOperation(number1, number2);
                        Console.WriteLine("=" + multiResult);
                        lastAnswer = "=" + multiResult;
                        counter++;
                        continue;
                    }
                    else if (operation == "/")
                    {
                        Division divi       = new Division();
                        string   diviResult = divi.DivisionOperation(number1, number2);
                        Console.WriteLine("=" + diviResult);
                        lastAnswer = "=" + diviResult;
                        counter++;
                        continue;
                    }
                }

                //modulus pattern
                else if (modulusOperation.Success == true)
                {
                    lastCommand = inputString;

                    int     modulusNum    = int.Parse(modulusOperation.Groups["number"].Value);
                    string  ifSign        = modulusOperation.Groups["sign"].Value;
                    Modulus modulus       = new Modulus();
                    int     modulusResult = modulus.ModulusFunction(ifSign, modulusNum);
                    Console.WriteLine(modulusResult);
                    lastAnswer = Convert.ToString(modulusResult);
                    counter++;
                    continue;
                }

                //x=5 pattern
                else if (constantOperation.Success == true)
                {
                    lastCommand = inputString;

                    char     consLetter = char.Parse(constantOperation.Groups["constantLetter"].Value.ToLower());
                    double   consNumber = int.Parse(constantOperation.Groups["constantNumber"].Value);
                    Constant consta     = new Constant();
                    lastAnswer = consta.ConstantSetFunction(consLetter, consNumber);
                    counter++;
                    continue;
                }

                //x pattern
                else if (constantGet.Success == true)
                {
                    lastCommand = inputString;

                    char     consLetter = char.Parse(constantGet.Groups["constLetter"].Value.ToLower());
                    Constant consGet    = new Constant();
                    lastAnswer = consGet.ConstantGetFunction(consLetter);
                    counter++;
                    continue;
                }

                //x+1 pattern
                else if (constOperation.Success == true)
                {
                    lastCommand = inputString;

                    char     consLetter = char.Parse(constOperation.Groups["const"].Value.ToLower());
                    string   operation  = constOperation.Groups["operation"].Value;
                    int      number     = int.Parse(constOperation.Groups["digit"].Value);
                    Constant constOper  = new Constant();
                    lastAnswer = constOper.constOperationFunction(consLetter, operation, number);
                    counter++;
                    continue;
                }

                //1+x pattern
                else if (numPlusLetterP.Success == true)
                {
                    lastCommand = inputString;

                    char     consLetter = char.Parse(numPlusLetterP.Groups["const"].Value.ToLower());
                    string   operation  = numPlusLetterP.Groups["operation"].Value;
                    int      number     = int.Parse(numPlusLetterP.Groups["digit"].Value);
                    Constant constOper  = new Constant();
                    lastAnswer = constOper.constOperationFunction(consLetter, operation, number);
                    counter++;
                    continue;
                }

                //x+y pattern
                else if (letterPlusLetterP.Success == true)
                {
                    lastCommand = inputString;

                    char     consLetter1 = char.Parse(letterPlusLetterP.Groups["const1"].Value.ToLower());
                    string   operation   = letterPlusLetterP.Groups["operation"].Value;
                    char     consLetter2 = char.Parse(letterPlusLetterP.Groups["const2"].Value.ToLower());
                    Constant constOper   = new Constant();
                    lastAnswer = constOper.constOperationFunction(consLetter1, operation, consLetter2);
                    counter++;
                    continue;
                }

                else
                {
                    Console.WriteLine("Input Format should be '1+2','|-2|', 'x=1', 'x', 'x+1', '1+x', or 'x+y'");
                    counter++;
                    continue;
                }

                //3. catch error
            }
            Console.WriteLine("End");
            //Console.ReadLine();
        }
コード例 #29
0
        public void ConstantTestIfReturnsValueOfConstant()
        {
            Constant constant = new Constant();
            constant.AddToConstants('x', 12);
            constant.ChangeExpression("x");

            Assert.AreEqual(12, constant.GetExpression());
        }
コード例 #30
0
 public void ConstantEnsureICanRetrieveFromDictionary()
 {
     Constant constant = new Constant();
     constant.AddConstant('x', 5);
     Assert.AreEqual(5, constant.GetConstant('x'));
 }
コード例 #31
0
 public void ConstantTestToMakeSureExceptionThrown()
 {
     Constant constant = new Constant();
     Assert.AreEqual(5, constant.GetValueOf('x'));
 }