add fmt module for examples

This commit is contained in:
BlackMATov
2023-01-13 13:46:07 +07:00
parent 39e4bfef37
commit a3b3ffa4ad
6 changed files with 56 additions and 24 deletions

3
.gitmodules vendored
View File

@@ -1,3 +1,6 @@
[submodule "vendors/doctest"] [submodule "vendors/doctest"]
path = develop/vendors/doctest path = develop/vendors/doctest
url = https://github.com/onqtam/doctest url = https://github.com/onqtam/doctest
[submodule "develop/vendors/fmt"]
path = develop/vendors/fmt
url = https://github.com/fmtlib/fmt

View File

@@ -2,7 +2,8 @@ add_library(${PROJECT_NAME}.setup_targets INTERFACE)
add_library(${PROJECT_NAME}::setup_targets ALIAS ${PROJECT_NAME}.setup_targets) add_library(${PROJECT_NAME}::setup_targets ALIAS ${PROJECT_NAME}.setup_targets)
target_link_libraries(${PROJECT_NAME}.setup_targets INTERFACE target_link_libraries(${PROJECT_NAME}.setup_targets INTERFACE
meta.hpp.vendors::doctest) meta.hpp.vendors::doctest
meta.hpp.vendors::fmt)
target_compile_options(${PROJECT_NAME}.setup_targets INTERFACE target_compile_options(${PROJECT_NAME}.setup_targets INTERFACE
$<$<CXX_COMPILER_ID:MSVC>: $<$<CXX_COMPILER_ID:MSVC>:
@@ -14,13 +15,10 @@ target_compile_options(${PROJECT_NAME}.setup_targets INTERFACE
-Wno-c++98-compat -Wno-c++98-compat
-Wno-c++98-compat-pedantic -Wno-c++98-compat-pedantic
-Wno-exit-time-destructors -Wno-exit-time-destructors
-Wno-global-constructors
-Wno-padded -Wno-padded
-Wno-unneeded-internal-declaration
-Wno-unneeded-member-function
-Wno-unused-macros -Wno-unused-macros
-Wno-unused-member-function
-Wno-weak-vtables -Wno-weak-vtables
-Wno-zero-as-null-pointer-constant
>) >)
if(BUILD_WITH_COVERAGE) if(BUILD_WITH_COVERAGE)

View File

@@ -5,4 +5,6 @@
******************************************************************************/ ******************************************************************************/
#include <meta.hpp/meta_all.hpp> #include <meta.hpp/meta_all.hpp>
#include <doctest/doctest.h> #include <doctest/doctest.h>
#include <fmt/core.h>

View File

@@ -8,6 +8,18 @@
namespace namespace
{ {
struct unique_int {
int i{42};
unique_int() = default;
unique_int(unique_int&&) = default;
unique_int& operator=(unique_int&&) = default;
unique_int(const unique_int&) = delete;
unique_int& operator=(const unique_int&) = delete;
};
struct clazz_1 { struct clazz_1 {
static int int_variable; static int int_variable;
static const int const_int_variable; static const int const_int_variable;
@@ -15,8 +27,8 @@ namespace
static int& ref_int_variable; static int& ref_int_variable;
static const int& const_ref_int_variable; static const int& const_ref_int_variable;
static std::unique_ptr<int> unique_int_variable; static unique_int unique_int_variable;
static const std::unique_ptr<int> const_unique_int_variable; static const unique_int const_unique_int_variable;
}; };
int clazz_1::int_variable = 1; int clazz_1::int_variable = 1;
@@ -25,8 +37,8 @@ namespace
int& clazz_1::ref_int_variable = clazz_1::int_variable; int& clazz_1::ref_int_variable = clazz_1::int_variable;
const int& clazz_1::const_ref_int_variable = clazz_1::const_int_variable; const int& clazz_1::const_ref_int_variable = clazz_1::const_int_variable;
std::unique_ptr<int> clazz_1::unique_int_variable = std::make_unique<int>(42); unique_int clazz_1::unique_int_variable;
const std::unique_ptr<int> clazz_1::const_unique_int_variable = std::make_unique<int>(42); const unique_int clazz_1::const_unique_int_variable;
} }
TEST_CASE("meta/meta_states/variable") { TEST_CASE("meta/meta_states/variable") {
@@ -164,19 +176,19 @@ TEST_CASE("meta/meta_states/variable") {
meta::variable vm = clazz_1_type.get_variable("unique_int_variable_as_ptr"); meta::variable vm = clazz_1_type.get_variable("unique_int_variable_as_ptr");
REQUIRE(vm); REQUIRE(vm);
CHECK(vm.get().get_type() == meta::resolve_type<std::unique_ptr<int>*>()); CHECK(vm.get().get_type() == meta::resolve_type<unique_int*>());
CHECK(vm.get_as<std::unique_ptr<int>*>() == std::addressof(clazz_1::unique_int_variable)); CHECK(vm.get_as<unique_int*>() == std::addressof(clazz_1::unique_int_variable));
{ {
auto nv = std::make_unique<int>(11); auto nv = std::make_unique<int>(11);
vm.set(std::move(nv)); vm.set(std::move(nv));
CHECK(*clazz_1::unique_int_variable == 11); CHECK(clazz_1::unique_int_variable.i == 11);
} }
{ {
auto nv = std::make_unique<int>(12); auto nv = std::make_unique<int>(12);
CHECK_THROWS(vm.set(nv)); CHECK_THROWS(vm.set(nv));
CHECK(*clazz_1::unique_int_variable == 11); CHECK(clazz_1::unique_int_variable.i == 11);
} }
} }
@@ -184,20 +196,20 @@ TEST_CASE("meta/meta_states/variable") {
meta::variable vm = clazz_1_type.get_variable("unique_int_variable_as_ref"); meta::variable vm = clazz_1_type.get_variable("unique_int_variable_as_ref");
REQUIRE(vm); REQUIRE(vm);
using ref_t = std::reference_wrapper<std::unique_ptr<int>>; using ref_t = std::reference_wrapper<unique_int>;
CHECK(vm.get().get_type() == meta::resolve_type<ref_t>()); CHECK(vm.get().get_type() == meta::resolve_type<ref_t>());
CHECK(vm.get_as<ref_t>().get() == clazz_1::unique_int_variable); CHECK(&vm.get_as<ref_t>().get() == &clazz_1::unique_int_variable);
{ {
auto nv = std::make_unique<int>(13); auto nv = std::make_unique<int>(13);
vm.set(std::move(nv)); vm.set(std::move(nv));
CHECK(*clazz_1::unique_int_variable == 13); CHECK(clazz_1::unique_int_variable.i == 13);
} }
{ {
auto nv = std::make_unique<int>(14); auto nv = std::make_unique<int>(14);
CHECK_THROWS(vm.set(nv)); CHECK_THROWS(vm.set(nv));
CHECK(*clazz_1::unique_int_variable == 13); CHECK(clazz_1::unique_int_variable.i == 13);
} }
} }
@@ -205,14 +217,14 @@ TEST_CASE("meta/meta_states/variable") {
meta::variable vm = clazz_1_type.get_variable("const_unique_int_variable_as_ptr"); meta::variable vm = clazz_1_type.get_variable("const_unique_int_variable_as_ptr");
REQUIRE(vm); REQUIRE(vm);
CHECK(vm.get().get_type() == meta::resolve_type<const std::unique_ptr<int>*>()); CHECK(vm.get().get_type() == meta::resolve_type<const unique_int*>());
CHECK(vm.get_as<const std::unique_ptr<int>*>() == std::addressof(clazz_1::const_unique_int_variable)); CHECK(vm.get_as<const unique_int*>() == std::addressof(clazz_1::const_unique_int_variable));
{ {
auto nv = std::make_unique<int>(11); auto nv = std::make_unique<int>(11);
CHECK_THROWS(vm.set(nv)); CHECK_THROWS(vm.set(nv));
CHECK_THROWS(vm.set(std::move(nv))); CHECK_THROWS(vm.set(std::move(nv)));
CHECK(*clazz_1::const_unique_int_variable == 42); CHECK(clazz_1::const_unique_int_variable.i == 42);
} }
} }
@@ -220,15 +232,15 @@ TEST_CASE("meta/meta_states/variable") {
meta::variable vm = clazz_1_type.get_variable("const_unique_int_variable_as_ref"); meta::variable vm = clazz_1_type.get_variable("const_unique_int_variable_as_ref");
REQUIRE(vm); REQUIRE(vm);
using ref_t = std::reference_wrapper<const std::unique_ptr<int>>; using ref_t = std::reference_wrapper<const unique_int>;
CHECK(vm.get().get_type() == meta::resolve_type<ref_t>()); CHECK(vm.get().get_type() == meta::resolve_type<ref_t>());
CHECK(vm.get_as<ref_t>().get() == clazz_1::const_unique_int_variable); CHECK(&vm.get_as<ref_t>().get() == &clazz_1::const_unique_int_variable);
{ {
auto nv = std::make_unique<int>(12); auto nv = std::make_unique<int>(12);
CHECK_THROWS(vm.set(nv)); CHECK_THROWS(vm.set(nv));
CHECK_THROWS(vm.set(std::move(nv))); CHECK_THROWS(vm.set(std::move(nv)));
CHECK(*clazz_1::const_unique_int_variable == 42); CHECK(clazz_1::const_unique_int_variable.i == 42);
} }
} }
} }

