Try to fix incorrect 64-bit alignment
Added unit tests for alignment macros. Fixes #418
This commit is contained in:
parent
3ede21c356
commit
311b48224f
@ -238,13 +238,13 @@
|
|||||||
\param x pointer to align
|
\param x pointer to align
|
||||||
|
|
||||||
Some machines require strict data alignment. Currently the default uses 4 bytes
|
Some machines require strict data alignment. Currently the default uses 4 bytes
|
||||||
alignment. User can customize by defining the RAPIDJSON_ALIGN function macro.,
|
alignment. User can customize by defining the RAPIDJSON_ALIGN function macro.
|
||||||
*/
|
*/
|
||||||
#ifndef RAPIDJSON_ALIGN
|
#ifndef RAPIDJSON_ALIGN
|
||||||
#if RAPIDJSON_64BIT == 1
|
#if RAPIDJSON_64BIT == 1
|
||||||
#define RAPIDJSON_ALIGN(x) ((x + 7u) & ~7u)
|
#define RAPIDJSON_ALIGN(x) (((x) + static_cast<uint64_t>(7u)) & ~static_cast<uint64_t>(7u))
|
||||||
#else
|
#else
|
||||||
#define RAPIDJSON_ALIGN(x) ((x + 3u) & ~3u)
|
#define RAPIDJSON_ALIGN(x) (((x) + 3u) & ~3u)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -61,3 +61,23 @@ TEST(Allocator, MemoryPoolAllocator) {
|
|||||||
EXPECT_LE(a.Size(), a.Capacity());
|
EXPECT_LE(a.Size(), a.Capacity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Allocator, Alignment) {
|
||||||
|
#if RAPIDJSON_64BIT == 1
|
||||||
|
EXPECT_EQ(RAPIDJSON_UINT64_C2(0x00000000, 0x00000000), RAPIDJSON_ALIGN(0));
|
||||||
|
for (uint64_t i = 1; i < 8; i++) {
|
||||||
|
EXPECT_EQ(RAPIDJSON_UINT64_C2(0x00000000, 0x00000008), RAPIDJSON_ALIGN(i));
|
||||||
|
EXPECT_EQ(RAPIDJSON_UINT64_C2(0x00000000, 0x00000010), RAPIDJSON_ALIGN(RAPIDJSON_UINT64_C2(0x00000000, 0x00000008) + i));
|
||||||
|
EXPECT_EQ(RAPIDJSON_UINT64_C2(0x00000001, 0x00000000), RAPIDJSON_ALIGN(RAPIDJSON_UINT64_C2(0x00000000, 0xFFFFFFF8) + i));
|
||||||
|
EXPECT_EQ(RAPIDJSON_UINT64_C2(0xFFFFFFFF, 0xFFFFFFF8), RAPIDJSON_ALIGN(RAPIDJSON_UINT64_C2(0xFFFFFFFF, 0xFFFFFFF0) + i));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
EXPECT_EQ(0u, RAPIDJSON_ALIGN(0u));
|
||||||
|
for (uint32_t i = 1; i < 4; i++) {
|
||||||
|
EXPECT_EQ(4u, RAPIDJSON_ALIGN(i));
|
||||||
|
EXPECT_EQ(8u, RAPIDJSON_ALIGN(4u + i));
|
||||||
|
EXPECT_EQ(0xFFFFFFF8u, RAPIDJSON_ALIGN(0xFFFFFFF4u + i));
|
||||||
|
EXPECT_EQ(0xFFFFFFFCu, RAPIDJSON_ALIGN(0xFFFFFFF8u + i));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user