diff --git a/libs/type_index/test/type_index_test.cpp b/libs/type_index/test/type_index_test.cpp index c7a5e1a..bd0a3df 100644 --- a/libs/type_index/test/type_index_test.cpp +++ b/libs/type_index/test/type_index_test.cpp @@ -18,7 +18,7 @@ BOOST_AUTO_TEST_CASE(names_matches_type_id) using namespace boost; BOOST_CHECK_EQUAL(type_id().name_demangled(), "int"); BOOST_CHECK_EQUAL(type_id().name_demangled(), "double"); - + BOOST_CHECK_EQUAL(type_id().name(), type_id().name()); BOOST_CHECK_NE(type_id().name(), type_id().name()); BOOST_CHECK_NE(type_id().name(), type_id().name()); @@ -30,7 +30,7 @@ BOOST_AUTO_TEST_CASE(names_matches_template_id) using namespace boost; BOOST_CHECK_EQUAL(template_id().name_demangled(), "int"); BOOST_CHECK_EQUAL(template_id().name_demangled(), "double"); - + BOOST_CHECK_EQUAL(template_id().name(), template_id().name()); BOOST_CHECK_NE(template_id().name(), template_id().name()); BOOST_CHECK_NE(template_id().name(), template_id().name()); @@ -89,6 +89,56 @@ BOOST_AUTO_TEST_CASE(hash_code_type_id) BOOST_CHECK_LE(t_double1, t_double2); } +#ifndef BOOST_NO_RTTI + +BOOST_AUTO_TEST_CASE(comparators_type_id_vs_type_info) +{ + using namespace boost; + type_index t_int = type_id(); + + BOOST_CHECK(t_int == typeid(int)); + BOOST_CHECK(typeid(int) == t_int); + BOOST_CHECK(t_int <= typeid(int)); + BOOST_CHECK(typeid(int) <= t_int); + BOOST_CHECK(t_int >= typeid(int)); + BOOST_CHECK(typeid(int) >= t_int); + + type_index t_double = type_id(); + + BOOST_CHECK(t_double == typeid(double)); + BOOST_CHECK(typeid(double) == t_double); + BOOST_CHECK(t_double <= typeid(double)); + BOOST_CHECK(typeid(double) <= t_double); + BOOST_CHECK(t_double >= typeid(double)); + BOOST_CHECK(typeid(double) >= t_double); + + if (t_double < t_int) { + BOOST_CHECK(t_double < typeid(int)); + BOOST_CHECK(typeid(double) < t_int); + BOOST_CHECK(typeid(int) > t_double); + BOOST_CHECK(t_int > typeid(double)); + + + BOOST_CHECK(t_double <= typeid(int)); + BOOST_CHECK(typeid(double) <= t_int); + BOOST_CHECK(typeid(int) >= t_double); + BOOST_CHECK(t_int >= typeid(double)); + } else { + BOOST_CHECK(t_double > typeid(int)); + BOOST_CHECK(typeid(double) > t_int); + BOOST_CHECK(typeid(int) < t_double); + BOOST_CHECK(t_int < typeid(double)); + + + BOOST_CHECK(t_double >= typeid(int)); + BOOST_CHECK(typeid(double) >= t_int); + BOOST_CHECK(typeid(int) <= t_double); + BOOST_CHECK(t_int <= typeid(double)); + } +} + +#endif // BOOST_NO_RTTI + BOOST_AUTO_TEST_CASE(hash_code_template_id) { using namespace boost; @@ -170,7 +220,7 @@ BOOST_AUTO_TEST_CASE(stream_operator_via_lexical_cast_testing) std::string s_double1 = lexical_cast(type_id()); BOOST_CHECK_EQUAL(s_double1, "double"); - + std::string s_double2 = lexical_cast(template_id()); BOOST_CHECK_EQUAL(s_double2, "double"); } @@ -222,12 +272,12 @@ BOOST_AUTO_TEST_CASE(template_index_stripping_cvr_test) namespace my_namespace1 { class my_class{}; -} +} namespace my_namespace2 { class my_class{}; -} +} BOOST_AUTO_TEST_CASE(template_index_user_defined_class_test) @@ -236,24 +286,27 @@ BOOST_AUTO_TEST_CASE(template_index_user_defined_class_test) BOOST_CHECK_EQUAL(template_id(), template_id()); BOOST_CHECK_EQUAL(template_id(), template_id()); - + BOOST_CHECK_NE(template_id(), template_id()); BOOST_CHECK_NE( - template_id().name_demangled().find("my_namespace1::my_class"), + template_id().name_demangled().find("my_namespace1::my_class"), std::string::npos); BOOST_CHECK_EQUAL(type_id(), type_id()); BOOST_CHECK_EQUAL(type_id(), type_id()); - + +#ifndef BOOST_NO_RTTI + BOOST_CHECK(type_id() == typeid(my_namespace1::my_class)); + BOOST_CHECK(type_id() == typeid(my_namespace2::my_class)); + BOOST_CHECK(typeid(my_namespace1::my_class) == type_id()); + BOOST_CHECK(typeid(my_namespace2::my_class) == type_id()); +#endif + BOOST_CHECK_NE(type_id(), type_id()); BOOST_CHECK_NE( - type_id().name_demangled().find("my_namespace1::my_class"), + type_id().name_demangled().find("my_namespace1::my_class"), std::string::npos); } - - - -