public int Add(string inputs) { CalculationExpressionParser parser = new CalculationExpressionParser(); string[] delimiter = parser.Delimiters(inputs); string[] allSeparators = delimiter.Concat(new[]{"\n"}).ToArray(); string[] strings = inputs.Split(allSeparators, StringSplitOptions.RemoveEmptyEntries); int temp = 0; int result = 0; foreach (string number in strings) { if(Int32.TryParse(number, out temp)) { bool stopProcessing = false; foreach (ProcessValueAction numberStragey in _numberStrageies) { numberStragey(temp, ref result, ref stopProcessing); if (stopProcessing) break; } } } if(_invalidNumbers.Count > 0) throw new ArgumentException("Invalid Numbers: " + String.Join(", ", _invalidNumbers.Select(x => x.ToString()))); return result; }
public void Delimiters_HasMultipleCorrectDelimiters() { string multipleDelimiterProgram = "//[*][%]\n1*2%3"; CalculationExpressionParser parser = new CalculationExpressionParser(); string[] result = parser.Delimiters(multipleDelimiterProgram); Assert.AreEqual(2, result.Length); CollectionAssert.AreEqual(new[]{"*", "%"}, result); }
public void Delimiters_IsValidFor_MultiCharacterDelimiters() { CalculationExpressionParser parser = new CalculationExpressionParser(); string calcProgram = "//[***]\n1***2***3"; string delimiter = parser.Delimiters(calcProgram)[0]; Assert.AreEqual("***", delimiter); string instructions = parser.InputInstructions(calcProgram); Assert.AreEqual("1***2***3", instructions); }
private static void ValidateSingleCharacterDelimiterExpression(CalculationExpressionParser parser, string expected, string calcProgram) { string[] delimiters = parser.Delimiters(calcProgram); Assert.IsTrue(delimiters.Contains(expected)); }