#include #include namespace { struct X; struct Y; struct A; struct B; struct Z; } // namespace TEST_CASE("look up type in map", "[type map]") { using M = stdx::type_map, stdx::type_pair>; STATIC_REQUIRE(std::is_same_v, X>); STATIC_REQUIRE(std::is_same_v, Y>); } TEST_CASE("look up type not in map", "[type map]") { using M = stdx::type_map, stdx::type_pair>; STATIC_REQUIRE(std::is_same_v, void>); STATIC_REQUIRE(std::is_same_v, int>); } TEST_CASE("look up type in map (by value)", "[type map]") { using M = stdx::type_map, stdx::vt_pair<1, Y>>; STATIC_REQUIRE(std::is_same_v, X>); STATIC_REQUIRE(std::is_same_v, Y>); } TEST_CASE("look up type not in map (by value)", "[type map]") { using M = stdx::type_map, stdx::vt_pair<1, Y>>; STATIC_REQUIRE(std::is_same_v, void>); STATIC_REQUIRE(std::is_same_v, int>); } TEST_CASE("look up value in map (by type)", "[type map]") { using M = stdx::type_map, stdx::tv_pair>; STATIC_REQUIRE(stdx::type_lookup_v == 0); STATIC_REQUIRE(stdx::type_lookup_v == 1); } TEST_CASE("look up value not in map (by type)", "[type map]") { using M = stdx::type_map, stdx::tv_pair>; STATIC_REQUIRE(stdx::type_lookup_v == 0); STATIC_REQUIRE(stdx::type_lookup_v == 2); } TEST_CASE("look up value in map (by value)", "[type map]") { using M = stdx::type_map, stdx::vv_pair<1, 11>>; STATIC_REQUIRE(stdx::value_lookup_v == 10); STATIC_REQUIRE(stdx::value_lookup_v == 11); } TEST_CASE("look up value not in map (by value)", "[type map]") { using M = stdx::type_map, stdx::vv_pair<1, 11>>; STATIC_REQUIRE(stdx::value_lookup_v == 0); STATIC_REQUIRE(stdx::value_lookup_v == 3); } TEST_CASE("reverse look up type in map", "[type map]") { using M = stdx::type_map, stdx::type_pair>; STATIC_REQUIRE(std::is_same_v, A>); STATIC_REQUIRE(std::is_same_v, B>); } TEST_CASE("reverse look up type not in map", "[type map]") { using M = stdx::type_map, stdx::type_pair>; STATIC_REQUIRE(std::is_same_v, void>); STATIC_REQUIRE(std::is_same_v, int>); } TEST_CASE("reverse look up type in map (by value)", "[type map]") { using M = stdx::type_map, stdx::tv_pair>; STATIC_REQUIRE(std::is_same_v, X>); STATIC_REQUIRE(std::is_same_v, Y>); } TEST_CASE("reverse look up type not in map (by value)", "[type map]") { using M = stdx::type_map, stdx::tv_pair>; STATIC_REQUIRE(std::is_same_v, void>); STATIC_REQUIRE( std::is_same_v, int>); } TEST_CASE("reverse look up value in map (by type)", "[type map]") { using M = stdx::type_map, stdx::vt_pair<1, B>>; STATIC_REQUIRE(stdx::reverse_type_lookup_v == 0); STATIC_REQUIRE(stdx::reverse_type_lookup_v == 1); } TEST_CASE("reverse look up value not in map (by type)", "[type map]") { using M = stdx::type_map, stdx::vt_pair<1, B>>; STATIC_REQUIRE(stdx::reverse_type_lookup_v == 0); STATIC_REQUIRE(stdx::reverse_type_lookup_v == 2); } TEST_CASE("reverse look up value in map (by value)", "[type map]") { using M = stdx::type_map, stdx::vv_pair<1, 11>>; STATIC_REQUIRE(stdx::reverse_value_lookup_v == 0); STATIC_REQUIRE(stdx::reverse_value_lookup_v == 1); } TEST_CASE("reverse look up value not in map (by value)", "[type map]") { using M = stdx::type_map, stdx::vv_pair<1, 11>>; STATIC_REQUIRE(stdx::reverse_value_lookup_v == 0); STATIC_REQUIRE(stdx::reverse_value_lookup_v == 3); }