我有一对pack/unpack
函数可以在数据结构上运行。
为了有效地对它们进行单元测试,
我想将此结构置于随机状态,然后验证打包和解包返回原始结构。它可能看起来像这样:
for (int i = 0; i < LOTS_OF_TESTS; ++i){
Struct s;
randomize_bits(s);
CHECK ( s == UnPack(Pack(s)) );
}
是否有一个采用泛型类型的函数,并将所有位随机化?
条件:
- 结构中没有指针
- 可能有基本类型
- 可能有嵌套结构
- 可能有阵列
- 我不担心填充
我以为我可以使用memset的东西,
买我的尝试给我一个运行时异常。
template<typename T>
void randomize_bits(T & t){
for (size_t i = 0; i < sizeof(t); ++i){
std::memset((&t)+i,random_uchar(),1);
}
}
答案 0 :(得分:1)
正如Basile所建议的那样,这解决了我的问题,并正确地迭代了内存。
template<typename T>
void randomize_bits(T & t){
for (size_t i = 0; i < sizeof(t); ++i){
reinterpret_cast<unsigned char*>(&t)[i] = random_uchar();
}
}