gpt4 book ai didi

r - 如何为 R 包中的 cpp 函数编写测试?

转载 作者:行者123 更新时间:2023-12-04 10:58:15 25 4
gpt4 key购买 nike

为了加速 R 包中的一些函数,我使用 Rcpp 在 cpp 函数中重新编码它们,并成功地将这些 cpp 函数嵌入到这个包中。下一步是测试cpp函数是否可以输出与R中原始函数相同的结果。因此编写测试是必要的。

然而,我被困在了这一步。我已经阅读了一些链接
Testing, R package by Hadley Wickham

CRAN:testthat, page 11 .

我所做的是运行 devtools::use_testthat()创建一个 tests/testthat 目录。然后,运行 use_catch(dir = getwd())添加一个测试文件tests/testthat/test-cpp.R。此时,我想expect_cpp_tests_pass()可能会工作,但只是坚持下去。如果我有名为 add_inflow 的原始函数和 add_inflow_Cpp .如何测试这两个函数是否相等?

最佳答案

?use_catch 的文档试图准确描述 testthat 的测试基础设施如何在这里工作,所以我将其复制为答案:

Calling use_catch() will:

  1. Create a file src/test-runner.cpp, which ensures that the testthat package will understand how to run your package's unit tests,

  2. Create an example test file src/test-example.cpp, which showcases how you might use Catch to write a unit test, and

  3. Add a test file tests/testthat/test-cpp.R, which ensures that testthat will run your compiled tests during invocations of devtools::test() or R CMD check.

C++ unit tests can be added to C++ source files within the src/ directory of your package, with a format similar to R code tested with testthat.

When your package is compiled, unit tests alongside a harness for running these tests will be compiled into your R package, with the C entry point run_testthat_tests(). testthat will use that entry point to run your unit tests when detected.



简而言之,如果您想使用 Catch 编写自己的 C++ 单元测试,您可以按照自动生成的示例 test-example.cpp文件。 testthat将自动运行您的测试,并在常规 devtools::test() 期间报告失败过程。

请注意,Catch 的使用专门用于在 C++ 级别编写单元测试。如果您想编写 R 测试代码,那么 Catch 将与您的用例无关。

您可能将其视为动机的一个包是 icd包裹--见 this file关于如何使用 testthat 编写 Catch 单元测试的一个示例 wrapper 。

关于r - 如何为 R 包中的 cpp 函数编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40989349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com