1#include <Core/Containers/VectorArray.hpp>
3#include <Core/Utils/Color.hpp>
4#include <Core/Utils/TypesUtils.hpp>
5#include <catch2/catch_test_macros.hpp>
8struct TypeName_struct {};
17TEST_CASE(
"Core/Utils/TypesUtils",
"[unittests][Core][Utils][TypesUtils]" ) {
18 SECTION(
"Demangle from typename" ) {
19 using Ra::Core::Utils::demangleType;
20 using Ra::Core::Utils::simplifiedDemangledType;
22 REQUIRE( demangleType<int>() ==
"int" );
23 REQUIRE( demangleType<float>() ==
"float" );
24 REQUIRE( demangleType<uint>() ==
"unsigned int" );
25 REQUIRE( demangleType<size_t>() ==
"unsigned long" );
27 REQUIRE( demangleType(
std::vector<int> {} ) ==
"std::vector<int, std::allocator<int>>" );
28 REQUIRE( demangleType<
std::vector<int>>() ==
"std::vector<int, std::allocator<int>>" );
30 "std::vector<int, std::allocator<int>>" );
33 "std::vector<float, std::allocator<float>>" );
35 "std::vector<float, std::allocator<float>>" );
37 "std::vector<float, std::allocator<float>>" );
40 "std::vector<std::basic_string<char, std::char_traits<char>, "
41 "std::allocator<char>>, std::allocator<std::basic_string<char, "
42 "std::char_traits<char>, std::allocator<char>>>>";
47 std::string simplified_string_vector_type =
"vector<string>";
49 simplified_string_vector_type );
51 simplified_string_vector_type );
53 simplified_string_vector_type );
56 "std::unordered_map<std::basic_string<char, std::char_traits<char>, "
57 "std::allocator<char>>, TypeTests::SimpleStruct, "
58 "std::hash<std::basic_string<char, std::char_traits<char>, "
59 "std::allocator<char>>>, std::equal_to<std::basic_string<char, "
60 "std::char_traits<char>, std::allocator<char>>>, "
61 "std::allocator<std::pair<std::basic_string<char, "
62 "std::char_traits<char>, "
63 "std::allocator<char>> const, TypeTests::SimpleStruct>>>" );
65 REQUIRE( demangleType<TypeTests::TypeName_struct>() ==
"TypeTests::TypeName_struct" );
66 REQUIRE( demangleType<TypeTests::SimpleStruct>() ==
"TypeTests::SimpleStruct" );
68 REQUIRE( demangleType<TypeTests::PairAlias>() ==
69 "std::pair<std::basic_string<char, std::char_traits<char>, "
70 "std::allocator<char>>, bool>" );
72 "std::vector<std::pair<std::basic_string<char, std::char_traits"
73 "<char>, std::allocator<char>>, bool>, std::allocator<std::pair<std::"
74 "basic_string<char, std::char_traits<char>, std::allocator<char>>, bool>>>" );
79 "unordered_map<string, TypeTests::SimpleStruct>" );
80 REQUIRE( simplifiedDemangledType<TypeTests::PairAlias>() ==
"pair<string, bool>" );
82 "vector<pair<string, bool>>" );
85 SECTION(
"Demangle from instance" ) {
86 using Ra::Core::Utils::demangleType;
93 REQUIRE( demangleType( i ) ==
"int" );
94 REQUIRE( demangleType( f ) ==
"float" );
95 REQUIRE( demangleType( u ) ==
"unsigned int" );
96 REQUIRE( demangleType( s ) ==
"unsigned long" );
101 auto demangledName = demangleType( v );
102 REQUIRE( demangledName ==
"std::vector<int, std::allocator<int>>" );
104 TypeTests::TypeName_struct tns;
105 auto demangledNameFromStruct = demangleType( tns );
106 REQUIRE( demangledNameFromStruct ==
"TypeTests::TypeName_struct" );
109 SECTION(
"Type traits" ) {
110 using namespace Ra::Core::Utils;
111 REQUIRE( is_container<Scalar>::value ==
false );
112 REQUIRE( is_container<Ra::Core::Vector3>::value ==
false );
113 REQUIRE( is_container<Ra::Core::Utils::Color>::value ==
false );
This class implements ContainerIntrospectionInterface for AlignedStdVector.