gpt4 book ai didi

c++ - cppunit 断言失败时如何显示十六进制值

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:28 26 4
gpt4 key购买 nike

我使用 CPPUNIT_ASSERT_EQUAL(a, b) 来检查值 a 和 b。 a 和 b 是 unsigned char 类型。因此,当此断言失败时,它将显示预期值和实际值。因为类型是unsigned char,所以期望值和实际值会显示为字符。例如,35 将显示为#。但这不是我想要的。当然, CPPUNIT_ASSERT_EQUAL((int)a, (int)b) 可能是一个解决方案,但它看起来很奇怪。另外,如果这些值显示为十六进制格式会更好。但我不知道如何达到这一点。如果有人给出答案,我们将不胜感激。

最佳答案

我认为实现此效果的唯一方法是将 a 和/或 b 调整为合适的类型,该类型可以进行所需的比较,但格式不同于无符号字符。这可能看起来像这样:

template <typename T>
struct as_hex_t
{
as_hex_t(T const& value): d_value(value) {}
T const& d_value;
};
bool operator== (as_hex_t<T> const& v0, as_hex_t<T> const& v1) {
return v0.d_value == v1.d_value;
}
std::ostream& operator<< (std::ostream& out, as_hex_t const& value) {
return out << std::hex << unsigned(value.d_value) << std::dec;
}
template <typenane T>
as_hex_t<T> as_hex(T const& val) { return as_hex_t<T>(val); }

CPPUNIT_ASSERT_EQUAL(as_hex(a), as_hex(b));

显然,适配值的类型只需要在合适的地方定义一次,就可以进入合适的宏。我不知道 CPPUNIT,但我可以想象某处存在这样的东西。

关于c++ - cppunit 断言失败时如何显示十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12967948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com