Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/akhansari/stringcalculatorkata
https://github.com/akhansari/stringcalculatorkata
fsharp kata pbt
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/akhansari/stringcalculatorkata
- Owner: akhansari
- Created: 2022-04-29T00:40:31.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2022-05-04T16:57:21.000Z (almost 3 years ago)
- Last Synced: 2024-11-08T19:51:37.929Z (3 months ago)
- Topics: fsharp, kata, pbt
- Language: F#
- Homepage:
- Size: 5.86 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# String Calculator Kata
Source: https://kata-log.rocks/string-calculator-kata
F# + Property based testing
## Incremental kata
It’s an incremental kata to simulate a real business situation: start of by reading the section 1 and completing it, then go onto section 2, and when you have finished that, look at section 3, etc.
### Step 1
Create a simple String calculator with a method signature:
```
int Add(string numbers)
```
The method can take up to two numbers, separated by commas, and will return their sum.For example `""` or `"1"` or `"1,2"` as inputs.
For an empty string it will return 0.
### Step 2
Allow the Add method to handle an unknown amount of numbers.
### Step 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)
### Step 4
Support different delimiters:
To 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.
### Step 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.
### Step 6
Numbers bigger than 1000 should be ignored, so adding 2 + 1001 = 2
### Step 7
Delimiters can be of any length with the following format: `"//[delimiter]\n"` for example: `"//[***]\n1***2***3"` should return 6.
### Step 8
Allow multiple delimiters like this: `"//[delim1][delim2]\n"` for example `"//[*][%]\n1*2%3"` should return 6.
### Step 9
Make sure you can also handle multiple delimiters with length longer than one char.