Beispiel #1
0
        /// <summary>
        /// Calculate the aggregation of numbers in a delimited string based on console arguments and input
        /// </summary>
        /// <param name="userInput">numbers and delimiters in a delimited format</param>
        /// <param name="args">applpication arguments</param>
        /// <returns>A result of the calculation based on the configuration</returns>
        public CalculatorResult Calculate(string userInput, string[] args)
        {
            CalculatorResult calculatorResult = new CalculatorResult();

            try
            {
                ProgramArguments programArguments = programArgumentsHandler.InterpretProgramArguments(args);
                if (programArguments.AlternateDelimiter.Length > 0)
                {
                    calculatorInputHandler.ReplaceAlternativeDelimiterWithArgumentDelimiter(programArguments.AlternateDelimiter);
                }
                if (programArguments.UpperBoundExists)
                {
                    calculatorInputHandler.UpperBound = programArguments.UpperBound;
                }
                CalculatorInput calculatorInput = calculatorInputHandler.InterpretCalculatorInput(userInput);
                if (!programArguments.AllowNegativeNumbers && calculatorInput.Numbers.Any(x => x < 0))
                {
                    throw new NegativeNumberException("Negative numbers are not allowed: " + string.Join(",", calculatorInput.Numbers.Where(x => x < 0)));
                }

                try
                {
                    calculatorResult = calculator.Calculate(calculatorInput.Numbers, Calculator.CreateCalculator(programArguments.CalculatorType));
                }
                catch (DivideByZeroException ex)
                {
                    calculatorResult.ErrorMessage = $"{ex.Message}";
                }
                catch (Exception ex)
                {
                    calculatorResult.ErrorMessage = $"Encountered an Error Attempting to Run Calculation: {ex.ToString()}";
                }
            }
            catch (MaxNumbersExceededException ex)
            {
                calculatorResult.ErrorMessage = $"{ex.Message}";
            }
            catch (NegativeNumberException ex)
            {
                calculatorResult.ErrorMessage = $"{ex.Message}";
            }
            catch (Exception ex)
            {
                calculatorResult.ErrorMessage = $"Encountered an Error Attempting to Intepret the Calculator Input: {ex.ToString()}";
            }

            return(calculatorResult);
        }
Beispiel #2
0
        public void Calculate_NoNumbers_SuccessfulResult()
        {
            string[] args      = null;
            string   userInput = "";

            calculatorInputHandler.InterpretCalculatorInput(Arg.Any <string>()).Returns(
                new CalculatorInput {
                Numbers = new List <int>()
                {
                }
            }
                );
            programArgumentsHandler.InterpretProgramArguments(Arg.Any <string[]>()).Returns(new ProgramArguments());

            CalculatorHandler calculatorHandler = new CalculatorHandler(calculatorInputHandler, programArgumentsHandler);
            CalculatorResult  calculatorResult  = calculatorHandler.Calculate(userInput, args);

            Assert.IsTrue(calculatorResult.Total == 0);
            Assert.IsTrue(calculatorResult.Formula.Equals("0 = 0"));
            Assert.IsTrue(calculatorResult.ErrorMessage.Length == 0);
        }