129 lines
3.3 KiB
C++
129 lines
3.3 KiB
C++
/**
|
|
* @file spitRepoTest.cpp
|
|
* @author Gustice
|
|
* @brief
|
|
*/
|
|
|
|
#include "doctest/doctest.h"
|
|
#include <fmt/core.h>
|
|
#include <iostream>
|
|
|
|
#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<SomeType> 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<SomeType>("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<SomeType>("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<SomeType>("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<SomeType>("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<SomeType *>(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<SomeType>("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<SomeType>("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);
|
|
}
|
|
|
|
}
|