Loading [MathJax]/extensions/TeX/AMSsymbols.js
Radium Engine  1.5.29
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
typeutils.cpp
1#include <Core/Containers/VectorArray.hpp>
2#include <Core/Types.hpp>
3#include <Core/Utils/Color.hpp>
4#include <Core/Utils/TypesUtils.hpp>
5#include <catch2/catch_test_macros.hpp>
6
7namespace TypeTests {
8struct TypeName_struct {};
9} // namespace TypeTests
10TEST_CASE( "Core/Utils/TypesUtils", "[unittests][Core][Utils][TypesUtils]" ) {
11 SECTION( "Demangle from typename" ) {
12 using Ra::Core::Utils::demangleType;
13
14 REQUIRE( demangleType<int>() == "int" );
15 REQUIRE( demangleType<float>() == "float" );
16 REQUIRE( demangleType<uint>() == "unsigned int" );
17 REQUIRE( demangleType<size_t>() == "unsigned long" );
18
19 auto demangledName = demangleType<std::vector<int>>();
20 REQUIRE( demangledName == "std::vector<int, std::allocator<int>>" );
21
22 demangledName = demangleType<TypeTests::TypeName_struct>();
23 REQUIRE( demangledName == "TypeTests::TypeName_struct" );
24
25 demangledName = demangleType( std::type_index( typeid( std::vector<float> ) ) );
26 REQUIRE( demangledName == "std::vector<float, std::allocator<float>>" );
27 }
28
29 SECTION( "Demangle from instance" ) {
30 using Ra::Core::Utils::demangleType;
31
32 int i { 1 };
33 float f { 2 };
34 unsigned int u { 3 };
35 size_t s { 4 };
36
37 REQUIRE( demangleType( i ) == "int" );
38 REQUIRE( demangleType( f ) == "float" );
39 REQUIRE( demangleType( u ) == "unsigned int" );
40 REQUIRE( demangleType( s ) == "unsigned long" );
41
42#ifndef _WIN32
43 // this segfault on windows due to out_of_bound exception. why ???
45 auto demangledName = demangleType( v );
46 REQUIRE( demangledName == "std::vector<int, std::allocator<int>>" );
47#endif
48 TypeTests::TypeName_struct tns;
49 auto demangledNameFromStruct = demangleType( tns );
50 REQUIRE( demangledNameFromStruct == "TypeTests::TypeName_struct" );
51 }
52
53 SECTION( "Type traits" ) {
54 using namespace Ra::Core::Utils;
55 REQUIRE( is_container<Scalar>::value == false );
56 REQUIRE( is_container<Ra::Core::Vector3>::value == false );
57 REQUIRE( is_container<Ra::Core::Utils::Color>::value == false );
58 REQUIRE( is_container<Ra::Core::VectorArray<Ra::Core::Vector3>>::value == true );
59 REQUIRE( is_container<std::array<unsigned int, 2>>::value == true );
60 REQUIRE( is_container<std::map<size_t, std::string>>::value == true );
61 REQUIRE( is_container<std::vector<Scalar>>::value == true );
62 }
63}
This class implements ContainerIntrospectionInterface for AlignedStdVector.