Модульные тесты для кода в папке /src пакета R?

Я вношу свой вклад в пакет R, который широко использует код C для вычислений.

Мы начали писать тесты для функций R с помощью пакета testthat, помещая тесты в inst/tests следуя здесь.

Подходит ли пакет testthat для прямого тестирования функций C (например, без интерфейсов R)? Или мы найдем отдельный пакет тестирования C? Если да, то 1) куда должны идти эти тесты, 2) как мне заставить их работать во время R CMD check и 3) подходит ли какой-либо пакет тестирования C в этом контексте?


person David LeBauer    schedule 27.05.2013    source источник


Ответы (1)


Я нахожу вопрос немного запутанным:

  • Либо вы считаете, что ваш код C поддерживает функции R более высокого уровня, которые вы можете протестировать в R (как вы, кажется, сделали)

  • Или вы считаете, что ваш код C более автономен, и в этом случае вы можете использовать одну из миллионов сред модульного тестирования для C.

Многие пакеты, использующие Rcpp, также используют обширное модульное тестирование либо через RUnit, либо через testthat. Вы могли бы посмотреть на это. Обычно я тестирую на уровне функции R, что часто подразумевает проверку базовой функции C++.

person Dirk Eddelbuettel    schedule 27.05.2013
comment
Существует набор функций R, которые вызывают функции C, и я могу протестировать их из R. Однако есть также функции C, которые никогда не вызываются из R, и мы производим больше таких функций по мере рефакторинга, но на самом деле это не так. не автономная библиотека. - person David LeBauer; 28.05.2013
comment
Я делаю вывод, что написание оболочек R для функций C значительно упрощается с использованием Rcpp на основе Описание пакета Rcpp, в котором указывается структура, позволяющая предоставлять функции и классы C++ на уровне R. Возможно, подход у меня неоптимальный, но мы передаем множество списков разнотипных параметров. - person David LeBauer; 28.05.2013
comment
Если вы почитаете о Rcpp (в частности, о том, что мы называем атрибутами Rcpp), вы увидите, что обертывание функций C (и C++) теперь тривиально и полностью автоматизировано. - person Dirk Eddelbuettel; 28.05.2013