From bbfd458d2d956f8aaa6ad0a4ea2f549efb76d62a Mon Sep 17 00:00:00 2001 From: skypjack Date: Sun, 26 Oct 2025 23:51:18 +0100 Subject: [PATCH] test: more about overloaded meta functions --- test/entt/meta/meta_type.cpp | 56 +++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/test/entt/meta/meta_type.cpp b/test/entt/meta/meta_type.cpp index b4d60ea3c..74c2f1750 100644 --- a/test/entt/meta/meta_type.cpp +++ b/test/entt/meta/meta_type.cpp @@ -157,7 +157,11 @@ struct MetaType: ::testing::Test { .func(&overloaded_func::f)>("f"_hs) .func(&overloaded_func::f)>("f"_hs) .func(&overloaded_func::f)>("f"_hs) - .func(&overloaded_func::f)>("f"_hs); + .func(&overloaded_func::f)>("f"_hs) + .func(&overloaded_func::f)>("cf"_hs) + .func(&overloaded_func::f)>("cf"_hs) + .func(&overloaded_func::f)>("ncf"_hs) + .func(&overloaded_func::f)>("ncf"_hs); entt::meta_factory{} .type("property"_hs) @@ -552,6 +556,56 @@ TEST_F(MetaType, OverloadedFunc) { ASSERT_FALSE(type.invoke("f"_hs, instance, 4, 8.)); } +TEST_F(MetaType, OverloadedFuncConstFirst) { + using namespace entt::literals; + + const auto type = entt::resolve(); + overloaded_func instance{2}; + entt::meta_any res{}; + + ASSERT_TRUE(type.func("cf"_hs)); + + res = type.invoke("cf"_hs, instance, 1); + + ASSERT_TRUE(res); + ASSERT_EQ(res.cast(), 4); + + res = type.invoke("cf"_hs, std::as_const(instance), 1); + + ASSERT_TRUE(res); + ASSERT_EQ(res.cast(), 2); + + res = type.invoke("cf"_hs, overloaded_func{3}, 1); + + ASSERT_TRUE(res); + ASSERT_EQ(res.cast(), 6); +} + +TEST_F(MetaType, OverloadedFuncNonConstFirst) { + using namespace entt::literals; + + const auto type = entt::resolve(); + overloaded_func instance{2}; + entt::meta_any res{}; + + ASSERT_TRUE(type.func("ncf"_hs)); + + res = type.invoke("ncf"_hs, instance, 1); + + ASSERT_TRUE(res); + ASSERT_EQ(res.cast(), 4); + + res = type.invoke("ncf"_hs, std::as_const(instance), 1); + + ASSERT_TRUE(res); + ASSERT_EQ(res.cast(), 2); + + res = type.invoke("ncf"_hs, overloaded_func{3}, 1); + + ASSERT_TRUE(res); + ASSERT_EQ(res.cast(), 6); +} + TEST_F(MetaType, OverloadedFuncOrder) { using namespace entt::literals;