LCOV - code coverage report
Current view: top level - estd/examples - type_traits.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 44 44 100.0 %
Date: 2025-01-20 13:53:09 Functions: 10 15 66.7 %

          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 : }

Generated by: LCOV version 1.14