测试环境如下:
packageVersion("testthat")
# [1] ‘3.1.6`
testthat_tolerance()
# [1] 1.490116e-08
但是当我运行它时,它在差值远低于容限时失败:
Gamma <- 0.00020237234
expect_equal(Gamma, 0.0002023723)
Error: Gamma (actual) not equal to 0.0002023723 (expected).
actual: 0.00020237234
expected: 0.00020237230
自己设置容忍度并不能解决问题:
expect_equal(Gamma, 0.0002023723, tolerance = 1e-8)
Error: Gamma (actual) not equal to 0.0002023723 (expected).
actual : 0.00020237234
expected : 0.00020237230`
但是如果我放松容差,它就通过了测试:
expect_equal(Gamma, 0.0002023723, tolerance = 1e-6)
就我的目的而言,1e-6
已经足够好了,但我觉得要么是有bug,要么是我遗漏了什么。
我从文件和控制台运行它,结果相同。
From man page for expect_equal
tolerance:传递给waldo::compare()。如果非null,将忽略小的浮点差异。它使用与all.equal()相同的算法,因此公差通常是相对的(即mean(abs(x - y)/mean(abs(y)) <公差),除非差异非常小,当它变成绝对(即平均值)(abs(x><宽容)。>
所以在你的情况下容忍度可能是相对的