public static void Main()
StringCalculatorTests.RunAllTests();
public class StringCalculator
public int Add(string input)
if(input.Length > 3 && input.Substring(0, 2) == "//")
sequence = input.Substring(4);
var numbers = sequence.Split(symbol);
foreach(string number in numbers)
if(int.TryParse(number, out int result))
if(result < 0) throw new Exception("Negative numbers not allowed!");
if(result > 999) continue;
public static class StringCalculatorTests
public static void RunAllTests()
Console.WriteLine("Test 1 Passed!");
Console.WriteLine("Test 2 Passed!");
Should_Pass_Step_Three();
Console.WriteLine("Test 3 Passed!");
Console.WriteLine("Test 4 Passed!");
Console.WriteLine("Test 5 Passed!");
Console.WriteLine("Test 6 Passed!");
Should_Pass_Step_Seven();
Console.WriteLine("Test 7 Passed!");
Should_Pass_Step_Eight();
Console.WriteLine("Test 8 Passed!");
public static void Should_Pass_Step_One()
var target = new StringCalculator();
var result = target.Add("");
public static void Should_Pass_Step_Two()
var target = new StringCalculator();
var result = target.Add("1");
var result2 = target.Add("3");
Assert.Equal(3, result2);
public static void Should_Pass_Step_Three()
var target = new StringCalculator();
var result = target.Add("1+2");
var result2 = target.Add("3+5");
Assert.Equal(8, result2);
public static void Should_Pass_Step_Four()
var target = new StringCalculator();
var result = target.Add("1+2+3");
var result2 = target.Add("3+5+3+9");
Assert.Equal(20, result2);
public static void Should_Pass_Step_Five()
var target = new StringCalculator();
var result = target.Add("3+3\n+3");
var result2 = target.Add("4+\n5\n+4+4");
Assert.Equal(17, result2);
public static void Should_Pass_Step_Six()
var target = new StringCalculator();
var ex = Assert.Throws<Exception>(() => target.Add("-1+2-3"));
Assert.Equal("Negative numbers not allowed!", ex.Message);
public static void Should_Pass_Step_Seven()
var target = new StringCalculator();
var result = target.Add("1000+1001+2");
public static void Should_Pass_Step_Eight()
var target = new StringCalculator();
var result = target.Add("//,\n11,1,2");
var result2 = target.Add("//@\n1@2@3");
Assert.Equal(14, result);
Assert.Equal(6, result2);