Answers:
测试数字代码的问题是:(i)您可能并不总是知道确切的输出,并且您现在只能保存计算结果以与以后进行比较-即进行回归测试,以及(ii)由于四舍五入的关系,结果在不同的机器上可能会有少量差异。
要查看Deal.II是如何做到的,请在此处查看:http : //www.dealii.org/developer/development/testsuite.html#regression_tests
最近,我一直在使用googletest来测试我正在研究的几个数字库,并且对此感到非常满意。您可以非常快速地编写相当简单的测试,也可以编写需要数据初始化等的复杂测试。它还提供了(就像我确定很多其他人一样)轻松进行浮点比较而不是按位比较的方法。
对于我们的计算生物学C ++库(Chaste),我们使用http://cxxtest.com/。这使用起来相当简单,效果很好,它提供了一些用于使用assert()
样式语句进行测试的宏。对于科学计算,这些通常是与的简单直接比较TS_ASSERT_EQUALS(a,b)
或与的数值比较TS_ASSERT_DELTA(a,b,tolerance)
。
使用这些基本宏也可以轻松编写额外的宏,从而比较自己选择的矢量/矩阵。在有用的情况下,您还可以检查代码在给定情况下是否抛出适当的警告和错误消息。您可以在以下test
源代码的文件夹中浏览一些示例:https : //chaste.cs.ox.ac.uk/trac/browser/trunk