我有一个预处理程序指令列表:
#define __SIZE_TYPE__ long unsigned int
#define __UINT16_TYPE__ short unsigned int
#define __UINT_LEAST8_TYPE__ unsigned char
#define __VERSION__ 4
.
.
现在我正在编写一个cppunit测试用例,它检查这些指令的值如下:
CPPUNIT_ASSERT_EQUAL(4, __VERSION__);
现在我想为 UINT16_TYPE , SIZE_TYPE , UINT_LEAST8_TYPE 编写相同的cppunit断言,以确保它们具有正确的值但是我我没有得到我应该使用哪个cppunit断言?那么,请建议哪个cppunit断言用于此目的?
答案 0 :(得分:0)
按照他们的名字,似乎它们是用于<cstdint>
头文件中定义的“标准”整数的宏。
在这种情况下,__UINT16_TYPE__
应该是无符号的16位值,这很容易测试。你可以这样做。
CPPUNIT_ASSERT_EQUAL(2, sizeof(__UINT16_TYPE__));
这当然依赖于您在基于8位字节的“普通”计算机中。
要检查类型,您可以使用C ++ 11 type-traits,例如std::is_integral
或std::is_unsigned
。
我真的没有看到做这些检查的重点。如果这些宏是由编译器生成的,那么您可以非常确定它们对于您所在的平台是否正确。
答案 1 :(得分:0)
如果您正在使用C ++ 11,请使用std :: is_same检查类型。 http://en.cppreference.com/w/cpp/types/is_same
例如:CPPUNIT_ASSERT(std :: is_same&lt; SIZE_TYPE ,long unsigned int&gt; :: value)
但老实说,我不会在这种检查中看到任何理由。