/** * @file spitRepoTest.cpp * @author Gustice * @brief */ #include "doctest/doctest.h" #include #include #include "spit_repo.hpp" using namespace spit; using namespace std; struct SomeType { string id; int val{}; int tst{}; string getID() { return id; } }; class SpitRepoFix { protected: SpitRepo sut; }; TEST_CASE_FIXTURE(SpitRepoFix, "Typical use case") { CHECK_EQ(sut.getSize(), 0); CHECK_EQ(sut.hasEntry("obj1"), false); CHECK_EQ(sut.getEntry("obj1"), nullptr); CHECK_THROWS(sut.getEntryRef("obj1")); CHECK_EQ(sut.removeEntry("obj1"), false); // CHECK_EQ(sut.removeEntry(1), false); auto obj1 = make_unique("obj1", 1, 0); sut.addEntry(move(obj1)); { CHECK_EQ(sut.getSize(), 1); CHECK_EQ(sut.hasEntry("obj1"), true); CHECK_EQ(sut.getEntry("obj1")->val, 1); CHECK_EQ(sut.getEntryRef("obj1").val, 1); } auto obj2 = make_unique("obj2", 2, 0); sut.addEntry(move(obj2)); { CHECK_EQ(sut.getSize(), 2); CHECK_EQ(sut.hasEntry("obj2"), true); CHECK_EQ(sut.getEntry("obj2")->val, 2); CHECK_EQ(sut.getEntryRef("obj2").val, 2); } auto obj3 = make_unique("obj3", 3, 0); sut.addEntry(move(obj3)); { CHECK_EQ(sut.getSize(), 3); CHECK_EQ(sut.hasEntry("obj3"), true); CHECK_EQ(sut.getEntry("obj3")->val, 3); CHECK_EQ(sut.getEntryRef("obj3").val, 3); } auto obj4 = make_unique("obj4", 4, 0); sut.addEntry(move(obj4)); { CHECK_EQ(sut.getSize(), 4); CHECK_EQ(sut.hasEntry("obj4"), true); CHECK_EQ(sut.getEntry("obj4")->val, 4); CHECK_EQ(sut.getEntryRef("obj4").val, 4); } { auto *p = const_cast(sut.getEntry("obj3")); auto &r = sut.getEntryRef("obj3"); CHECK_EQ(p->val, 3); CHECK_EQ(r.val, 3); CHECK_EQ(r.tst, 0); p->tst = 20; CHECK_EQ(r.tst, 20); } { const auto & repo = sut.getRepo(); CHECK_EQ(repo.size(), 4); CHECK_EQ(repo.at("obj1")->val, 1); CHECK_EQ(repo.at("obj2")->val, 2); CHECK_EQ(repo.at("obj3")->val, 3); CHECK_EQ(repo.at("obj4")->val, 4); } { CHECK_EQ(sut.removeEntry("obj1"), true); CHECK_EQ(sut.removeEntry("obj3"), true); const auto & repo = sut.getRepo(); CHECK_EQ(sut.getSize(), 2); CHECK_EQ(repo.size(), 2); CHECK_EQ(repo.at("obj2")->val, 2); CHECK_EQ(repo.at("obj4")->val, 4); } auto obj5 = make_unique("obj5", 5, 0); sut.addEntry(move(obj5)); { const auto & repo = sut.getRepo(); CHECK_EQ(sut.getSize(), 3); CHECK_EQ(repo.size(), 3); CHECK_EQ(repo.at("obj2")->val, 2); CHECK_EQ(repo.at("obj4")->val, 4); CHECK_EQ(repo.at("obj5")->val, 5); } { sut.clearEntries(); CHECK_EQ(sut.getSize(), 0); } auto obj6 = make_unique("obj6", 6, 0); sut.addEntry(move(obj6)); { // Still works after clear CHECK_EQ(sut.getSize(), 1); CHECK_EQ(sut.hasEntry("obj6"), true); CHECK_EQ(sut.getEntry("obj6")->val, 6); CHECK_EQ(sut.getEntryRef("obj6").val, 6); } }