jonnung / string-calculator-tdd-kata

string-calculator implementation for tdd practice

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

TDD KATA - String Calculator

TDD 연습을 위해 String Calculator 문제를 TDD로 구현합니다.


구현 문제

  1. 간단한 문자열 계산기인 Add(string numbers) 를 만듭니다.
    1. 이 메소드는 0, 1 ~ 2개 숫자들을 인자로 받고, 그 합계를 반환합니다.
    2. 공백이나 빈문자열은 0으로 취급합니다.
    3. 공백을 시작으로 1 ~ 2개의 숫자들을 전달하는 단순한 테스트 케이스부터 시작합니다.
    4. 최대한 단순하게 구현합니다. (미리 욕심내지 않는다.)
    5. 리펙토링은 모든 테스트가 통과한 다음에 생각합니다.
  2. Add() 메소드로 전달되는 numbers 인자에는 비어있거나, 여러 숫자와 기본 구분자(,)를 포함하고 있습니다. (예: 10,20,,30 이면 60 을 반환하게 된다.)
  3. Add() 메소드는 새로운 구분자로 개행(\n)을 처리할 수 있습니다.
    1. 처리 가능 -> "1\n2,3"
    2. 딱히 의미 없음 -> "1,\n"
  4. 다른 커스텀 구분자를 지원할 수 있습니다.
    1. 기본 구분자에서 커스텀 구분자로 변경하기 위해서는 문자열 시작부터 첫 등장하는 개행(\n)을 기준으로 합니다.
    2. 그 개행(\n)을 기준으로 앞 부분이 슬래시 2개(//)로 시작하는 경우 그 다음 문자가 새로운 구분자가 됩니다. (즉 //[delimiter]\n[numbers...] 같은 패턴이 되며, //;\n1;2 처럼 입력 된다면 ;(세미콜론)이 새로운 구분자가 되고, 결과로 3을 반환해야 한다.)
    3. 당연히 커스텀 구분자의 첫 행은 선택 사항이기 때문에 없는 경우에는 기본 구분자로 동작하게 됩니다.
  5. Add() 메소드는 numbers 인자에 음수값이 포함된 경우 "negatives not allowed" 예외를 발생 시킵니다. 그리고 해당 음수는 합계에 사용되지 않고 무시합니다. (이 때 포함 된 음수값이 많다면 각각 발생한 예외에 대한 에러 메시지를 출력해야 합니다.)
  6. numbers 에 포함된 숫자가 1000보다 큰 경우 무시합니다. (예: 2 + 1001 = 2 )
  7. 커스텀 구분자가 아무리 길어도 허용됩니다. (예: “//[***]\n1***2***3”6을 반환)
  8. 커스텀 구분자는 여러개 선언할 수 있습니다. (예: “//[delim1][delim2]\n[numbers]” -> "//[*][%]\n1*2%3"6을 반환)
    1. 복수 커스텀 구분자가 긴 문자열에 대해 제대로 동작하는지 확인하세요.

요구 사항1. 간단한 문자열 계산기 add(numbers) 기본 동작 정의

  • ,(콤마) 로 구분된 0개 또는 1 ~ 2개 숫자로 구성된 numbers 문자열 인자를 전달 받고, 그 합계 계산해서 반환한다.
  • numbers는 빈 문자열(empty)이거나 공백일 수 있다. 이 경우 0으로 취급한다.

요구 사항2. 여러 숫자 처리

  • numbers의 포함된 숫자들은 2개 이상일 수 있다.

요구 사항3. 새로운 구분자로 개행(new line)을 추가 지원

  • numbers의 숫자들은 개행(\n)을 추가 구분자로 지원한다. (콤마와 혼용 가능)

요구 사항4. 커스텀 구분자 정의

  • numbers 에 등장하는 첫번째 개행(\n)을 기준으로 앞부분이 //[구분자]와 같은 형태인 경우 슬래시 2개를 제외한 부분이 새로운 커스텀 구분자가 된다.

요구 사항5. 음수는 예외 발생

  • numbers에 음수가 포함된 경우 "negatives not allowed" 예외가 발생한다.
  • numbers에 포함된 음수의 개수만큼 "negatives not allowed" 예외에 대한 에러 메시지를 출력한다.
  • 음수는 합계 계산에서 무시된다.

요구 사항6. 1000 보다 큰 수는 무시

  • numbers 에 포함된 숫자 중 1,000 보다 큰 수는 합계에서 제외한다.

요구 사항7. 커스텀 구분자 길이

  • 커스텀 구분자가 여러번 반복된 패턴을 가질 수 있습니다.

요구 사항8. 여러 커스텀 구분자 지원

  • 커스텀 구분자를 여러개 지정할 수 있습니다.

About

string-calculator implementation for tdd practice


Languages

Language:JavaScript 100.0%