You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

183 lines
10 KiB

  1. #include <gtest/gtest.h>
  2. #define CPPCORE_CONVERT_CAST_THROW
  3. #include <cppcore/conversion/convert_cast.h>
  4. using namespace ::cppcore;
  5. enum class test_enum
  6. {
  7. test0 = 0,
  8. test1,
  9. test2,
  10. test256 = 256,
  11. };
  12. TEST(convert_cast_test, i8)
  13. {
  14. EXPECT_THROW(convert_cast<int8_t>(static_cast< int16_t>(128)), convert_exception);
  15. EXPECT_THROW(convert_cast<int8_t>(static_cast< int32_t>(128)), convert_exception);
  16. EXPECT_THROW(convert_cast<int8_t>(static_cast< int64_t>(128)), convert_exception);
  17. EXPECT_THROW(convert_cast<int8_t>(static_cast< uint8_t>(128)), convert_exception);
  18. EXPECT_THROW(convert_cast<int8_t>(static_cast<uint16_t>(128)), convert_exception);
  19. EXPECT_THROW(convert_cast<int8_t>(static_cast<uint32_t>(128)), convert_exception);
  20. EXPECT_THROW(convert_cast<int8_t>(static_cast<uint64_t>(128)), convert_exception);
  21. EXPECT_EQ (convert_cast<int8_t>(static_cast< int8_t>(1)), static_cast<int8_t>(1));
  22. EXPECT_EQ (convert_cast<int8_t>(static_cast< int16_t>(2)), static_cast<int8_t>(2));
  23. EXPECT_EQ (convert_cast<int8_t>(static_cast< int32_t>(3)), static_cast<int8_t>(3));
  24. EXPECT_EQ (convert_cast<int8_t>(static_cast< int64_t>(4)), static_cast<int8_t>(4));
  25. EXPECT_EQ (convert_cast<int8_t>(static_cast< uint8_t>(4)), static_cast<int8_t>(4));
  26. EXPECT_EQ (convert_cast<int8_t>(static_cast<uint16_t>(5)), static_cast<int8_t>(5));
  27. EXPECT_EQ (convert_cast<int8_t>(static_cast<uint32_t>(6)), static_cast<int8_t>(6));
  28. EXPECT_EQ (convert_cast<int8_t>(static_cast<uint64_t>(7)), static_cast<int8_t>(7));
  29. }
  30. TEST(convert_cast_test, u8)
  31. {
  32. EXPECT_THROW(convert_cast<uint8_t>(static_cast< int8_t>( -1)), convert_exception);
  33. EXPECT_THROW(convert_cast<uint8_t>(static_cast< int16_t>(256)), convert_exception);
  34. EXPECT_THROW(convert_cast<uint8_t>(static_cast< int32_t>( -1)), convert_exception);
  35. EXPECT_THROW(convert_cast<uint8_t>(static_cast< int64_t>(256)), convert_exception);
  36. EXPECT_THROW(convert_cast<uint8_t>(static_cast<uint16_t>(256)), convert_exception);
  37. EXPECT_THROW(convert_cast<uint8_t>(static_cast<uint32_t>(256)), convert_exception);
  38. EXPECT_THROW(convert_cast<uint8_t>(static_cast<uint64_t>(256)), convert_exception);
  39. EXPECT_EQ (convert_cast<uint8_t>(static_cast< int8_t>(1)), static_cast<uint8_t>(1));
  40. EXPECT_EQ (convert_cast<uint8_t>(static_cast< int16_t>(2)), static_cast<uint8_t>(2));
  41. EXPECT_EQ (convert_cast<uint8_t>(static_cast< int32_t>(3)), static_cast<uint8_t>(3));
  42. EXPECT_EQ (convert_cast<uint8_t>(static_cast< int64_t>(4)), static_cast<uint8_t>(4));
  43. EXPECT_EQ (convert_cast<uint8_t>(static_cast< uint8_t>(4)), static_cast<uint8_t>(4));
  44. EXPECT_EQ (convert_cast<uint8_t>(static_cast<uint16_t>(5)), static_cast<uint8_t>(5));
  45. EXPECT_EQ (convert_cast<uint8_t>(static_cast<uint32_t>(6)), static_cast<uint8_t>(6));
  46. EXPECT_EQ (convert_cast<uint8_t>(static_cast<uint64_t>(7)), static_cast<uint8_t>(7));
  47. }
  48. TEST(convert_cast_test, i16)
  49. {
  50. EXPECT_THROW(convert_cast<int16_t>(static_cast< int32_t>(32'768)), convert_exception);
  51. EXPECT_THROW(convert_cast<int16_t>(static_cast< int64_t>(32'768)), convert_exception);
  52. EXPECT_THROW(convert_cast<int16_t>(static_cast<uint16_t>(32'768)), convert_exception);
  53. EXPECT_THROW(convert_cast<int16_t>(static_cast<uint32_t>(32'768)), convert_exception);
  54. EXPECT_THROW(convert_cast<int16_t>(static_cast<uint64_t>(32'768)), convert_exception);
  55. EXPECT_EQ (convert_cast<int16_t>(static_cast< int8_t>(1)), static_cast<int16_t>(1));
  56. EXPECT_EQ (convert_cast<int16_t>(static_cast< int16_t>(2)), static_cast<int16_t>(2));
  57. EXPECT_EQ (convert_cast<int16_t>(static_cast< int32_t>(3)), static_cast<int16_t>(3));
  58. EXPECT_EQ (convert_cast<int16_t>(static_cast< int64_t>(4)), static_cast<int16_t>(4));
  59. EXPECT_EQ (convert_cast<int16_t>(static_cast< uint8_t>(4)), static_cast<int16_t>(4));
  60. EXPECT_EQ (convert_cast<int16_t>(static_cast<uint16_t>(5)), static_cast<int16_t>(5));
  61. EXPECT_EQ (convert_cast<int16_t>(static_cast<uint32_t>(6)), static_cast<int16_t>(6));
  62. EXPECT_EQ (convert_cast<int16_t>(static_cast<uint64_t>(7)), static_cast<int16_t>(7));
  63. }
  64. TEST(convert_cast_test, u16)
  65. {
  66. EXPECT_THROW(convert_cast<uint16_t>(static_cast< int8_t>( -1)), convert_exception);
  67. EXPECT_THROW(convert_cast<uint16_t>(static_cast< int16_t>( -1)), convert_exception);
  68. EXPECT_THROW(convert_cast<uint16_t>(static_cast< int32_t>(65'536)), convert_exception);
  69. EXPECT_THROW(convert_cast<uint16_t>(static_cast< int64_t>(65'536)), convert_exception);
  70. EXPECT_THROW(convert_cast<uint16_t>(static_cast<uint32_t>(65'536)), convert_exception);
  71. EXPECT_THROW(convert_cast<uint16_t>(static_cast<uint64_t>(65'536)), convert_exception);
  72. EXPECT_EQ (convert_cast<uint16_t>(static_cast< int8_t>(1)), static_cast<int16_t>(1));
  73. EXPECT_EQ (convert_cast<uint16_t>(static_cast< int16_t>(2)), static_cast<int16_t>(2));
  74. EXPECT_EQ (convert_cast<uint16_t>(static_cast< int32_t>(3)), static_cast<int16_t>(3));
  75. EXPECT_EQ (convert_cast<uint16_t>(static_cast< int64_t>(4)), static_cast<int16_t>(4));
  76. EXPECT_EQ (convert_cast<uint16_t>(static_cast< uint8_t>(4)), static_cast<int16_t>(4));
  77. EXPECT_EQ (convert_cast<uint16_t>(static_cast<uint16_t>(5)), static_cast<int16_t>(5));
  78. EXPECT_EQ (convert_cast<uint16_t>(static_cast<uint32_t>(6)), static_cast<int16_t>(6));
  79. EXPECT_EQ (convert_cast<uint16_t>(static_cast<uint64_t>(7)), static_cast<int16_t>(7));
  80. }
  81. TEST(convert_cast_test, i32)
  82. {
  83. EXPECT_THROW(convert_cast<int32_t>(static_cast< int64_t>(2'147'483'648)), convert_exception);
  84. EXPECT_THROW(convert_cast<int32_t>(static_cast<uint32_t>(2'147'483'648)), convert_exception);
  85. EXPECT_THROW(convert_cast<int32_t>(static_cast<uint64_t>(2'147'483'648)), convert_exception);
  86. EXPECT_EQ (convert_cast<int32_t>(static_cast< int8_t>(1)), static_cast<int32_t>(1));
  87. EXPECT_EQ (convert_cast<int32_t>(static_cast< int16_t>(2)), static_cast<int32_t>(2));
  88. EXPECT_EQ (convert_cast<int32_t>(static_cast< int32_t>(3)), static_cast<int32_t>(3));
  89. EXPECT_EQ (convert_cast<int32_t>(static_cast< int64_t>(4)), static_cast<int32_t>(4));
  90. EXPECT_EQ (convert_cast<int32_t>(static_cast< uint8_t>(4)), static_cast<int32_t>(4));
  91. EXPECT_EQ (convert_cast<int32_t>(static_cast<uint16_t>(5)), static_cast<int32_t>(5));
  92. EXPECT_EQ (convert_cast<int32_t>(static_cast<uint32_t>(6)), static_cast<int32_t>(6));
  93. EXPECT_EQ (convert_cast<int32_t>(static_cast<uint64_t>(7)), static_cast<int32_t>(7));
  94. }
  95. TEST(convert_cast_test, u32)
  96. {
  97. EXPECT_THROW(convert_cast<uint32_t>(static_cast< int8_t>( -1)), convert_exception);
  98. EXPECT_THROW(convert_cast<uint32_t>(static_cast< int16_t>( -1)), convert_exception);
  99. EXPECT_THROW(convert_cast<uint32_t>(static_cast< int32_t>( -1)), convert_exception);
  100. EXPECT_THROW(convert_cast<uint32_t>(static_cast< int64_t>(4'294'967'296)), convert_exception);
  101. EXPECT_THROW(convert_cast<uint32_t>(static_cast<uint64_t>(4'294'967'296)), convert_exception);
  102. EXPECT_EQ (convert_cast<uint32_t>(static_cast< int8_t>(1)), static_cast<int32_t>(1));
  103. EXPECT_EQ (convert_cast<uint32_t>(static_cast< int16_t>(2)), static_cast<int32_t>(2));
  104. EXPECT_EQ (convert_cast<uint32_t>(static_cast< int32_t>(3)), static_cast<int32_t>(3));
  105. EXPECT_EQ (convert_cast<uint32_t>(static_cast< int64_t>(4)), static_cast<int32_t>(4));
  106. EXPECT_EQ (convert_cast<uint32_t>(static_cast< uint8_t>(4)), static_cast<int32_t>(4));
  107. EXPECT_EQ (convert_cast<uint32_t>(static_cast<uint16_t>(5)), static_cast<int32_t>(5));
  108. EXPECT_EQ (convert_cast<uint32_t>(static_cast<uint32_t>(6)), static_cast<int32_t>(6));
  109. EXPECT_EQ (convert_cast<uint32_t>(static_cast<uint64_t>(7)), static_cast<int32_t>(7));
  110. }
  111. TEST(convert_cast_test, i64)
  112. {
  113. EXPECT_THROW(convert_cast<int64_t>(static_cast<uint64_t>(std::numeric_limits<int64_t>::max()) + 1), convert_exception);
  114. EXPECT_EQ (convert_cast<int64_t>(static_cast< int8_t>(1)), static_cast<int64_t>(1));
  115. EXPECT_EQ (convert_cast<int64_t>(static_cast< int16_t>(2)), static_cast<int64_t>(2));
  116. EXPECT_EQ (convert_cast<int64_t>(static_cast< int32_t>(3)), static_cast<int64_t>(3));
  117. EXPECT_EQ (convert_cast<int64_t>(static_cast< int64_t>(4)), static_cast<int64_t>(4));
  118. EXPECT_EQ (convert_cast<int64_t>(static_cast< uint8_t>(4)), static_cast<int64_t>(4));
  119. EXPECT_EQ (convert_cast<int64_t>(static_cast<uint16_t>(5)), static_cast<int64_t>(5));
  120. EXPECT_EQ (convert_cast<int64_t>(static_cast<uint32_t>(6)), static_cast<int64_t>(6));
  121. EXPECT_EQ (convert_cast<int64_t>(static_cast<uint64_t>(7)), static_cast<int64_t>(7));
  122. }
  123. TEST(convert_cast_test, u64)
  124. {
  125. EXPECT_THROW(convert_cast<uint64_t>(static_cast< int8_t>( -1)), convert_exception);
  126. EXPECT_THROW(convert_cast<uint64_t>(static_cast< int16_t>( -1)), convert_exception);
  127. EXPECT_THROW(convert_cast<uint64_t>(static_cast< int32_t>( -1)), convert_exception);
  128. EXPECT_EQ (convert_cast<uint64_t>(static_cast< int8_t>(1)), static_cast<int64_t>(1));
  129. EXPECT_EQ (convert_cast<uint64_t>(static_cast< int16_t>(2)), static_cast<int64_t>(2));
  130. EXPECT_EQ (convert_cast<uint64_t>(static_cast< int32_t>(3)), static_cast<int64_t>(3));
  131. EXPECT_EQ (convert_cast<uint64_t>(static_cast< int64_t>(4)), static_cast<int64_t>(4));
  132. EXPECT_EQ (convert_cast<uint64_t>(static_cast< uint8_t>(4)), static_cast<int64_t>(4));
  133. EXPECT_EQ (convert_cast<uint64_t>(static_cast<uint16_t>(5)), static_cast<int64_t>(5));
  134. EXPECT_EQ (convert_cast<uint64_t>(static_cast<uint32_t>(6)), static_cast<int64_t>(6));
  135. EXPECT_EQ (convert_cast<uint64_t>(static_cast<uint64_t>(7)), static_cast<int64_t>(7));
  136. }
  137. TEST(convert_cast_test, enum)
  138. {
  139. EXPECT_EQ(convert_cast< int8_t>( test_enum::test0), static_cast< int8_t>( 0));
  140. EXPECT_EQ(convert_cast<int16_t>( test_enum::test1), static_cast<int16_t>( 1));
  141. EXPECT_EQ(convert_cast<int32_t>( test_enum::test2), static_cast<int32_t>( 2));
  142. EXPECT_EQ(convert_cast<int64_t>(test_enum::test256), static_cast<int64_t>(256));
  143. EXPECT_EQ(convert_cast< uint8_t>( test_enum::test0), static_cast< uint8_t>( 0));
  144. EXPECT_EQ(convert_cast<uint16_t>( test_enum::test1), static_cast<uint16_t>( 1));
  145. EXPECT_EQ(convert_cast<uint32_t>( test_enum::test2), static_cast<uint32_t>( 2));
  146. EXPECT_EQ(convert_cast<uint64_t>(test_enum::test256), static_cast<uint64_t>(256));
  147. }