Index: test/cctest/test-heap.cc |
diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc |
index a37da264d498e1ef438e36f1c98ce36da109cb2a..e4ae264ed2d8ce913121d969112c4cc069e00f87 100644 |
--- a/test/cctest/test-heap.cc |
+++ b/test/cctest/test-heap.cc |
@@ -1784,6 +1784,39 @@ TEST(TestSizeOfObjects) { |
} |
Hannes Payer (out of office)
2015/05/26 09:22:29
It would be nice to have test for all the aligned
|
+TEST(TestAlignmentCalculations) { |
+ // Maximum fill amounts should be consistent. |
+ int maximum_double_misalignment = kDoubleSize - kPointerSize; |
+ int max_word_fill = Heap::GetMaximumFillToAlign(kWordAligned); |
+ CHECK_EQ(0, max_word_fill); |
+ int max_double_fill = Heap::GetMaximumFillToAlign(kDoubleAligned); |
+ CHECK_EQ(maximum_double_misalignment, max_double_fill); |
+ int max_double_unaligned_fill = Heap::GetMaximumFillToAlign(kDoubleUnaligned); |
+ CHECK_EQ(maximum_double_misalignment, max_double_unaligned_fill); |
+ |
+ Address base = reinterpret_cast<Address>(NULL); |
+ int fill = 0; |
+ |
+ // Word alignment never requires fill. |
+ fill = Heap::GetFillToAlign(base, kWordAligned); |
+ CHECK_EQ(0, fill); |
+ fill = Heap::GetFillToAlign(base + kPointerSize, kWordAligned); |
+ CHECK_EQ(0, fill); |
+ |
+ // No fill is required when address is double aligned. |
+ fill = Heap::GetFillToAlign(base, kDoubleAligned); |
+ CHECK_EQ(0, fill); |
+ // Fill is required if address is not double aligned. |
+ fill = Heap::GetFillToAlign(base + kPointerSize, kDoubleAligned); |
+ CHECK_EQ(maximum_double_misalignment, fill); |
+ // kDoubleUnaligned has the opposite fill amounts. |
+ fill = Heap::GetFillToAlign(base, kDoubleUnaligned); |
+ CHECK_EQ(maximum_double_misalignment, fill); |
+ fill = Heap::GetFillToAlign(base + kPointerSize, kDoubleUnaligned); |
+ CHECK_EQ(0, fill); |
+} |
+ |
+ |
TEST(TestSizeOfObjectsVsHeapIteratorPrecision) { |
CcTest::InitializeVM(); |
HeapIterator iterator(CcTest::heap()); |