From 49c0904a4a8cdb6f704a7b91d3d61a0836581168 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 6 Jan 2026 17:39:10 -0500 Subject: [PATCH] xo-arena: + DArena.expand utest --- xo-alloc2/utest/arena.test.cpp | 2 +- xo-arena/include/xo/arena/DArena.hpp | 4 +++ .../include/xo/arena}/print.hpp | 0 xo-arena/utest/DArena.test.cpp | 32 ++++++++++++++++++- 4 files changed, 36 insertions(+), 2 deletions(-) rename {xo-alloc2/include/xo/alloc2 => xo-arena/include/xo/arena}/print.hpp (100%) diff --git a/xo-alloc2/utest/arena.test.cpp b/xo-alloc2/utest/arena.test.cpp index 7ece32c7..ed168330 100644 --- a/xo-alloc2/utest/arena.test.cpp +++ b/xo-alloc2/utest/arena.test.cpp @@ -6,7 +6,7 @@ #include "xo/alloc2/Allocator.hpp" #include "xo/alloc2/alloc/IAllocator_Xfer.hpp" #include "xo/alloc2/arena/IAllocator_DArena.hpp" -#include "xo/alloc2/print.hpp" +#include "xo/arena/print.hpp" #include "xo/arena/padding.hpp" #include #include diff --git a/xo-arena/include/xo/arena/DArena.hpp b/xo-arena/include/xo/arena/DArena.hpp index 3ad10db6..a3253220 100644 --- a/xo-arena/include/xo/arena/DArena.hpp +++ b/xo-arena/include/xo/arena/DArena.hpp @@ -105,6 +105,10 @@ namespace xo { * This is the amount of memory guaranteed to be usable for future allocs from this arena. **/ size_type available() const noexcept { return limit_ - free_; } + /** VM page size for this arena (likely 4KB) **/ + size_type page_z() const noexcept { return page_z_; } + /** Last error encountered by this arena **/ + const AllocError & last_error() const noexcept { return last_error_; } /** True iff address @p addr is owned by this arena, * i.e. falls within [@ref lo_, @ref hi_) diff --git a/xo-alloc2/include/xo/alloc2/print.hpp b/xo-arena/include/xo/arena/print.hpp similarity index 100% rename from xo-alloc2/include/xo/alloc2/print.hpp rename to xo-arena/include/xo/arena/print.hpp diff --git a/xo-arena/utest/DArena.test.cpp b/xo-arena/utest/DArena.test.cpp index 6293c7a2..a94b5b09 100644 --- a/xo-arena/utest/DArena.test.cpp +++ b/xo-arena/utest/DArena.test.cpp @@ -3,12 +3,15 @@ * @author Roland Conybeare, Jan 2026 **/ -#include "xo/arena/DArena.hpp" +#include "DArena.hpp" +#include "print.hpp" +#include #include namespace xo { using xo::mm::DArena; using xo::mm::ArenaConfig; + using xo::xtag; using std::byte; namespace ut { @@ -98,6 +101,33 @@ namespace xo { REQUIRE(arena2.committed_z_ == committed_z); } + TEST_CASE("arena-expand-1", "[arena][DArena]") + { + /* typed allocator a1o */ + ArenaConfig cfg { .name_ = "testarena", + .size_ = 1, + .debug_flag_ = false }; + DArena arena = DArena::map(cfg); + + REQUIRE(arena.available() == 0); + REQUIRE(arena.allocated() == 0); + + size_t z2 = 512; + bool ok = arena.expand(z2); + + INFO(xtag("last_error", arena.last_error())); + + REQUIRE(ok); + + REQUIRE(arena.reserved() % arena.page_z() == 0); + REQUIRE(arena.committed() >= z2); + REQUIRE(arena.committed() % arena.page_z() == 0); + REQUIRE(arena.available() >= z2); + REQUIRE(arena.available() == arena.committed()); + REQUIRE(arena.allocated() == 0); + + } + } }