Boost的数据驱动测试'join operator` +`破坏了第一列

问题描述 投票:6回答:1

请考虑以下代码:

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

难道我做错了什么?

c++ boost boost-test
1个回答
2
投票

那是一个错误。长话短说:请向图书馆维护人员报告。

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

虽然数据集本身在当时是正常活动的,但是在join操作中通过引用返回元组...:

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

正确的解决方案是将dataset concept扩展到不仅有::sample类型¹而且还有::reference类型。这是一个非常具有侵略性的变化。


¹此时奇怪的是没有记录

© www.soinside.com 2019 - 2024. All rights reserved.