У меня есть две реализации алгоритма, работающего с массивами и возвращающего одно значение, медленный и наивный, но правильный метод A
и оптимизированный метод B
, который может содержать ошибки в углах пространства входных параметров. Метод B
имеет ветви в зависимости от размера входного массива, и я хотел бы проверить B
против A
для разных размеров входного массива. Оба метода настроены на работу с разными типами.
Я только начинаю использовать googletest в первый раз, но на самом деле я не вижу четкого способа сделать это с помощью прибора (следующее упрощено, есть еще что настроить, чтобы получить тесты собирается, и я также хотел бы запустить другие тесты на данных):
template<typename T, unsigned int length> // type to test on, test array size
class BTest : public ::testing:Test {
public:
T* data; // test data
public:
BTest(); // allocate data, populate data with random elements
~BTest();
T run_method_a_on_data(); // reference: method A implementation
};
// ...
TYPED_TEST_CASE(...) // set up types, see text below
TYPED_TEST(...) {
// test that runs method B on data and compares to run_method_a_on_data()
}
В документации googletest шаг для запуска реальных тестов после определения прибора - это определить типы
typedef ::testing::Types<char, int, unsigned int> MyTypes;
TYPED_TEST_CASE(BTest, MyTypes);
но это показывает ограничение, что для классов, производных от ::testing::Test
, разрешен только один параметр шаблона. Я читаю это правильно? Как можно поступить об этом?