47 Metachunk* metachunk = ::new (memory) Metachunk(size / BytesPerWord, NULL);
48
49 EXPECT_EQ((MetaWord*) metachunk, metachunk->bottom());
50 EXPECT_EQ((uintptr_t*) metachunk + metachunk->size(), metachunk->end());
51
52 // Check sizes
53 EXPECT_EQ(metachunk->size(), metachunk->word_size());
54 EXPECT_EQ(pointer_delta(metachunk->end(), metachunk->bottom(),
55 sizeof (MetaWord*)),
56 metachunk->word_size());
57
58 // Check usage
59 EXPECT_EQ(metachunk->used_word_size(), metachunk->overhead());
60 EXPECT_EQ(metachunk->word_size() - metachunk->used_word_size(),
61 metachunk->free_word_size());
62 EXPECT_EQ(MetachunkTest::top(metachunk), MetachunkTest::initial_top(metachunk));
63 EXPECT_TRUE(metachunk->is_empty());
64
65 // Allocate
66 size_t alloc_size = 64; // Words
67 EXPECT_TRUE(is_size_aligned(alloc_size, Metachunk::object_alignment()));
68
69 MetaWord* mem = metachunk->allocate(alloc_size);
70
71 // Check post alloc
72 EXPECT_EQ(MetachunkTest::initial_top(metachunk), mem);
73 EXPECT_EQ(MetachunkTest::top(metachunk), mem + alloc_size);
74 EXPECT_EQ(metachunk->overhead() + alloc_size, metachunk->used_word_size());
75 EXPECT_EQ(metachunk->word_size() - metachunk->used_word_size(),
76 metachunk->free_word_size());
77 EXPECT_FALSE(metachunk->is_empty());
78
79 // Clear chunk
80 metachunk->reset_empty();
81
82 // Check post clear
83 EXPECT_EQ(metachunk->used_word_size(), metachunk->overhead());
84 EXPECT_EQ(metachunk->word_size() - metachunk->used_word_size(),
85 metachunk->free_word_size());
86 EXPECT_EQ(MetachunkTest::top(metachunk), MetachunkTest::initial_top(metachunk));
87 EXPECT_TRUE(metachunk->is_empty());
|
47 Metachunk* metachunk = ::new (memory) Metachunk(size / BytesPerWord, NULL);
48
49 EXPECT_EQ((MetaWord*) metachunk, metachunk->bottom());
50 EXPECT_EQ((uintptr_t*) metachunk + metachunk->size(), metachunk->end());
51
52 // Check sizes
53 EXPECT_EQ(metachunk->size(), metachunk->word_size());
54 EXPECT_EQ(pointer_delta(metachunk->end(), metachunk->bottom(),
55 sizeof (MetaWord*)),
56 metachunk->word_size());
57
58 // Check usage
59 EXPECT_EQ(metachunk->used_word_size(), metachunk->overhead());
60 EXPECT_EQ(metachunk->word_size() - metachunk->used_word_size(),
61 metachunk->free_word_size());
62 EXPECT_EQ(MetachunkTest::top(metachunk), MetachunkTest::initial_top(metachunk));
63 EXPECT_TRUE(metachunk->is_empty());
64
65 // Allocate
66 size_t alloc_size = 64; // Words
67 EXPECT_TRUE(is_aligned(alloc_size, Metachunk::object_alignment()));
68
69 MetaWord* mem = metachunk->allocate(alloc_size);
70
71 // Check post alloc
72 EXPECT_EQ(MetachunkTest::initial_top(metachunk), mem);
73 EXPECT_EQ(MetachunkTest::top(metachunk), mem + alloc_size);
74 EXPECT_EQ(metachunk->overhead() + alloc_size, metachunk->used_word_size());
75 EXPECT_EQ(metachunk->word_size() - metachunk->used_word_size(),
76 metachunk->free_word_size());
77 EXPECT_FALSE(metachunk->is_empty());
78
79 // Clear chunk
80 metachunk->reset_empty();
81
82 // Check post clear
83 EXPECT_EQ(metachunk->used_word_size(), metachunk->overhead());
84 EXPECT_EQ(metachunk->word_size() - metachunk->used_word_size(),
85 metachunk->free_word_size());
86 EXPECT_EQ(MetachunkTest::top(metachunk), MetachunkTest::initial_top(metachunk));
87 EXPECT_TRUE(metachunk->is_empty());
|