| #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; |
| } |
| } |