58 lines
1.2 KiB
C++
58 lines
1.2 KiB
C++
#include "catch.hpp"
|
|
|
|
#include "vtr_vector.h"
|
|
#include "vtr_strong_id.h"
|
|
|
|
#include <ostream>
|
|
|
|
struct test_tag;
|
|
typedef vtr::StrongId<test_tag> TestId;
|
|
|
|
std::ostream& operator<<(std::ostream& os, const TestId id);
|
|
|
|
std::ostream& operator<<(std::ostream& os, const TestId id) {
|
|
os << "TestId(" << size_t(id) << ")";
|
|
return os;
|
|
}
|
|
|
|
TEST_CASE("Basic Ops", "[vtr_vector]") {
|
|
vtr::vector<TestId, int> vec;
|
|
|
|
vec.push_back(1);
|
|
vec.push_back(2);
|
|
vec.push_back(3);
|
|
|
|
REQUIRE(vec.size() == 3);
|
|
REQUIRE(vec[TestId(0)] == 1);
|
|
REQUIRE(vec[TestId(1)] == 2);
|
|
REQUIRE(vec[TestId(2)] == 3);
|
|
|
|
vec.emplace_back(4);
|
|
|
|
REQUIRE(vec.size() == 4);
|
|
REQUIRE(vec[TestId(3)] == 4);
|
|
|
|
REQUIRE(vec.front() == 1);
|
|
REQUIRE(vec.back() == 4);
|
|
}
|
|
|
|
TEST_CASE("Key Access", "[vtr_vector]") {
|
|
vtr::vector<TestId, int> vec;
|
|
|
|
vec.push_back(1);
|
|
vec.push_back(2);
|
|
vec.push_back(3);
|
|
vec.push_back(4);
|
|
|
|
std::vector<TestId> expected_keys = {TestId(0), TestId(1), TestId(2), TestId(3)};
|
|
|
|
auto keys = vec.keys();
|
|
REQUIRE(keys.size() == vec.size());
|
|
|
|
size_t i = 0;
|
|
for (TestId key : keys) {
|
|
REQUIRE(key == expected_keys[i]);
|
|
++i;
|
|
}
|
|
}
|