diff --git a/src/lib/test/test-helper.hpp b/src/lib/test/test-helper.hpp index bfc338f6a..667f454ef 100644 --- a/src/lib/test/test-helper.hpp +++ b/src/lib/test/test-helper.hpp @@ -85,6 +85,27 @@ namespace test{ demangleCxx (Literal rawName); + /** short yet distinct name identifying the given type. + * @return demangled type-id without any scopes. */ + template + string + tyAbbr() + { + string typeStr = demangleCxx (showType()); + size_t pos = typeStr.rfind("::"); + if (pos != string::npos) + typeStr = typeStr.substr(pos+2); + return typeStr; + } + + template + string + tyAbbr(TY&&) + { + return tyAbbr(); + } + + /** for printing sizeof(). * prints the given size and name literally, without any further magic */ string diff --git a/tests/library/meta/access-casted-test.cpp b/tests/library/meta/access-casted-test.cpp index 6725b3051..00cefb9cb 100644 --- a/tests/library/meta/access-casted-test.cpp +++ b/tests/library/meta/access-casted-test.cpp @@ -23,6 +23,7 @@ #include "lib/test/run.hpp" +#include "lib/test/test-helper.hpp" #include "lib/access-casted.hpp" @@ -50,11 +51,12 @@ namespace test { }; struct F : E {}; + using lib::test::tyAbbr; - ostream& operator<< (ostream& s, const B& b) { return s << "B{} adr="<<&b; } - ostream& operator<< (ostream& s, const D& d) { return s << "D{} adr="<<&d; } - ostream& operator<< (ostream& s, const E& e) { return s << "E{} adr="<<&e; } - ostream& operator<< (ostream& s, const F& f) { return s << "F{} adr="<<&f; } + ostream& operator<< (ostream& s, const B& b) { return s << "B{} adr="<<&b<<" type: "< = " << use_dynamic_downcast::value << "\n"; - cout << "Access(D as D&) --->" << AccessCasted::access(d) << "\n"; - cout << "Access(D& as D&) --->" << AccessCasted::access(rD) << "\n"; - cout << "Access(B& as D&) --->" << AccessCasted::access(rB) << "\n"; - cout << "Access(D* as D*) --->" << AccessCasted::access(pD) << "\n"; - cout << "Access(B* as D*) --->" << AccessCasted::access(pB) << "\n"; - cout << "Access(D*& as D*&) --->" << AccessCasted::access(rpD) << "\n"; - cout << "Access(B*& as D*&) --->" << AccessCasted::access(rpB) << "\n"; + cout << "Access(D as D&) --->" << AccessCasted::access(d) << "\n"; + cout << "Access(D& as D&) --->" << AccessCasted::access(rD) << "\n"; + cout << "Access(B& as D&) --->" << AccessCasted::access(rB) << "\n"; + cout << "Access(D* as D*) --->" << AccessCasted::access(pD) << "\n"; + cout << "Access(B* as D*) --->" << AccessCasted::access(pB) << "\n"; + cout << "Access(D*& as D*&) --->" << AccessCasted::access(rpD) << "\n"; + cout << "Access(B*& as D*&) --->" << AccessCasted::access(rpB) << "\n"; - cout << "Access(D as B&) --->" << AccessCasted::access(d) << "\n"; - cout << "Access(D& as B&) --->" << AccessCasted::access(rD) << "\n"; - cout << "Access(B& as B&) --->" << AccessCasted::access(rB) << "\n"; - cout << "Access(D* as B*) --->" << AccessCasted::access(pD) << "\n"; - cout << "Access(B* as B*) --->" << AccessCasted::access(pB) << "\n"; - cout << "Access(D*& as B*&) --->" << AccessCasted::access(rpD) << "\n"; - cout << "Access(B*& as B*&) --->" << AccessCasted::access(rpB) << "\n"; + cout << "Access(D as B&) --->" << AccessCasted::access(d) << "\n"; + cout << "Access(D& as B&) --->" << AccessCasted::access(rD) << "\n"; + cout << "Access(B& as B&) --->" << AccessCasted::access(rB) << "\n"; + cout << "Access(D* as B*) --->" << AccessCasted::access(pD) << "\n"; + cout << "Access(B* as B*) --->" << AccessCasted::access(pB) << "\n"; + cout << "Access(D*& as B*&) --->" << AccessCasted::access(rpD) << "\n"; + cout << "Access(B*& as B*&) --->" << AccessCasted::access(rpB) << "\n"; - cout << "Access(D as E&) --->" << AccessCasted::access(d) << "\n"; - cout << "Access(E& as F&) --->" << AccessCasted::access(rE) << "\n"; + cout << "Access(D as E&) --->" << AccessCasted::access(d) << "\n"; + cout << "Access(E& as F&) --->" << AccessCasted::access(rE) << "\n"; cout << "Access(D(E)* as E*) --->" << AccessCasted::access(pDE) << "\n"; cout << "Access(D(E)* as F*) --->" << AccessCasted::access(pDE) << "\n"; - cout << "Access(E* as F*) --->" << AccessCasted::access(pE) << "\n"; + cout << "Access(E* as F*) --->" << AccessCasted::access(pE) << "\n"; } }; diff --git a/tests/library/meta/virtual-copy-support-test.cpp b/tests/library/meta/virtual-copy-support-test.cpp index 8220594f2..d36b0fae1 100644 --- a/tests/library/meta/virtual-copy-support-test.cpp +++ b/tests/library/meta/virtual-copy-support-test.cpp @@ -54,12 +54,7 @@ namespace test { string typeID(Interface const& obj) { - string typeStr = lib::test::demangleCxx( - lib::test::showType(obj)); - size_t pos = typeStr.rfind("::"); - if (pos != string::npos) - typeStr = typeStr.substr(pos+2); - return typeStr; + return lib::test::tyAbbr(obj); } int _CheckSum_ = 0;