View File

@@ -10,9 +10,25 @@ add_library(${PROJECT_NAME}::doctest ALIAS ${PROJECT_NAME}.doctest)
target_compile_features(${PROJECT_NAME}.doctest target_compile_features(${PROJECT_NAME}.doctest
PUBLIC cxx_std_20) PUBLIC cxx_std_20)
target_include_directories(${PROJECT_NAME}.doctest target_include_directories(${PROJECT_NAME}.doctest SYSTEM
PUBLIC doctest) PUBLIC doctest)
target_compile_definitions(${PROJECT_NAME}.doctest target_compile_definitions(${PROJECT_NAME}.doctest
PRIVATE DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN PRIVATE DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
INTERFACE DOCTEST_CONFIG_USE_STD_HEADERS) INTERFACE DOCTEST_CONFIG_USE_STD_HEADERS)
#
# fmt
#
add_library(${PROJECT_NAME}.fmt INTERFACE)
add_library(${PROJECT_NAME}::fmt ALIAS ${PROJECT_NAME}.fmt)
target_compile_features(${PROJECT_NAME}.fmt
INTERFACE cxx_std_20)
target_include_directories(${PROJECT_NAME}.fmt SYSTEM
INTERFACE fmt/include)
target_compile_definitions(${PROJECT_NAME}.fmt
INTERFACE FMT_HEADER_ONLY)

1
develop/vendors/fmt vendored Submodule

Submodule develop/vendors/fmt added at a33701196a