Как TDD и полностью протестировать шаблонный код, который принимает переменное количество аргументов и имеет специализацC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как TDD и полностью протестировать шаблонный код, который принимает переменное количество аргументов и имеет специализац

Сообщение Anonymous »

Предположим, я хочу написать функцию, которая возвращает сумму переданных положительных чисел. Просто возвращает 0, если я ничего не передаю.
И я решаю, что хочу передавать аргументы просто как список аргументов и как вектор. Версия списка аргументов просто создает их вектор, а затем передает его векторной версии функции, которая имеет всю ее реализацию.
Вот тестовый пример и реализация функции:

Код: Выделить всё

#include 

template
std::size_t AddNumbers(std::vector Integers) {
auto Sum = std::reduce(Integers.begin(), Integers.end());

return Sum;
}

template
std::size_t AddNumbers(Type... Integers) {
std::vector IntegerSequence{(std::size_t)Integers...};
return AddNumbers(IntegerSequence);
}

TEST_CASE("Sum Test") {
SECTION("When passed no numbers, returns 0") {
auto Sum1 = AddNumbers();
auto Sum2 = AddNumbers(std::vector{});
CHECK(Sum1 == 0);
CHECK(Sum2 == 0);
}

SECTION("When passed 1 number, returns the number") {
auto Sum1 = AddNumbers(1);
auto Sum2 = AddNumbers(std::vector{ 1 });

CHECK(Sum1 == 1);
CHECK(Sum2 == 1);
}

SECTION("When passed 2 numbers, returns the sum of numbers") {
auto Sum1 = AddNumbers(1, 2);
auto Sum2 = AddNumbers(std::vector{ 1, 2 });

CHECK(Sum1 == 3);
CHECK(Sum2 == 3);
}
}
Как видите, тесты полностью дублируются. Я не понимаю, как избавиться от этого дублирования. Это всего лишь пример, но реальный код проекта аналогичен. Если я удалю какой-либо тестовый код, я думаю, что смогу сломать код, поэтому тестирование только невекторной версии и предположение, что она пройдет, недостаточно хороша, по моему мнению. Кроме того, в реальном проекте все сложнее, и мне хотелось бы протестировать все версии.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -arguments
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»