[libc-commits] [libc] 859b4f1 - [NFC][libc] Add Block::PREV_FIELD_SIZE for use in tests
Daniel Thornburgh via libc-commits
libc-commits at lists.llvm.org
Thu Jan 16 15:11:10 PST 2025
Author: Daniel Thornburgh
Date: 2025-01-16T15:11:03-08:00
New Revision: 859b4f193861d837f382a7e27d37dc167d4cc07d
URL: https://github.com/llvm/llvm-project/commit/859b4f193861d837f382a7e27d37dc167d4cc07d
DIFF: https://github.com/llvm/llvm-project/commit/859b4f193861d837f382a7e27d37dc167d4cc07d.diff
LOG: [NFC][libc] Add Block::PREV_FIELD_SIZE for use in tests
Added:
Modified:
libc/src/__support/block.h
libc/test/src/__support/block_test.cpp
libc/test/src/__support/freestore_test.cpp
Removed:
################################################################################
diff --git a/libc/src/__support/block.h b/libc/src/__support/block.h
index ffb8ed5e91b604..20b9f3a42dc647 100644
--- a/libc/src/__support/block.h
+++ b/libc/src/__support/block.h
@@ -358,6 +358,10 @@ class Block {
/// previous block is free.
/// * If the `last` flag is set, the block is the sentinel last block. It is
/// summarily considered used and has no next block.
+
+public:
+ /// Only for testing.
+ static constexpr size_t PREV_FIELD_SIZE = sizeof(prev_);
};
static_assert(alignof(max_align_t) >= 4,
diff --git a/libc/test/src/__support/block_test.cpp b/libc/test/src/__support/block_test.cpp
index a1e88a44ad349d..c2d9833fb94391 100644
--- a/libc/test/src/__support/block_test.cpp
+++ b/libc/test/src/__support/block_test.cpp
@@ -43,7 +43,7 @@ TEST(LlvmLibcBlockTest, CanCreateSingleAlignedBlock) {
reinterpret_cast<uintptr_t>(last) - reinterpret_cast<uintptr_t>(block);
EXPECT_EQ(block->outer_size(), block_outer_size);
EXPECT_EQ(block->inner_size(),
- block_outer_size - sizeof(Block) + sizeof(size_t));
+ block_outer_size - sizeof(Block) + Block::PREV_FIELD_SIZE);
EXPECT_EQ(block->prev_free(), static_cast<Block *>(nullptr));
EXPECT_FALSE(block->used());
}
@@ -75,9 +75,8 @@ TEST(LlvmLibcBlockTest, CannotCreateTooSmallBlock) {
TEST(LlvmLibcBlockTest, CanSplitBlock) {
constexpr size_t kN = 1024;
- constexpr size_t prev_field_size = sizeof(size_t);
// Give the split position a large alignment.
- constexpr size_t kSplitN = 512 + prev_field_size;
+ constexpr size_t kSplitN = 512 + Block::PREV_FIELD_SIZE;
array<byte, kN> bytes;
auto result = Block::init(bytes);
@@ -90,7 +89,8 @@ TEST(LlvmLibcBlockTest, CanSplitBlock) {
auto *block2 = *result;
EXPECT_EQ(block1->inner_size(), kSplitN);
- EXPECT_EQ(block1->outer_size(), kSplitN - prev_field_size + sizeof(Block));
+ EXPECT_EQ(block1->outer_size(),
+ kSplitN - Block::PREV_FIELD_SIZE + sizeof(Block));
EXPECT_EQ(block2->outer_size(), orig_size - block1->outer_size());
EXPECT_FALSE(block2->used());
@@ -223,7 +223,7 @@ TEST(LlvmLibcBlockTest, CanMakeMinimalSizeSecondBlock) {
result = block1->split(Block::prev_possible_block_start(
reinterpret_cast<uintptr_t>(block1->next())) -
reinterpret_cast<uintptr_t>(block1->usable_space()) +
- sizeof(size_t));
+ Block::PREV_FIELD_SIZE);
ASSERT_TRUE(result.has_value());
EXPECT_LE((*result)->outer_size(), sizeof(Block) + alignof(max_align_t));
}
@@ -387,8 +387,7 @@ TEST(LlvmLibcBlockTest, AllocateAlreadyAligned) {
Block *block = *result;
uintptr_t orig_end = reinterpret_cast<uintptr_t>(block) + block->outer_size();
- // Request a size one byte more than the prev_ field.
- constexpr size_t SIZE = sizeof(size_t) + 1;
+ constexpr size_t SIZE = Block::PREV_FIELD_SIZE + 1;
auto [aligned_block, prev, next] =
Block::allocate(block, alignof(max_align_t), SIZE);
diff --git a/libc/test/src/__support/freestore_test.cpp b/libc/test/src/__support/freestore_test.cpp
index 7960d32c8bbf0f..a32badb39b1e6f 100644
--- a/libc/test/src/__support/freestore_test.cpp
+++ b/libc/test/src/__support/freestore_test.cpp
@@ -24,7 +24,7 @@ TEST(LlvmLibcFreeStore, TooSmall) {
optional<Block *> maybeBlock = Block::init(mem);
ASSERT_TRUE(maybeBlock.has_value());
Block *too_small = *maybeBlock;
- maybeBlock = too_small->split(sizeof(size_t));
+ maybeBlock = too_small->split(Block::PREV_FIELD_SIZE);
ASSERT_TRUE(maybeBlock.has_value());
Block *remainder = *maybeBlock;
@@ -43,12 +43,12 @@ TEST(LlvmLibcFreeStore, RemoveBestFit) {
ASSERT_TRUE(maybeBlock.has_value());
Block *smallest = *maybeBlock;
- maybeBlock = smallest->split(sizeof(FreeList::Node) + sizeof(size_t));
+ maybeBlock = smallest->split(sizeof(FreeList::Node) + Block::PREV_FIELD_SIZE);
ASSERT_TRUE(maybeBlock.has_value());
Block *largest_small = *maybeBlock;
- maybeBlock = largest_small->split(sizeof(FreeTrie::Node) + sizeof(size_t) -
- alignof(max_align_t));
+ maybeBlock = largest_small->split(
+ sizeof(FreeTrie::Node) + Block::PREV_FIELD_SIZE - alignof(max_align_t));
ASSERT_TRUE(maybeBlock.has_value());
if (largest_small->inner_size() == smallest->inner_size())
largest_small = smallest;
@@ -86,7 +86,7 @@ TEST(LlvmLibcFreeStore, Remove) {
ASSERT_TRUE(maybeBlock.has_value());
Block *small = *maybeBlock;
- maybeBlock = small->split(sizeof(FreeList::Node) + sizeof(size_t));
+ maybeBlock = small->split(sizeof(FreeList::Node) + Block::PREV_FIELD_SIZE);
ASSERT_TRUE(maybeBlock.has_value());
Block *remainder = *maybeBlock;
More information about the libc-commits
mailing list