/** @file DArenaVector.test.cpp * * @author Roland Conybeare, Jan 2026 **/ #include "xo/arena/DArenaVector.hpp" #include namespace xo { using xo::mm::DArenaVector; using xo::mm::ArenaConfig; using std::byte; namespace ut { TEST_CASE("DArenaVector-tiny", "[arena][DArenaVector]") { ArenaConfig cfg { .name_ = "testarena", .size_ = 1 }; DArenaVector arenavec = DArenaVector::map(cfg); REQUIRE(arenavec.empty()); } TEST_CASE("DArenaVector-push_back-rvalue", "[arena][DArenaVector]") { ArenaConfig cfg { .name_ = "testarena", .size_ = 4096 }; DArenaVector vec = DArenaVector::map(cfg); REQUIRE(vec.empty()); REQUIRE(vec.size() == 0); vec.push_back(1.5); REQUIRE(!vec.empty()); REQUIRE(vec.size() == 1); REQUIRE(vec[0] == 1.5); vec.push_back(2.5); vec.push_back(3.5); REQUIRE(vec.size() == 3); REQUIRE(vec[0] == 1.5); REQUIRE(vec[1] == 2.5); REQUIRE(vec[2] == 3.5); } TEST_CASE("DArenaVector-push_back-lvalue", "[arena][DArenaVector]") { ArenaConfig cfg { .name_ = "testarena", .size_ = 4096 }; DArenaVector vec = DArenaVector::map(cfg); double a = 10.0; double b = 20.0; double c = 30.0; vec.push_back(a); REQUIRE(vec.size() == 1); REQUIRE(vec[0] == 10.0); vec.push_back(b); vec.push_back(c); REQUIRE(vec.size() == 3); REQUIRE(vec[0] == 10.0); REQUIRE(vec[1] == 20.0); REQUIRE(vec[2] == 30.0); } TEST_CASE("DArenaVector-at-valid", "[arena][DArenaVector]") { ArenaConfig cfg { .name_ = "testarena", .size_ = 4096 }; DArenaVector vec = DArenaVector::map(cfg); vec.push_back(100.0); vec.push_back(200.0); vec.push_back(300.0); REQUIRE(vec.at(0) == 100.0); REQUIRE(vec.at(1) == 200.0); REQUIRE(vec.at(2) == 300.0); // test mutability via at() vec.at(1) = 250.0; REQUIRE(vec.at(1) == 250.0); } TEST_CASE("DArenaVector-at-throws", "[arena][DArenaVector]") { ArenaConfig cfg { .name_ = "testarena", .size_ = 4096 }; DArenaVector vec = DArenaVector::map(cfg); // empty vector - any index is invalid REQUIRE_THROWS_AS(vec.at(0), std::out_of_range); vec.push_back(1.0); vec.push_back(2.0); // valid indices work REQUIRE_NOTHROW(vec.at(0)); REQUIRE_NOTHROW(vec.at(1)); // index == size is invalid REQUIRE_THROWS_AS(vec.at(2), std::out_of_range); // index > size is invalid REQUIRE_THROWS_AS(vec.at(100), std::out_of_range); } } } /* end DArenaVector.test.cpp */