Credit: Roy Osherove
- Solve each set of requirements in order, as you would do for a business case
- Do not look ahead to future requirements. Business requirements expand as the customer requires them: we can't (and shouldn't) plan ahead for every possible scenario
- Do not solve for cases outside of the scope of the requirements. Exceptions are fine when inputs are not catered for within the specification
Spec #1
Create a simple String calculator with a method signature:
int Add(string numbers)
- Start with the simplest test case of an empty string and move to one and two numbers
- Remember to solve things as simply as possible so that you force yourself to write tests you did not think about
- Remember to refactor after each passing test
Spec #2
Allow the Add method to handle an unknown amount of numbers
Spec #3
Allow the Add method to handle new lines between numbers (instead of commas).
- The following input is ok: "1\n2,3" (will equal 6)
- The following input is NOT ok: "1,\n" (not need to prove it - just clarifying). Invalid input may produce unspecified errors.
Spec #4
Support different delimitersTo change a delimiter, the beginning of the string will contain a separate line that looks like this: "//[delimiter]\n[numbers]" for example "//;\n1;2" should return three where the default delimiter is ";".
The first line is optional. All existing scenarios should still be supported
Spec #5
Calling `Add` with a negative number will throw an exception: "negatives not allowed" - and the negative that was passed.If there are multiple negatives, show all of them in the exception message.
STOP HERE if you are a beginner. Continue if you can finish the steps so far in less than 30
minutes.
Spec #6
Numbers bigger than 1000 should be ignored, so adding 2 + 1001 = 2Spec #6
Delimiters can be of any length with the following format: "//[delimiter]\n", for example: "//[***]\n1***2***3" should return 6Spec #7
Allow multiple delimiters like this:"//[delim1][delim2]\n" for example "//[][%]\n12%3" should return 6
- make sure you can also handle multiple delimiters with length longer than one char