diff --git a/xo-arena/utest/DArenaVector.test.cpp b/xo-arena/utest/DArenaVector.test.cpp index dc6a32c9..2deca944 100644 --- a/xo-arena/utest/DArenaVector.test.cpp +++ b/xo-arena/utest/DArenaVector.test.cpp @@ -68,6 +68,48 @@ namespace xo { 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); + } } }