tl; dr :我的测试套件中出现错误,在解释或放慢时会出现错误。
所以我有一堆依赖Numeric.GSL.Fitting
来完成繁重工作的函数和一个测试套件来执行这些功能。
当我尝试修复失败的测试用例时,我几乎无法保持理智,但是我的代码中找不到错误。
从QuickCheck
中取出失败的案例并检查结果显示出差异,但这对于嘈杂的拟合是可取的。
有一次,我只是试图在 ghci 中运行一个测试用例,并且发现,令我惊讶的是,所有100次迭代都通过了。难倒,我为其他失败的测试做了同样的事情,并发现他们在解释时都通过了。
凭借这些知识,我删除了任何我能想到的在编译代码中有所不同的内容(即-O0
,删除了fast-math
),但无济于事。
我注意到的第二件事是,当我traceShowId
在每次迭代中拟合的结果时,测试实际上通过了。
这似乎暗示了一个问题,当它以不同的时间运行时消失(ghci较慢,跟踪减慢速度)。 Numeric.GSL.Fitting
中的FFI调用是safe
,因此这不应该是一个问题。
你的猜测和我的一样好......但有没有人知道这可能是什么原因?