Просмотр исходного кода

test: meta_data::[set/get]_[arity/arg] with multiple values

skypjack 12 часов назад
Родитель
Сommit
a989976f25
2 измененных файлов с 33 добавлено и 2 удалено
  1. 0 2
      TODO
  2. 33 0
      test/entt/meta/meta_data.cpp

+ 0 - 2
TODO

@@ -32,6 +32,4 @@ TODO:
 * make meta_any buffer size configurable (propagate to any)
 * test trivially_destructible optimization
 * finish the imgui viewer/editor!
-* test set/get with multiple values
-* test set/get_arity and set/get_arg
 * document additional arguments to meta setters/getters

+ 33 - 0
test/entt/meta/meta_data.cpp

@@ -53,6 +53,14 @@ struct MetaData: ::testing::Test {
             return value;
         }
 
+        int setter_multi_arg(int val, double add, double mul) {
+            return value = static_cast<int>((val + add) * mul);
+        }
+
+        [[nodiscard]] int getter_multi_arg(int mul) const {
+            return value * mul;
+        }
+
         static int static_setter(setter_getter &type, int value) {
             return type.value = value;
         }
@@ -111,6 +119,7 @@ struct MetaData: ::testing::Test {
             .data<&setter_getter::setter, &setter_getter::getter>("y"_hs)
             .data<&setter_getter::static_setter, &setter_getter::getter>("z"_hs)
             .data<&setter_getter::setter_with_ref, &setter_getter::getter_with_ref>("w")
+            .data<&setter_getter::setter_multi_arg, &setter_getter::getter_multi_arg>("multi"_hs)
             .data<nullptr, &setter_getter::getter>("z_ro"_hs, "readonly")
             .data<nullptr, &setter_getter::value>("value"_hs);
 
@@ -494,6 +503,30 @@ TEST_F(MetaData, SetterGetterReadOnlyDataMember) {
     ASSERT_EQ(data.get(instance).cast<int>(), 0);
 }
 
+TEST_F(MetaData, SetterGetterMultiArg) {
+    using namespace entt::literals;
+
+    auto data = entt::resolve<setter_getter>().data("multi"_hs);
+    setter_getter instance{};
+
+    ASSERT_TRUE(data);
+    ASSERT_EQ(data.set_arity(), 3u);
+    ASSERT_EQ(data.get_arity(), 1u);
+    ASSERT_EQ(data.type(), entt::resolve<int>());
+    ASSERT_EQ(data.set_arg(0u), entt::resolve<int>());
+    ASSERT_EQ(data.set_arg(1u), entt::resolve<double>());
+    ASSERT_EQ(data.set_arg(2u), entt::resolve<double>());
+    ASSERT_EQ(data.get_arg(0u), entt::resolve<int>());
+    ASSERT_FALSE(data.is_const());
+    ASSERT_FALSE(data.is_static());
+    ASSERT_FALSE(data.get(instance));
+    ASSERT_EQ(data.get(instance, 2).cast<int>(), 0);
+    ASSERT_FALSE(data.set(instance, 1));
+    ASSERT_FALSE(data.set(instance, 1, 2.0));
+    ASSERT_TRUE(data.set(instance, 0, 0.5, 2.0));
+    ASSERT_EQ(data.get(instance, 2).cast<int>(), 2);
+}
+
 TEST_F(MetaData, ConstInstance) {
     using namespace entt::literals;