xo-umbrella2/xo-alloc2/utest/dp.test.cpp
Roland Conybeare 6a82040d48 git subrepo clone git@github.com:Rconybea/xo-alloc2.git xo-alloc2
subrepo:
  subdir:   "xo-alloc2"
  merged:   "4039c29f"
upstream:
  origin:   "git@github.com:Rconybea/xo-alloc2.git"
  branch:   "main"
  commit:   "4039c29f"
git-subrepo:
  version:  "0.4.9"
  origin:   "???"
  commit:   "???"
2026-06-06 22:01:14 -04:00

107 lines
2.5 KiB
C++

/** @file dp.test.cpp
*
* @author Roland Conybeare, May 2026
**/
#include <xo/testutil/Utest.hpp>
#include "dp.hpp"
#include <xo/alloc2/Allocator.hpp>
#include <xo/alloc2/Arena.hpp>
#include <catch2/catch.hpp>
namespace xo {
using xo::mm::AAllocator;
using xo::mm::DArena;
using xo::mm::ArenaConfig;
namespace {
class Foo {
public:
explicit Foo(uint32_t * p_counter) : p_counter_{p_counter} {}
static constexpr bool is_gc_eligible() { return false; }
~Foo() {
++(*p_counter_);
}
private:
uint32_t * p_counter_ = nullptr;
};
}
namespace ut {
TEST_CASE("dp-1", "[dp]")
{
auto log = Utest::ut_scope();
//ArenaConfig cfg { .name_ = "testarena", .size_ = 1024 };
//DArena arena = DArena::map(cfg);
//auto mm = obj<AAllocator,DArena>(&arena);
uint32_t counter = 0;
Foo foo(&counter);
REQUIRE(counter == 0);
{
dp<Foo> foo_dp(&foo);
REQUIRE(foo_dp);
REQUIRE(foo_dp.data());
REQUIRE(foo_dp.is_gc_eligible() == false);
// foo_dp dtor runs here, increments counter
}
REQUIRE(counter == 1);
}
TEST_CASE("dp-2", "[dp]")
{
auto log = Utest::ut_scope();
uint32_t counter = 0;
Foo foo(&counter);
REQUIRE(counter == 0);
{
dp<Foo> foo_dp(&foo);
REQUIRE(foo_dp);
REQUIRE(foo_dp.data() == &foo);
foo_dp.release();
REQUIRE(!foo_dp);
REQUIRE(!foo_dp.data());
// foo_dp dtor runs here, increments counter
}
REQUIRE(counter == 0);
}
TEST_CASE("dp-DArena", "[dp][DArena]")
{
auto log = Utest::ut_scope();
ArenaConfig cfg { .name_ = "testarena", .size_ = 1024 };
DArena arena = DArena::map(cfg);
//auto mm = obj<AAllocator,DArena>(&arena);
REQUIRE(arena.reserved() > 0);
REQUIRE(arena.is_mapped());
{
dp<DArena> arena_dp(&arena);
REQUIRE(arena_dp);
REQUIRE(arena_dp.data() == &arena);
}
REQUIRE(arena.reserved() == 0);
REQUIRE(!arena.is_mapped());
}
} /*namespace ut*/
} /*namespace xo*/
/* end dp.test.cpp */