#include #include #include #include "config.hpp" #include #include "dinkyecs.hpp" #include "components.hpp" using namespace fmt; using std::string; TEST_CASE("basic configuration system", "[config]") { Config config("./tests/config.json"); auto not_found = config["types"]["NOTFOUND"]; REQUIRE(not_found == nullptr); auto test_string = config["types"]["STRING"]; REQUIRE(test_string == L"\u2849█Ω♣"); std::wstring test_wstring = config.wstring("types", "STRING"); REQUIRE(test_wstring == L"\u2849█Ω♣"); wchar_t chr0 = test_wstring[0]; REQUIRE(chr0 == L'\u2849'); auto test_num = config["types"]["NUMBER"]; REQUIRE(test_num == 1234); auto test_float = config["types"]["FLOAT"]; REQUIRE(test_num >= 0.1233f); auto test_obj = config["types"]["OBJECT"]; REQUIRE(test_obj["name"] == "Zed"); } void test_can_ref(Config &ref) { REQUIRE(ref["types"]["OBJECT"]["name"] == "Zed"); } TEST_CASE("can get references of config", "[config]") { Config config("./tests/config.json"); test_can_ref(config); } TEST_CASE("store config in any", "[config]") { auto as_any = std::make_any("./tests/config.json"); Config &cfg = std::any_cast(as_any); REQUIRE(cfg["types"]["NUMBER"] == 1234); } void test_will_live(DinkyECS::World &world) { Config config("./tests/config.json"); world.set_the(config); } TEST_CASE("can go into a world", "[config]") { DinkyECS::World world; test_will_live(world); Config &cfg = world.get_the(); REQUIRE(cfg["types"]["NUMBER"] == 1234); } #include #include #include #include #include #include struct MyData { int x, y, z; std::string tiles; template void serialize(Archive &ar) { ar(x, y, z, tiles); } }; TEST_CASE("test using serialization", "[config]") { { std::ofstream os("cereal.json", std::ios::binary); cereal::JSONOutputArchive oarchive(os); MyData m1{1,2,3, "\u2849█Ω♣"}; MyData m2{5,6,7, "\u2849█Ω♣"}; MyData m3{8,9,10, "\u2849█Ω♣"}; oarchive(m1, m2, m3); } { std::ifstream is("cereal.json", std::ios::binary); cereal::JSONInputArchive iarchive(is); MyData m1, m2, m3; iarchive(m1, m2, m3); REQUIRE(m1.tiles == "\u2849█Ω♣"); REQUIRE(m2.tiles == "\u2849█Ω♣"); REQUIRE(m3.tiles == "\u2849█Ω♣"); } } #include #include #include "tser.hpp" enum class Item : char { RADAR = 'R', TRAP = 'T', ORE = 'O' }; struct Pixel { int x = 0; int y = 0; DEFINE_SERIALIZABLE(Pixel, x, y); }; struct Robot { Pixel point; std::optional item; DEFINE_SERIALIZABLE(Robot, point, item); }; TEST_CASE("test using tser for serialization", "[config]") { auto robot = Robot{ Pixel{3,4}, Item::RADAR}; std::cout << robot << '\n'; std::cout << Robot() << '\n'; tser::BinaryArchive archive; archive.save(robot); std::string_view archive_view = archive.get_buffer(); auto loadedRobot = tser::load(archive_view); REQUIRE(loadedRobot == robot); }