mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-14 11:40:35 +07:00
more registry resolve tests
This commit is contained in:
@@ -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") {
|
||||
|
||||
Reference in New Issue
Block a user