diff --git a/.gitmodules b/.gitmodules index 2ded04f..2cb190d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "external/json"] path = external/json url = https://github.com/nlohmann/json.git +[submodule "external/catch2"] + path = external/catch2 + url = https://github.com/catchorg/Catch2.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 09b0d16..d4dd6fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,12 @@ add_subdirectory(external/spdlog) set(JSON_BuildTests OFF CACHE INTERNAL "") add_subdirectory(external/json) +option(CATCH_INSTALL_DOCS "Install documentation alongside library" OFF) +option(CATCH_INSTALL_EXTRAS "Install extras alongside library" OFF) +add_subdirectory(external/catch2) + +add_subdirectory("Unit testing") + set(COMPILE_FLAGS -pipe -march=skylake # change to native or your architecture. diff --git a/Unit testing/CMakeLists.txt b/Unit testing/CMakeLists.txt new file mode 100644 index 0000000..05cfd12 --- /dev/null +++ b/Unit testing/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 3.19 FATAL_ERROR) + +project(UnitTest CXX) + +set(COMPILE_FLAGS + -pipe + -march=skylake # change to native or your architecture. + -mtune=skylake # same as above + -mrdseed # be careful about this, this is linked to the x86 architecture. + -mrdrnd # same as above + -Wall + -Wextra + -Wpedantic + # -Wpadded + -pedantic + -ffunction-sections + -fdata-sections + -fuse-ld=gold + -funroll-loops + -fdevirtualize-at-ltrans + -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free + ) +set(LINKER_OPTIONS + -Wl,--sort-common,--as-needed,--gc-sections,--strip-all + -fuse-ld=gold + -fdevirtualize-at-ltrans + ) + +set(LINKER_FLAGS + jemalloc + ) + +add_executable(UnitTest adummy.cpp characteristics_tests.cpp) + +set_target_properties(Catch2 UnitTest PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON + CXX_EXTENSIONS OFF + INTERPROCEDURAL_OPTIMIZATION ON + UNITY_BUILD ON) + +target_include_directories(UnitTest PRIVATE ${CMAKE_SOURCE_DIR}/include) +target_compile_definitions(UnitTest PRIVATE ${DEF_COMP}) +target_compile_options(UnitTest PRIVATE ${COMPILE_FLAGS}) +target_link_options(UnitTest PRIVATE ${LINKER_OPTIONS}) +target_link_libraries(UnitTest ${LINKER_FLAGS} Catch2 nlohmann_json::nlohmann_json) diff --git a/Unit testing/adummy.cpp b/Unit testing/adummy.cpp new file mode 100644 index 0000000..2380d6b --- /dev/null +++ b/Unit testing/adummy.cpp @@ -0,0 +1,2 @@ +#define CATCH_CONFIG_MAIN +#include \ No newline at end of file diff --git a/Unit testing/characteristics_tests.cpp b/Unit testing/characteristics_tests.cpp new file mode 100644 index 0000000..4787ac9 --- /dev/null +++ b/Unit testing/characteristics_tests.cpp @@ -0,0 +1,63 @@ +#include +#include "characteristic/adresse.hpp" +#include "characteristic/chance.hpp" +#include "characteristic/endurance.hpp" +#include "characteristic/habilete.hpp" + +using namespace character::characteristic; + +TEST_CASE("Serialize adresse", "[serialize][0]") { + Adresse adresse; + json serializer; + + REQUIRE_NOTHROW(serializer.emplace("adresse", adresse)); + + const auto &tester = serializer.at("adresse"); + + REQUIRE_NOTHROW(tester.at("base") == 1); + REQUIRE_NOTHROW(tester.at("carac") == 0); + REQUIRE_NOTHROW(tester.at("materiel") == 0); + REQUIRE_NOTHROW(tester.at("additional") == 0); +} + +TEST_CASE("Serialize chance", "[serialize][1]") { + Chance chance; + json serializer; + + REQUIRE_NOTHROW(serializer.emplace("chance", chance)); + + const auto &tester = serializer.at("chance"); + + REQUIRE_NOTHROW(tester.at("base") == 3); + REQUIRE_NOTHROW(tester.at("carac") == 0); + REQUIRE_NOTHROW(tester.at("materiel") == 0); + REQUIRE_NOTHROW(tester.at("additional") == 0); +} + +TEST_CASE("Serialize endurance", "[serialize][2]") { + Endurance endurance; + json serializer; + + REQUIRE_NOTHROW(serializer.emplace("endurance", endurance)); + + const auto &tester = serializer.at("endurance"); + + REQUIRE_NOTHROW(tester.at("base") == 2); + REQUIRE_NOTHROW(tester.at("carac") == 0); + REQUIRE_NOTHROW(tester.at("materiel") == 0); + REQUIRE_NOTHROW(tester.at("additional") == 0); +} + +TEST_CASE("Serialize habilete", "[serialize][3]") { + Habilete habilete; + json serializer; + + REQUIRE_NOTHROW(serializer.emplace("habilete", habilete)); + + const auto &tester = serializer.at("habilete"); + + REQUIRE_NOTHROW(tester.at("base") == 2); + REQUIRE_NOTHROW(tester.at("carac") == 0); + REQUIRE_NOTHROW(tester.at("materiel") == 0); + REQUIRE_NOTHROW(tester.at("additional") == 0); +} diff --git a/external/catch2 b/external/catch2 new file mode 160000 index 0000000..216713a --- /dev/null +++ b/external/catch2 @@ -0,0 +1 @@ +Subproject commit 216713a4066b79d9803d374f261ccb30c0fb451f