NumericConvTest.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2023 SICK AG, Waldkirch
3 //
4 // SPDX-License-Identifier: Unlicense
5 #include <cstdint>
6 #include <limits>
7 
8 #include "gtest/gtest.h"
9 
10 #include "NumericConv.h"
11 
12 TEST(NumericConvTest, subtype)
13 {
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);
16 }
17 
18 TEST(NumericConvTest, same_type)
19 {
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);
22 }
23 
24 TEST(NumericConvTest, int_unsigned_and_unsigned)
25 {
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);
29 }
30 
31 TEST(NumericConvTest, int_signed_and_signed)
32 {
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);
38 }
39 
40 TEST(NumericConvTest, int_signed_and_unsigned)
41 {
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);
45 }
46 
47 TEST(NumericConvTest, int_unsigned_and_signed)
48 {
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);
54 }
55 
56 TEST(NumericConvTest, float_and_int)
57 {
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);
60 
61 #if !(defined(_MSC_VER) && (_MSC_VER >= 1900) && (_MSC_VER < 2000))
62  // MSVC 2019 gives an warning (don't know why), though results are ok
63  EXPECT_NEAR(visionary::castClamped<float>(double(1.234e308)), 3.4e38f, 0.1e38f);
64 #endif
65 
66  EXPECT_NEAR(visionary::castClamped<double>(float(-1.234e27f)), -1.234e27, 1e20);
67 }
TEST
TEST(NumericConvTest, subtype)
Definition: NumericConvTest.cpp:12
NumericConv.h


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:45:33