diff options
author | Marco Poletti <poletti.marco@gmail.com> | 2019-09-01 11:55:23 -0700 |
---|---|---|
committer | Marco Poletti <poletti.marco@gmail.com> | 2019-09-01 11:55:23 -0700 |
commit | 9c1ac1e6187e0e39202ad63728cc7fffc338f7bf (patch) | |
tree | 0a87a77374d1766a645c83f7cc28d9de9efd8a9b | |
parent | e28d693e3860b66692394e0b5aa7a97b7957cf58 (diff) | |
download | google-fruit-9c1ac1e6187e0e39202ad63728cc7fffc338f7bf.tar.gz |
Add a more complex test case for name demangling.
-rw-r--r-- | tests/util/test_type_info.py | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/tests/util/test_type_info.py b/tests/util/test_type_info.py index 1eb1806..b67f197 100644 --- a/tests/util/test_type_info.py +++ b/tests/util/test_type_info.py @@ -49,20 +49,27 @@ class TestTypeInfo(parameterized.TestCase): source, locals()) - def test_name(self): + @parameterized.parameters([ + ('MyStruct', '{"MyStruct", "struct MyStruct"}'), + ('std::pair<MyStruct, int>', '{"std::pair<MyStruct, int>", "std::__1::pair<MyStruct, int>"}'), + ]) + def test_name(self, T, Expected): source = ''' struct MyStruct { }; int main() { - std::string result = getTypeId<MyStruct>().type_info->name(); - if (result != "MyStruct" && result != "struct MyStruct") { - std::cerr << "Demangling failed." << std::endl; - std::cerr << "typeid(MyStruct).name() == " << typeid(MyStruct).name() << std::endl; - std::cerr << "getTypeId<MyStruct>().type_info->name() == " << result << std::endl; - abort(); + std::string result = getTypeId<T>().type_info->name(); + Assert(std::string(getTypeId<T>()) == getTypeId<T>().type_info->name()); + for (std::string expected : Expected) { + if (result == expected) { + return 0; + } } - Assert(std::string(getTypeId<MyStruct>()) == "MyStruct" || std::string(getTypeId<MyStruct>()) == "struct MyStruct"); + std::cerr << "Unexpected demangled name." << std::endl; + std::cerr << "typeid(T).name() == " << typeid(T).name() << std::endl; + std::cerr << "getTypeId<T>().type_info->name() == " << result << std::endl; + abort(); } ''' expect_success( |