具有不同字节序的分支中的代码覆盖率

时间:2014-02-26 21:51:54

标签: c code-coverage endianness

假设你有一些代码:

if (endianness == ENDIAN_LITTLE)
{
  // Do little-endian code here
}
else
{
  // Do big-endian code here
}

对于如何在同一系统上进行某些单元测试(比特或小端),是否有一些关于如何覆盖两个分支的良好模式?

1 个答案:

答案 0 :(得分:0)

long some_number;
memcpy(&some_number, "\x01\x23\x45\x67", 4);
check(some_number, 0x1234567, ENDIAN_BIG);
memcpy(&some_number, "\x67\x45\x23\x01", 4);
check(some_number, 0x1234567, ENDIAN_LITTLE);

警告:这可能是未定义的行为(我必须检查我现在懒得做的标准),因为它严重依赖于a)长4个字节和b)指针转换期间发生的事情。但是,如果编译器没有选择完全优化UD,那么这将完成您期望的操作。如果它工作正常,你可以,如果它不起作用,它可能仍然是由于编译器的行为。