From 29a823aa2f4785b9b88bbb8a6534951a45caa0c6 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Fri, 10 Mar 2023 18:08:58 +0700 Subject: [PATCH] fix tests without rtti --- develop/untests/meta_utilities/cast_tests.cpp | 87 ++++++++++++++++++- 1 file changed, 85 insertions(+), 2 deletions(-) diff --git a/develop/untests/meta_utilities/cast_tests.cpp b/develop/untests/meta_utilities/cast_tests.cpp index 75f57fb..2a92029 100644 --- a/develop/untests/meta_utilities/cast_tests.cpp +++ b/develop/untests/meta_utilities/cast_tests.cpp @@ -88,7 +88,7 @@ namespace namespace meta = meta_hpp; template < meta::detail::class_kind From, meta::detail::class_kind To, typename Value > - void check_casts_impl(Value& value) { + [[maybe_unused]] void check_casts_impl(Value& value) { using from_void_cv = meta::detail::add_cv_t; from_void_cv* from_void_ptr = dynamic_cast(std::addressof(value)); REQUIRE(from_void_ptr == meta::ucast(std::addressof(value))); @@ -113,7 +113,7 @@ namespace } template < meta::detail::class_kind From, meta::detail::class_kind To, typename Value > - void check_casts(Value& value) { + [[maybe_unused]] void check_casts(Value& value) { check_casts_impl(value); check_casts_impl(std::as_const(value)); } @@ -137,6 +137,88 @@ TEST_CASE("meta/meta_utilities/ucast/_") { TEST_CASE("meta/meta_utilities/ucast") { namespace meta = meta_hpp; +#if defined(META_HPP_NO_RTTI) + SUBCASE("1") { + { + C1 c; + + CHECK(meta::ucast(static_cast(&c))->a == 'a'); + CHECK(meta::ucast(static_cast(&c))->b == 'b'); + CHECK(meta::ucast(static_cast(&c))->c == 'c'); + + CHECK(meta::ucast(static_cast(&c))->a == 'a'); + CHECK(meta::ucast(static_cast(&c))->b == 'b'); + CHECK(meta::ucast(static_cast(&c))->c == 'c'); + + CHECK(meta::ucast(static_cast(&c))->a == 'a'); + CHECK(meta::ucast(static_cast(&c))->b == 'b'); + CHECK(meta::ucast(static_cast(&c))->c == 'c'); + } + { + B1 b; + + CHECK(meta::ucast(static_cast(&b))->a == 'a'); + CHECK(meta::ucast(static_cast(&b))->b == 'b'); + CHECK_FALSE(meta::ucast(static_cast(&b))); + + CHECK(meta::ucast(static_cast(&b))->a == 'a'); + CHECK(meta::ucast(static_cast(&b))->b == 'b'); + CHECK_FALSE(meta::ucast(static_cast(&b))); + } + { + A1 a; + + CHECK(meta::ucast(static_cast(&a))->a == 'a'); + CHECK_FALSE(meta::ucast(static_cast(&a))); + CHECK_FALSE(meta::ucast(static_cast(&a))); + } + } + + SUBCASE("2") { + { + F2 f; + + CHECK(meta::ucast(static_cast(&f))->a == 'a'); + CHECK(meta::ucast(static_cast(&f))->b == 'b'); + CHECK(meta::ucast(static_cast(&f))->c == 'c'); + CHECK(meta::ucast(static_cast(&f))->d == 'd'); + CHECK(meta::ucast(static_cast(&f))->e == 'e'); + + CHECK(meta::ucast(static_cast(&f))->a == 'a'); + CHECK(meta::ucast(static_cast(&f))->b == 'b'); + CHECK(meta::ucast(static_cast(&f))->c == 'c'); + CHECK(meta::ucast(static_cast(&f))->d == 'd'); + CHECK(meta::ucast(static_cast(&f))->e == 'e'); + + CHECK(meta::ucast(static_cast(&f))->a == 'a'); + CHECK(meta::ucast(static_cast(&f))->b == 'b'); + CHECK(meta::ucast(static_cast(&f))->c == 'c'); + CHECK(meta::ucast(static_cast(&f))->d == 'd'); + CHECK(meta::ucast(static_cast(&f))->e == 'e'); + + CHECK(meta::ucast(static_cast(&f))->a == 'a'); + CHECK(meta::ucast(static_cast(&f))->b == 'b'); + CHECK(meta::ucast(static_cast(&f))->c == 'c'); + CHECK(meta::ucast(static_cast(&f))->d == 'd'); + CHECK(meta::ucast(static_cast(&f))->e == 'e'); + } + { + B2 b; + + CHECK(meta::ucast(static_cast(&b))->a == 'a'); + CHECK(meta::ucast(static_cast(&b))->b == 'b'); + CHECK_FALSE(meta::ucast(static_cast(&b))); + CHECK_FALSE(meta::ucast(static_cast(&b))); + CHECK_FALSE(meta::ucast(static_cast(&b))); + + CHECK(meta::ucast(static_cast(&b))->a == 'a'); + CHECK(meta::ucast(static_cast(&b))->b == 'b'); + CHECK_FALSE(meta::ucast(static_cast(&b))); + CHECK_FALSE(meta::ucast(static_cast(&b))); + CHECK_FALSE(meta::ucast(static_cast(&b))); + } + } +#else SUBCASE("1") { { C1 c; @@ -367,4 +449,5 @@ TEST_CASE("meta/meta_utilities/ucast") { check_casts(d); } } +#endif }