Как написать тестовый пример doctest с шаблоном значения? - PullRequest
0 голосов
/ 07 января 2020

В doctest, платформе тестирования C ++, мы можем написать:

TEST_SUITE("foo") {

    TEST_CASE_TEMPLATE("bar", T, t1, t2, t3) {
        /* code using template parameter T */
    }

}

, и это работает - если t1, t2, t3 являются типами . Он реализован так, что doctest генерирует код, включающий

template<typename T>
inline void DOCTEST_ANONYMOUS(_DOCTEST_ANON_TMP_)()

, и вызывает эту функцию для аргументов макроса после T. Это, очевидно, не работает для значения аргументов, например, TEST_CASE_TEMPLATE("bar", MyType, v1, v2, v3).

Можем ли мы использовать doctest для создания шаблонов над параметрами цифр c?

1 Ответ

1 голос
/ 07 января 2020

Уродливое решение (без использования каких-либо средств doctest) будет выглядеть следующим образом:

template <typename T, T Value>
struct value_as_type { static constexpr const T value { Value }; };

с последующей заменой

TEST_CASE_TEMPLATE("bar", T, t1, t2, t3) { /*... etc ... */ }

на:

TEST_CASE_TEMPLATE("bar", MyType, 
    value_to_type<MyType, v1>,
    value_to_type<MyType, v2>,
    value_to_type<MyType, v3>)  
{
    constexpr const MyType val { MyType::value };
    /*... etc ... */
}
...