Line data Source code
1 : // Copyright 2024 Accenture. 2 : 3 : #include "estd/type_traits.h" 4 : 5 : #include "estd/static_assert.h" 6 : #include "estd/type_utils.h" 7 : 8 : #include <platform/estdint.h> 9 : 10 : #include <gmock/gmock.h> 11 : #include <gtest/gtest.h> 12 : 13 : #include <type_traits> 14 : 15 : using namespace ::testing; 16 : 17 : namespace 18 : { 19 : // [EXAMPLE_TYPE_TRAITS_SUPPORT_START] 20 : union tempU 21 : {}; 22 : 23 : struct tempA 24 : {}; 25 : 26 : struct tempB 27 : {}; 28 : 29 : struct tempC : public tempB 30 : {}; 31 : 32 : struct Call0 33 : { 34 : void operator()() {} 35 : }; 36 : 37 : struct Call1 38 : { 39 : int operator()() { return 9; } 40 : 41 : int operator()(int) { return 9; } 42 : 43 : int operator()(int, int) { return 9; } 44 : }; 45 : 46 : // [EXAMPLE_TYPE_TRAITS_SUPPORT_END] 47 : } // namespace 48 : 49 3 : TEST(TypeTraitsExample, TestIsClass) 50 : { 51 : // [EXAMPLE_TYPE_TRAITS_IS_CLASS_START] 52 1 : ESTD_STATIC_ASSERT(::estd::is_class<Call0>::value); 53 1 : ESTD_STATIC_ASSERT(::estd::is_class<Call1>::value); 54 1 : ESTD_STATIC_ASSERT(::estd::is_class<tempA>::value); 55 1 : ESTD_STATIC_ASSERT(::estd::is_class<tempC>::value); 56 : // [EXAMPLE_TYPE_TRAITS_IS_CLASS_END] 57 1 : } 58 : 59 3 : TEST(TypeTraitsExample, TestIsCallable) 60 : { 61 : // [EXAMPLE_TYPE_TRAITS_IS_CALLABLE_START] 62 1 : ESTD_STATIC_ASSERT(::estd::is_callable<Call0>::value); 63 1 : ESTD_STATIC_ASSERT(::estd::is_callable<Call1>::value); 64 1 : ESTD_STATIC_ASSERT(::estd::is_callable<void (*)()>::value); 65 1 : ESTD_STATIC_ASSERT(!::estd::is_callable<tempA>::value); 66 1 : ESTD_STATIC_ASSERT(!::estd::is_callable<tempC>::value); 67 1 : ESTD_STATIC_ASSERT(!::estd::is_callable<int>::value); 68 : // [EXAMPLE_TYPE_TRAITS_IS_CALLABLE__END] 69 1 : } 70 : 71 3 : TEST(TypeTraitsExample, TestIsSigned) 72 : { 73 : // [EXAMPLE_TYPE_TRAITS_IS_SIGNED_START] 74 1 : ESTD_STATIC_ASSERT((::estd::is_same<bool, ::estd::make_signed<bool>::type>::value)); 75 1 : ESTD_STATIC_ASSERT((::estd::is_same<int8_t, ::estd::make_signed<int8_t>::type>::value)); 76 1 : ESTD_STATIC_ASSERT((::estd::is_same<int8_t, ::estd::make_signed<uint8_t>::type>::value)); 77 1 : ESTD_STATIC_ASSERT((::estd::is_same<int16_t, ::estd::make_signed<int16_t>::type>::value)); 78 1 : ESTD_STATIC_ASSERT((::estd::is_same<int16_t, ::estd::make_signed<uint16_t>::type>::value)); 79 1 : ESTD_STATIC_ASSERT((::estd::is_same<int32_t, ::estd::make_signed<int32_t>::type>::value)); 80 1 : ESTD_STATIC_ASSERT((::estd::is_same<int32_t, ::estd::make_signed<uint32_t>::type>::value)); 81 1 : ESTD_STATIC_ASSERT((::estd::is_same<int64_t, ::estd::make_signed<int64_t>::type>::value)); 82 1 : ESTD_STATIC_ASSERT((::estd::is_same<int64_t, ::estd::make_signed<uint64_t>::type>::value)); 83 1 : ESTD_STATIC_ASSERT((::estd::is_same<tempA, ::estd::make_signed<tempA>::type>::value)); 84 : // [EXAMPLE_TYPE_TRAITS_IS_SIGNED_END] 85 1 : } 86 : 87 3 : TEST(TypeTraitsExample, is_base_of) 88 : { 89 : // [EXAMPLE_TYPE_TRAITS_IS_BASE_OF_START] 90 1 : ESTD_STATIC_ASSERT((::estd::is_base_of<tempB, tempC>::value)); 91 1 : ESTD_STATIC_ASSERT(!(::estd::is_base_of<tempC, tempB>::value)); 92 1 : ESTD_STATIC_ASSERT((::estd::is_base_of<tempB, tempB>::value)); 93 1 : ESTD_STATIC_ASSERT(!(::estd::is_base_of<tempB, tempA>::value)); 94 : // [EXAMPLE_TYPE_TRAITS_IS_BASE_OF_END] 95 1 : } 96 : 97 3 : TEST(TypeTraitsExample, TestMakeSigned) 98 : { 99 : // [EXAMPLE_TYPE_TRAITS_MAKE_SIGNED_START] 100 1 : ESTD_STATIC_ASSERT((::estd::is_same<bool, ::estd::make_signed<bool>::type>::value)); 101 1 : ESTD_STATIC_ASSERT((::estd::is_same<int8_t, ::estd::make_signed<int8_t>::type>::value)); 102 1 : ESTD_STATIC_ASSERT((::estd::is_same<int8_t, ::estd::make_signed<uint8_t>::type>::value)); 103 1 : ESTD_STATIC_ASSERT((::estd::is_same<int16_t, ::estd::make_signed<int16_t>::type>::value)); 104 1 : ESTD_STATIC_ASSERT((::estd::is_same<int16_t, ::estd::make_signed<uint16_t>::type>::value)); 105 1 : ESTD_STATIC_ASSERT((::estd::is_same<int32_t, ::estd::make_signed<int32_t>::type>::value)); 106 1 : ESTD_STATIC_ASSERT((::estd::is_same<int32_t, ::estd::make_signed<uint32_t>::type>::value)); 107 1 : ESTD_STATIC_ASSERT((::estd::is_same<int64_t, ::estd::make_signed<int64_t>::type>::value)); 108 1 : ESTD_STATIC_ASSERT((::estd::is_same<int64_t, ::estd::make_signed<uint64_t>::type>::value)); 109 1 : ESTD_STATIC_ASSERT((::estd::is_same<tempA, ::estd::make_signed<tempA>::type>::value)); 110 : // [EXAMPLE_TYPE_TRAITS_MAKE_SIGNED_END] 111 1 : }