c++ - 提升测试无法找到自定义打印

标签 c++ printing boost-test

由于某些原因 boost::test 无法编译以下代码

#define BOOST_TEST_MODULE EPUTests

#include <iostream>
#include <boost/test/unit_test.hpp>

using epu8 = uint8_t __attribute__((vector_size(16)));

std::ostream &operator<<(std::ostream &stream, epu8 const &term) {
    stream << "[" << unsigned(term[0]);
    for (unsigned i = 1; i < 16; ++i)
        stream << "," << unsigned(term[i]);
    stream << "]";
    return stream;
}

bool failtest(epu8 x) { return false; }


//****************************************************************************//
BOOST_AUTO_TEST_SUITE(EPU8_test)

BOOST_AUTO_TEST_CASE(EPU8_equal) {
    epu8 x {};
    BOOST_CHECK_PREDICATE(failtest, (x));
}

BOOST_AUTO_TEST_SUITE_END()
//****************************************************************************//

错误信息是

In file included from /usr/include/boost/test/tools/floating_point_comparison.hpp:21:0,
             from /usr/include/boost/test/tools/old/impl.hpp:21,
             from /usr/include/boost/test/test_tools.hpp:46,
             from /usr/include/boost/test/unit_test.hpp:18,
             from boost_test_epu.cpp:4:
/usr/include/boost/test/tools/detail/print_helper.hpp: In instantiation of 'struct boost::test_tools::tt_detail::print_log_value<__vector(16) unsigned char>':
/usr/include/boost/test/tools/detail/print_helper.hpp:178:5:   required from 'std::ostream& boost::test_tools::tt_detail::operator<<(std::ostream&, const boost::test_tools::tt_detail::print_helper_t<T>&) [with T = __vector(16) unsigned char; std::ostream = std::basic_ostream<char>]'
/usr/include/boost/test/utils/lazy_ostream.hpp:66:29:   required from 'std::ostream& boost::unit_test::lazy_ostream_impl<PrevType, T, StorageT>::operator()(std::ostream&) const [with PrevType = boost::unit_test::lazy_ostream; T = boost::test_tools::tt_detail::print_helper_t<__vector(16) unsigned char>; StorageT = const boost::test_tools::tt_detail::print_helper_t<__vector(16) unsigned char>&; std::ostream = std::basic_ostream<char>]'
boost_test_epu.cpp:29:1:   required from here
/usr/include/boost/test/tools/detail/print_helper.hpp:47:5: error: static assertion failed: Type has to implement operator<< to be printable
 BOOST_STATIC_ASSERT_MSG( (boost::has_left_shift<std::ostream,T>::value),

我知道 g++ 提示我的 epu8 类型不可打印。但是我知道这是因为改变

    BOOST_CHECK_PREDICATE(failtest, (x));

通过

    std::cout << x << std::endl;
    BOOST_CHECK(failtest(x));

按预期工作并按 vector 变量正确打印。

不同版本的clang++和g++报同样的错误

我做错了什么?

最佳答案

BOOST::test 要求控制台输出运算符<<在std命名空间中

namespace std
{
    ostream &operator<<(...)
    ...
}

关于c++ - 提升测试无法找到自定义打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50957237/

相关文章:

c++ - 强制未使用的函数在共享库中导出

c++ - 英特尔 TSX 硬件事务内存 非事务线程看到什么?

c++ - Boost 测试库使用不同的 "parameters"运行套件两次

python - PI 的位数不同

python - 当我的函数没有接收到参数时,我如何告诉它做一些特定的事情?

c++ - 有没有办法并行运行 C++ 单元测试测试?

c++ - 如何使用升压单元测试打印测试摘要

c++ - 通过串联创建原始字符串时,是否会还原三字母替换?

c++ - 如何使用 C++ 监视文本文件更改?难度 : No . NET

安卓驱动开发