Домашнее задание к лекции 5.3 «Разработка через тестирование»

Перед началом работы

  1. Постарайтесь не читать все задания сразу.
  2. Делайте задачи по порядку, одну за раз. Фишка в том, чтобы научиться работать поэтапно.
  3. Тестируйте только корректные входные данные. В рамках данного задания не требуется тестировать невалидные входные данные.

Задача №1

Создайте простой строчный калькулятор при помощи функции add(numbers), где numbers это строка, содержащая число:

  1. Функция может принимать в качестве аргумента строку с цифрами 0, 1 и 2 и должна возвращать их сумму. Например: , 1 или 1,2. В случае пустого аргумента значением будет 0.
  2. Начните с простых тестов на пустой аргумент и затем переходите к одной и двум цифрам.
  3. Решайте задачу как можно проще, пишите тестовые кейсы о которых до этого не задумывались.
  4. Не забывайте проводить рефакторинг кода после каждого пройденного теста.

Задача №2

Добавьте возможность функции add обрабатывать неизвестное количество чисел.

Задача №3

Добавьте функции add возможность обрабатывать перенос строки между числами (не только запятую).

  1. Такой ввод допустим: 1\n2,3 (вернет 6);
  2. Такой ввод не допустим: 1,\n. Нет необходимости это доказывать, просто поясните.

Задача №4

Добавьте поддержку различных разделителей.

  1. При изменении разделителя после него и перед началом аргумента будет содержаться перенос строки: //<разделитель>\n[числа…]. Например, результатом работы функции с аргументом //<;>\n1;2 должно быть число 3 и разделителем по умолчанию будет ;.
  2. Первая строка является опциональной. Все сценарии ввода по прежнему должны поддерживаться.

Задача №5

В случае вызова функции add с отрицательным числом должно бросаться исключение с сообщением Отрицательные числа не допустимы. и далее отрицательное число, которое было введено. Если передано несколько отрицательных чисел, то выбрасить исключение с сообщением, содержащим все недопустимые значения.

Задача №6 (дополнительная)

  1. Числа больше 1000 должны быть проигнорированы. Выражение 2 + 1001 будет равно 2.
  2. Разделители могут быть любой длины при условии соблюдения формата //<разделитель>\n. Например, //<***>\n1***2***3 должно вернуть 6.
  3. Добавьте возможность использовать разные разделители, указанные в формате //<разделитель1><разделитель2>\n. К примеру, //<*><%>\n1*2%3 должно вернуть 6.
  4. Убедитесь, что вы можете поддерживать сценарии, в которых участвует любое количество разделителей с любым количеством символов в каждом.