【问题标题】:Formatting for failure output of BOOST_CHECK_CLOSE?BOOST_CHECK_CLOSE 失败输出的格式化?
【发布时间】:2010-12-03 18:53:58
【问题描述】:

我正在使用 boost 测试框架向遗留代码添加测试。

一个这样的测试可能是

double expectedPrice = /*...local computation*/
BOOST_CHECK_CLOSE(expectedPrice, object->price, ACCURACY_THRESHOLD);

其中 expectedPrice 是本地计算的双精度值,并且对象是从被测系统中检索的。

error in "MyTest": difference{0.21097%} between expectedPrice{4.7300000000000004} and object->price{4.7400000000000002} exceeds 1.0000000000000001e-05%

当然,考虑到所有小数,这有点难以阅读。鉴于我使用的是裸双打而不是其他类型,有什么方法可以更好/不同地格式化测试输出?

【问题讨论】:

  • @Martin - 他们绝对都是双打。更大的阈值对此有何帮助?它们确实不匹配 4.73 和 4.74 - 我只是在寻找更具可读性的输出......

标签: c++ unit-testing boost


【解决方案1】:

这是已知问题。用已知的解决方案。只是有点难以实施,尽管我仍然希望在某个时候这样做。同时,无论您的 iostream 库产生什么输出,您都会陷入困境。

【讨论】:

  • “已知解决方案” - 我可以在我的代码中实现吗?或者这是众所周知的提升人们并且图书馆需要实施的?
  • @sdg 这是库可以实现的东西。本质上,有一种算法可以始终正确地打印浮点值。它既不简单,也不是很高效,但它可以很好地用于测试框架(与大多数 iostream 库使用的算法不同,后者更快,但容易出现 0001 或 999999 尾部)。
  • Gennadly 很可能意味着事实上的标准 dtoa() 算法:netlib.org/fp/dtoa.c
【解决方案2】:

你可以试试:

cout

【讨论】:

  • 谢谢 - 尝试过,但没有改变。我认为 boost 正在使用其他东西...
  • 从代码上看,只是使用了操作符
猜你喜欢
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 2012-10-15
  • 1970-01-01
相关资源
最近更新 更多