Boost 的数据驱动测试的联接运算符"+"损坏了第一列

Boost's data-driven tests' join operator `+` corrupts first column

本文关键字:一列 坏了 测试 数据驱动 Boost 运算符 损坏      更新时间:2023-10-16

请考虑以下代码:

BOOST_DATA_TEST_CASE(
      sampleTest,
      (data::make(1) ^ data::make(2)) + (data::make(3) ^ data::make(4)),
      var1,
      var2)
{
  std::cout << var1 << "," << var2 << std::endl;
}

我期望的输出是:

1,2
3,4

但是,var1似乎已损坏:

$> ./MyTests --run_test=Tests/sampleTest
Running 2 test cases...
202875304,2
202875304,4
*** No errors detected
$> ./MyTests --run_test=Tests/sampleTest
Running 2 test cases...
83976616,2
83976616,4
*** No errors detected

我做错了什么吗?

这是一个

错误。长话短说:请向库维护者报告。

实际上,zip运算返回一个元组std::tuple<int const&, int const&>

尽管数据集本身当时处于正常活动状态,但元组是在join操作中通过引用返回的......

    sample const&       operator*() const   { return m_first_size > 0 ? *m_it1 : *m_it2; }

正确的解决方法是将数据集概念扩展为不仅具有::sample类型¹,而且还具有::reference类型。这是一个相当具有侵入性的变化。


¹ 奇怪的是目前没有记录