8 #include "gtest/gtest.h"
12 TEST(NumericConvTest, subtype)
14 EXPECT_EQ(visionary::castClamped<std::uint64_t>(std::uint8_t(9)), 9u);
15 EXPECT_EQ(visionary::castClamped<std::int32_t>(std::int16_t(-10000)), -10000);
18 TEST(NumericConvTest, same_type)
20 EXPECT_EQ(visionary::castClamped<std::uint8_t>(std::uint8_t(9)), 9u);
21 EXPECT_EQ(visionary::castClamped<std::int16_t>(std::int16_t(-10000)), -10000);
24 TEST(NumericConvTest, int_unsigned_and_unsigned)
26 EXPECT_EQ(visionary::castClamped<std::uint64_t>(std::uint8_t(9)), 9u);
27 EXPECT_EQ(visionary::castClamped<std::uint8_t>(std::uint64_t(9)), 9u);
28 EXPECT_EQ(visionary::castClamped<std::uint8_t>(std::uint64_t(100000000)), 255u);
31 TEST(NumericConvTest, int_signed_and_signed)
33 EXPECT_EQ(visionary::castClamped<std::int64_t>(std::int8_t(9)), 9);
34 EXPECT_EQ(visionary::castClamped<std::int64_t>(std::int8_t(-9)), -9);
35 EXPECT_EQ(visionary::castClamped<std::int8_t>(std::int64_t(-9)), -9);
36 EXPECT_EQ(visionary::castClamped<std::int8_t>(std::int64_t(-100000000)), -128);
37 EXPECT_EQ(visionary::castClamped<std::int8_t>(std::int64_t(1000000000)), 127);
40 TEST(NumericConvTest, int_signed_and_unsigned)
42 EXPECT_EQ(visionary::castClamped<std::int64_t>(std::uint8_t(9)), 9);
43 EXPECT_EQ(visionary::castClamped<std::int8_t>(std::uint64_t(100000000)), 127);
44 EXPECT_EQ(visionary::castClamped<std::int8_t>(std::uint64_t(0)), 0);
47 TEST(NumericConvTest, int_unsigned_and_signed)
49 EXPECT_EQ(visionary::castClamped<std::uint64_t>(std::int8_t(9)), 9u);
50 EXPECT_EQ(visionary::castClamped<std::uint64_t>(std::int8_t(-9)), 0u);
51 EXPECT_EQ(visionary::castClamped<std::uint64_t>(std::int8_t(0)), 0u);
52 EXPECT_EQ(visionary::castClamped<std::uint8_t>(std::int64_t(-100000000)), 0u);
53 EXPECT_EQ(visionary::castClamped<std::uint8_t>(std::int64_t(100000000)), 255u);
56 TEST(NumericConvTest, float_and_int)
58 EXPECT_NEAR(visionary::castClamped<float>(std::uint64_t(0xffffffffffffffffull)), 1.88e19, 0.1e19);
59 EXPECT_EQ(visionary::castClamped<std::int64_t>(
float(-1.235e38f)), -0x7fffffffffffffffll - 1);
61 #if !(defined(_MSC_VER) && (_MSC_VER >= 1900) && (_MSC_VER < 2000))
63 EXPECT_NEAR(visionary::castClamped<float>(
double(1.234e308)), 3.4e38f, 0.1e38f);
66 EXPECT_NEAR(visionary::castClamped<double>(
float(-1.234e27f)), -1.234e27, 1e20);