Index: tests/RecordTest.cpp |
diff --git a/tests/RecordTest.cpp b/tests/RecordTest.cpp |
index 2240ae985825ee270525ba51a0299d56f52fdd0f..2a0e615516d01df8391a6fee2a7f32f8d56cbf95 100644 |
--- a/tests/RecordTest.cpp |
+++ b/tests/RecordTest.cpp |
@@ -78,3 +78,28 @@ DEF_TEST(Record, r) { |
#undef APPEND |
+template <typename T> |
+static bool is_aligned(const T* p) { |
+ return (((uintptr_t)p) & (sizeof(T) - 1)) == 0; |
+} |
+ |
+DEF_TEST(Record_Alignment, r) { |
+ SkRecord record; |
+ |
+ // Of course a byte's always aligned. |
+ REPORTER_ASSERT(r, is_aligned(record.alloc<uint8_t>())); |
+ |
+ // (If packed tightly, the rest below here would be off by one.) |
+ |
+ // It happens that the first implementation always aligned to 4 bytes, |
+ // so these two were always correct. |
+ REPORTER_ASSERT(r, is_aligned(record.alloc<uint16_t>())); |
+ REPORTER_ASSERT(r, is_aligned(record.alloc<uint32_t>())); |
+ |
+ // These two are regression tests (void* only on 64-bit machines). |
+ REPORTER_ASSERT(r, is_aligned(record.alloc<uint64_t>())); |
+ REPORTER_ASSERT(r, is_aligned(record.alloc<void*>())); |
+ |
+ // We're not testing beyond sizeof(void*), which is where the current implementation will break. |
+} |
+ |