Skip to content

Commit 859b4f1

Browse files
committed
[NFC][libc] Add Block::PREV_FIELD_SIZE for use in tests
1 parent 63f5b80 commit 859b4f1

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

libc/src/__support/block.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,10 @@ class Block {
358358
/// previous block is free.
359359
/// * If the `last` flag is set, the block is the sentinel last block. It is
360360
/// summarily considered used and has no next block.
361+
362+
public:
363+
/// Only for testing.
364+
static constexpr size_t PREV_FIELD_SIZE = sizeof(prev_);
361365
};
362366

363367
static_assert(alignof(max_align_t) >= 4,

libc/test/src/__support/block_test.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ TEST(LlvmLibcBlockTest, CanCreateSingleAlignedBlock) {
4343
reinterpret_cast<uintptr_t>(last) - reinterpret_cast<uintptr_t>(block);
4444
EXPECT_EQ(block->outer_size(), block_outer_size);
4545
EXPECT_EQ(block->inner_size(),
46-
block_outer_size - sizeof(Block) + sizeof(size_t));
46+
block_outer_size - sizeof(Block) + Block::PREV_FIELD_SIZE);
4747
EXPECT_EQ(block->prev_free(), static_cast<Block *>(nullptr));
4848
EXPECT_FALSE(block->used());
4949
}
@@ -75,9 +75,8 @@ TEST(LlvmLibcBlockTest, CannotCreateTooSmallBlock) {
7575

7676
TEST(LlvmLibcBlockTest, CanSplitBlock) {
7777
constexpr size_t kN = 1024;
78-
constexpr size_t prev_field_size = sizeof(size_t);
7978
// Give the split position a large alignment.
80-
constexpr size_t kSplitN = 512 + prev_field_size;
79+
constexpr size_t kSplitN = 512 + Block::PREV_FIELD_SIZE;
8180

8281
array<byte, kN> bytes;
8382
auto result = Block::init(bytes);
@@ -90,7 +89,8 @@ TEST(LlvmLibcBlockTest, CanSplitBlock) {
9089
auto *block2 = *result;
9190

9291
EXPECT_EQ(block1->inner_size(), kSplitN);
93-
EXPECT_EQ(block1->outer_size(), kSplitN - prev_field_size + sizeof(Block));
92+
EXPECT_EQ(block1->outer_size(),
93+
kSplitN - Block::PREV_FIELD_SIZE + sizeof(Block));
9494

9595
EXPECT_EQ(block2->outer_size(), orig_size - block1->outer_size());
9696
EXPECT_FALSE(block2->used());
@@ -223,7 +223,7 @@ TEST(LlvmLibcBlockTest, CanMakeMinimalSizeSecondBlock) {
223223
result = block1->split(Block::prev_possible_block_start(
224224
reinterpret_cast<uintptr_t>(block1->next())) -
225225
reinterpret_cast<uintptr_t>(block1->usable_space()) +
226-
sizeof(size_t));
226+
Block::PREV_FIELD_SIZE);
227227
ASSERT_TRUE(result.has_value());
228228
EXPECT_LE((*result)->outer_size(), sizeof(Block) + alignof(max_align_t));
229229
}
@@ -387,8 +387,7 @@ TEST(LlvmLibcBlockTest, AllocateAlreadyAligned) {
387387
Block *block = *result;
388388
uintptr_t orig_end = reinterpret_cast<uintptr_t>(block) + block->outer_size();
389389

390-
// Request a size one byte more than the prev_ field.
391-
constexpr size_t SIZE = sizeof(size_t) + 1;
390+
constexpr size_t SIZE = Block::PREV_FIELD_SIZE + 1;
392391

393392
auto [aligned_block, prev, next] =
394393
Block::allocate(block, alignof(max_align_t), SIZE);

libc/test/src/__support/freestore_test.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ TEST(LlvmLibcFreeStore, TooSmall) {
2424
optional<Block *> maybeBlock = Block::init(mem);
2525
ASSERT_TRUE(maybeBlock.has_value());
2626
Block *too_small = *maybeBlock;
27-
maybeBlock = too_small->split(sizeof(size_t));
27+
maybeBlock = too_small->split(Block::PREV_FIELD_SIZE);
2828
ASSERT_TRUE(maybeBlock.has_value());
2929
Block *remainder = *maybeBlock;
3030

@@ -43,12 +43,12 @@ TEST(LlvmLibcFreeStore, RemoveBestFit) {
4343
ASSERT_TRUE(maybeBlock.has_value());
4444

4545
Block *smallest = *maybeBlock;
46-
maybeBlock = smallest->split(sizeof(FreeList::Node) + sizeof(size_t));
46+
maybeBlock = smallest->split(sizeof(FreeList::Node) + Block::PREV_FIELD_SIZE);
4747
ASSERT_TRUE(maybeBlock.has_value());
4848

4949
Block *largest_small = *maybeBlock;
50-
maybeBlock = largest_small->split(sizeof(FreeTrie::Node) + sizeof(size_t) -
51-
alignof(max_align_t));
50+
maybeBlock = largest_small->split(
51+
sizeof(FreeTrie::Node) + Block::PREV_FIELD_SIZE - alignof(max_align_t));
5252
ASSERT_TRUE(maybeBlock.has_value());
5353
if (largest_small->inner_size() == smallest->inner_size())
5454
largest_small = smallest;
@@ -86,7 +86,7 @@ TEST(LlvmLibcFreeStore, Remove) {
8686
ASSERT_TRUE(maybeBlock.has_value());
8787

8888
Block *small = *maybeBlock;
89-
maybeBlock = small->split(sizeof(FreeList::Node) + sizeof(size_t));
89+
maybeBlock = small->split(sizeof(FreeList::Node) + Block::PREV_FIELD_SIZE);
9090
ASSERT_TRUE(maybeBlock.has_value());
9191

9292
Block *remainder = *maybeBlock;

0 commit comments

Comments
 (0)