An open API service indexing awesome lists of open source software.

https://github.com/architectv/tdd-kata

πŸ₯· TDD Kata in Golang
https://github.com/architectv/tdd-kata

go golang tdd tdd-kata

Last synced: 5 days ago
JSON representation

πŸ₯· TDD Kata in Golang

Awesome Lists containing this project

README

          

# TDD-kata

[![test](https://github.com/architectv/tdd-kata/actions/workflows/test.yml/badge.svg)](https://github.com/architectv/tdd-kata/actions/workflows/test.yml)
![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/architectv/tdd-kata)
![Lines of code](https://img.shields.io/tokei/lines/github/architectv/tdd-kata)
![Github Repository Size](https://img.shields.io/github/repo-size/architectv/tdd-kata)
![License](https://img.shields.io/badge/license-MIT-green)
![GitHub last commit](https://img.shields.io/github/last-commit/architectv/tdd-kata)

Developed by Roy Osherove - https://osherove.com/tdd-kata-1

## String Calculator

### 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)

Hints:

β€”β€”β€”β€”β€”β€”
- 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

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

### 2. Allow the Add method to handle an unknown amount of numbers

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

### 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)

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

### 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

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

### 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.

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

### 6. Numbers bigger than 1000 should be ignored, so adding 2 + 1001 = 2

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

### 7. Delimiters can be of any length with the following format: β€œ//[delimiter]\n” for example: β€œ//[***]\n1***2***3” should return 6

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

### 8. Allow multiple delimiters like this: β€œ//[delim1][delim2]\n” for example β€œ//[*][%]\n1*2%3” should return 6.

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

### 9. Make sure you can also handle multiple delimiters with length longer than one char.

β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”