mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-13 11:17:06 +07:00
fix tests without rtti
This commit is contained in:
@@ -88,7 +88,7 @@ namespace
|
|||||||
namespace meta = meta_hpp;
|
namespace meta = meta_hpp;
|
||||||
|
|
||||||
template < meta::detail::class_kind From, meta::detail::class_kind To, typename Value >
|
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>;
|
using from_void_cv = meta::detail::add_cv_t<From, void>;
|
||||||
from_void_cv* from_void_ptr = dynamic_cast<from_void_cv*>(std::addressof(value));
|
from_void_cv* from_void_ptr = dynamic_cast<from_void_cv*>(std::addressof(value));
|
||||||
REQUIRE(from_void_ptr == meta::ucast<from_void_cv*>(std::addressof(value)));
|
REQUIRE(from_void_ptr == meta::ucast<from_void_cv*>(std::addressof(value)));
|
||||||
@@ -113,7 +113,7 @@ namespace
|
|||||||
}
|
}
|
||||||
|
|
||||||
template < meta::detail::class_kind From, meta::detail::class_kind To, typename Value >
|
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<From, To>(value);
|
check_casts_impl<From, To>(value);
|
||||||
check_casts_impl<const From, const To>(std::as_const(value));
|
check_casts_impl<const From, const To>(std::as_const(value));
|
||||||
}
|
}
|
||||||
@@ -137,6 +137,88 @@ TEST_CASE("meta/meta_utilities/ucast/_") {
|
|||||||
TEST_CASE("meta/meta_utilities/ucast") {
|
TEST_CASE("meta/meta_utilities/ucast") {
|
||||||
namespace meta = meta_hpp;
|
namespace meta = meta_hpp;
|
||||||
|
|
||||||
|
#if defined(META_HPP_NO_RTTI)
|
||||||
|
SUBCASE("1") {
|
||||||
|
{
|
||||||
|
C1 c;
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A1*>(static_cast<A1*>(&c))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B1*>(static_cast<A1*>(&c))->b == 'b');
|
||||||
|
CHECK(meta::ucast<C1*>(static_cast<A1*>(&c))->c == 'c');
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A1*>(static_cast<B1*>(&c))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B1*>(static_cast<B1*>(&c))->b == 'b');
|
||||||
|
CHECK(meta::ucast<C1*>(static_cast<B1*>(&c))->c == 'c');
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A1*>(static_cast<C1*>(&c))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B1*>(static_cast<C1*>(&c))->b == 'b');
|
||||||
|
CHECK(meta::ucast<C1*>(static_cast<C1*>(&c))->c == 'c');
|
||||||
|
}
|
||||||
|
{
|
||||||
|
B1 b;
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A1*>(static_cast<A1*>(&b))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B1*>(static_cast<A1*>(&b))->b == 'b');
|
||||||
|
CHECK_FALSE(meta::ucast<C1*>(static_cast<A1*>(&b)));
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A1*>(static_cast<B1*>(&b))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B1*>(static_cast<B1*>(&b))->b == 'b');
|
||||||
|
CHECK_FALSE(meta::ucast<C1*>(static_cast<B1*>(&b)));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
A1 a;
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A1*>(static_cast<A1*>(&a))->a == 'a');
|
||||||
|
CHECK_FALSE(meta::ucast<B1*>(static_cast<A1*>(&a)));
|
||||||
|
CHECK_FALSE(meta::ucast<C1*>(static_cast<A1*>(&a)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SUBCASE("2") {
|
||||||
|
{
|
||||||
|
F2 f;
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A2*>(static_cast<A2*>(&f))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B2*>(static_cast<A2*>(&f))->b == 'b');
|
||||||
|
CHECK(meta::ucast<C2*>(static_cast<A2*>(&f))->c == 'c');
|
||||||
|
CHECK(meta::ucast<D2*>(static_cast<A2*>(&f))->d == 'd');
|
||||||
|
CHECK(meta::ucast<E2*>(static_cast<A2*>(&f))->e == 'e');
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A2*>(static_cast<C2*>(&f))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B2*>(static_cast<C2*>(&f))->b == 'b');
|
||||||
|
CHECK(meta::ucast<C2*>(static_cast<C2*>(&f))->c == 'c');
|
||||||
|
CHECK(meta::ucast<D2*>(static_cast<C2*>(&f))->d == 'd');
|
||||||
|
CHECK(meta::ucast<E2*>(static_cast<C2*>(&f))->e == 'e');
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A2*>(static_cast<D2*>(&f))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B2*>(static_cast<D2*>(&f))->b == 'b');
|
||||||
|
CHECK(meta::ucast<C2*>(static_cast<D2*>(&f))->c == 'c');
|
||||||
|
CHECK(meta::ucast<D2*>(static_cast<D2*>(&f))->d == 'd');
|
||||||
|
CHECK(meta::ucast<E2*>(static_cast<D2*>(&f))->e == 'e');
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A2*>(static_cast<E2*>(&f))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B2*>(static_cast<E2*>(&f))->b == 'b');
|
||||||
|
CHECK(meta::ucast<C2*>(static_cast<E2*>(&f))->c == 'c');
|
||||||
|
CHECK(meta::ucast<D2*>(static_cast<E2*>(&f))->d == 'd');
|
||||||
|
CHECK(meta::ucast<E2*>(static_cast<E2*>(&f))->e == 'e');
|
||||||
|
}
|
||||||
|
{
|
||||||
|
B2 b;
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A2*>(static_cast<A2*>(&b))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B2*>(static_cast<A2*>(&b))->b == 'b');
|
||||||
|
CHECK_FALSE(meta::ucast<C2*>(static_cast<A2*>(&b)));
|
||||||
|
CHECK_FALSE(meta::ucast<D2*>(static_cast<A2*>(&b)));
|
||||||
|
CHECK_FALSE(meta::ucast<E2*>(static_cast<A2*>(&b)));
|
||||||
|
|
||||||
|
CHECK(meta::ucast<A2*>(static_cast<B2*>(&b))->a == 'a');
|
||||||
|
CHECK(meta::ucast<B2*>(static_cast<B2*>(&b))->b == 'b');
|
||||||
|
CHECK_FALSE(meta::ucast<C2*>(static_cast<B2*>(&b)));
|
||||||
|
CHECK_FALSE(meta::ucast<D2*>(static_cast<B2*>(&b)));
|
||||||
|
CHECK_FALSE(meta::ucast<E2*>(static_cast<B2*>(&b)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
SUBCASE("1") {
|
SUBCASE("1") {
|
||||||
{
|
{
|
||||||
C1 c;
|
C1 c;
|
||||||
@@ -367,4 +449,5 @@ TEST_CASE("meta/meta_utilities/ucast") {
|
|||||||
check_casts<F2, F2>(d);
|
check_casts<F2, F2>(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user