more registry resolve tests

This commit is contained in:
BlackMATov
2021-07-05 02:10:08 +07:00
parent 2d27e822f2
commit 61b03b74c4

View File

@@ -68,15 +68,6 @@ TEST_CASE("meta/registry") {
)
);
SUBCASE("get_xxx_by_name") {
CHECK(registry.get_class_by_name("vmath::ivec2"));
CHECK(registry.get_field_by_name("vmath::ivec2::x"));
CHECK(registry.get_function_by_name("vmath::iadd2"));
CHECK(registry.get_method_by_name("vmath::ivec2::dot"));
CHECK(registry.get_namespace_by_name("vmath"));
CHECK(registry.get_variable_by_name("vmath::ivec2::zero"));
}
SUBCASE("class_template") {
CHECK(registry.resolve<ivec2>());
@@ -160,6 +151,150 @@ TEST_CASE("meta/registry") {
SUBCASE("variable_instance") {
CHECK_FALSE(registry.resolve(&ivec3::zero));
}
SUBCASE("resolve/class") {
ivec2 v2;
ivec3 v3;
REQUIRE(registry.resolve<ivec2>());
REQUIRE(registry.resolve(v2));
REQUIRE(registry.resolve(std::as_const(v2)));
REQUIRE(registry.resolve(static_cast<ivec2&&>(v2)));
REQUIRE(registry.resolve<ivec3>());
REQUIRE(registry.resolve(v3));
REQUIRE(registry.resolve(std::as_const(v3)));
REQUIRE(registry.resolve(static_cast<ivec3&&>(v3)));
const meta::class_info v2_info = meta::class_<ivec2>("ivec2");
const meta::class_info v3_info = meta::class_<ivec3>("ivec3");
CHECK(v2_info.fid() != v3_info.fid());
CHECK(v2_info.fid() == registry.resolve<ivec2>()->get_class()->fid());
CHECK(v2_info.fid() == registry.resolve(v2)->get_class()->fid());
CHECK(v2_info.fid() == registry.resolve(std::as_const(v2))->get_class()->fid());
CHECK(v2_info.fid() == registry.resolve(static_cast<ivec2&&>(v2))->get_class()->fid());
CHECK(v3_info.fid() == registry.resolve<ivec3>()->get_class()->fid());
CHECK(v3_info.fid() == registry.resolve(v3)->get_class()->fid());
CHECK(v3_info.fid() == registry.resolve(std::as_const(v3))->get_class()->fid());
CHECK(v3_info.fid() == registry.resolve(static_cast<ivec3&&>(v3))->get_class()->fid());
{
REQUIRE(registry.get_class_by_name("vmath::ivec2"));
REQUIRE(registry.get_class_by_name("vmath::ivec3"));
CHECK(v2_info.fid() == registry.get_class_by_name("vmath::ivec2")->fid());
CHECK(v3_info.fid() == registry.get_class_by_name("vmath::ivec3")->fid());
}
}
SUBCASE("resolve/field") {
REQUIRE(registry.resolve<&ivec2::x>());
REQUIRE(registry.resolve<&ivec2::y>());
CHECK_FALSE(registry.resolve(&ivec2::x));
CHECK_FALSE(registry.resolve(&ivec2::y));
REQUIRE(registry.resolve<&ivec3::x>());
REQUIRE(registry.resolve<&ivec3::y>());
CHECK_FALSE(registry.resolve(&ivec3::x));
CHECK_FALSE(registry.resolve(&ivec3::y));
const meta::field_info v2_x_info = meta::field_<&ivec2::x>("x");
const meta::field_info v2_y_info = meta::field_<&ivec2::y>("y");
CHECK(v2_x_info.fid() != v2_y_info.fid());
const meta::field_info v3_x_info = meta::field_<&ivec3::x>("x");
const meta::field_info v3_y_info = meta::field_<&ivec3::y>("y");
CHECK(v3_x_info.fid() != v3_y_info.fid());
CHECK(v2_x_info.fid() != v3_x_info.fid());
CHECK(v2_y_info.fid() != v3_y_info.fid());
CHECK(v2_x_info.fid() == registry.resolve<&ivec2::x>()->get_field()->fid());
CHECK(v2_y_info.fid() == registry.resolve<&ivec2::y>()->get_field()->fid());
CHECK(v3_x_info.fid() == registry.resolve<&ivec3::x>()->get_field()->fid());
CHECK(v3_y_info.fid() == registry.resolve<&ivec3::y>()->get_field()->fid());
{
REQUIRE(registry.get_field_by_name("vmath::ivec2::x"));
REQUIRE(registry.get_field_by_name("vmath::ivec2::y"));
REQUIRE(registry.get_field_by_name("vmath::ivec3::x"));
REQUIRE(registry.get_field_by_name("vmath::ivec3::y"));
CHECK(v2_x_info.fid() == registry.get_field_by_name("vmath::ivec2::x")->fid());
CHECK(v2_y_info.fid() == registry.get_field_by_name("vmath::ivec2::y")->fid());
CHECK(v3_x_info.fid() == registry.get_field_by_name("vmath::ivec3::x")->fid());
CHECK(v3_y_info.fid() == registry.get_field_by_name("vmath::ivec3::y")->fid());
}
}
SUBCASE("resolve/function") {
REQUIRE(registry.resolve<&iadd2>());
REQUIRE(registry.resolve<&iadd3>());
CHECK_FALSE(registry.resolve(&iadd2));
CHECK_FALSE(registry.resolve(&iadd3));
const meta::function_info iadd2_info = meta::function_<&iadd2>("iadd2");
const meta::function_info iadd3_info = meta::function_<&iadd3>("iadd3");
CHECK(iadd2_info.fid() != iadd3_info.fid());
CHECK(iadd2_info.fid() == registry.resolve<&iadd2>()->get_function()->fid());
CHECK(iadd3_info.fid() == registry.resolve<&iadd3>()->get_function()->fid());
{
REQUIRE(registry.get_function_by_name("vmath::iadd2"));
REQUIRE(registry.get_function_by_name("vmath::iadd3"));
CHECK(iadd2_info.fid() == registry.get_function_by_name("vmath::iadd2")->fid());
CHECK(iadd3_info.fid() == registry.get_function_by_name("vmath::iadd3")->fid());
}
}
SUBCASE("resolve/method") {
REQUIRE(registry.resolve<&ivec2::dot>());
REQUIRE(registry.resolve<&ivec3::dot>());
CHECK_FALSE(registry.resolve(&ivec2::dot));
CHECK_FALSE(registry.resolve(&ivec3::dot));
const meta::method_info v2_dot_info = meta::method_<&ivec2::dot>("dot");
const meta::method_info v3_dot_info = meta::method_<&ivec3::dot>("dot");
CHECK(v2_dot_info.fid() != v3_dot_info.fid());
CHECK(v2_dot_info.fid() == registry.resolve<&ivec2::dot>()->get_method()->fid());
CHECK(v3_dot_info.fid() == registry.resolve<&ivec3::dot>()->get_method()->fid());
{
REQUIRE(registry.get_method_by_name("vmath::ivec2::dot"));
REQUIRE(registry.get_method_by_name("vmath::ivec3::dot"));
CHECK(v2_dot_info.fid() == registry.get_method_by_name("vmath::ivec2::dot")->fid());
CHECK(v3_dot_info.fid() == registry.get_method_by_name("vmath::ivec3::dot")->fid());
}
}
SUBCASE("resolve/variable") {
REQUIRE(registry.resolve<&ivec2::zero>());
REQUIRE(registry.resolve<&ivec3::zero>());
CHECK_FALSE(registry.resolve(&ivec2::zero));
CHECK_FALSE(registry.resolve(&ivec3::zero));
const meta::variable_info v2_zero_info = meta::variable_<&ivec2::zero>("zero");
const meta::variable_info v3_zero_info = meta::variable_<&ivec3::zero>("zero");
CHECK(v2_zero_info.fid() != v3_zero_info.fid());
CHECK(v2_zero_info.fid() == registry.resolve<&ivec2::zero>()->get_variable()->fid());
CHECK(v3_zero_info.fid() == registry.resolve<&ivec3::zero>()->get_variable()->fid());
{
REQUIRE(registry.get_variable_by_name("vmath::ivec2::zero"));
REQUIRE(registry.get_variable_by_name("vmath::ivec3::zero"));
CHECK(v2_zero_info.fid() == registry.get_variable_by_name("vmath::ivec2::zero")->fid());
CHECK(v3_zero_info.fid() == registry.get_variable_by_name("vmath::ivec3::zero")->fid());
}
}
}
TEST_CASE("meta/registry/merge") {