templates.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #include <gtest/gtest.h>
7 #include <limits>
8 
9 struct NonConvertible { };
10 
12 {
13  const bool value;
15  operator bool() const { return value; }
16  bool operator!() const { return !value; }
17 };
18 
20 {
22 };
23 
24 TEST(Util, CoerceOrFallback)
25 {
27 
28  ASSERT_FALSE(coerceOrFallback<bool>(NonConvertible()));
29  ASSERT_TRUE(coerceOrFallback<bool>(NonConvertible(), true));
30 
31  ASSERT_EQ(0, coerceOrFallback<long>(NonConvertible()));
32  ASSERT_EQ(9000, coerceOrFallback<long>(NonConvertible(), 9000));
33 
34  ASSERT_TRUE(coerceOrFallback<bool>(ConvertibleToBool(true)));
35  ASSERT_TRUE(coerceOrFallback<bool>(ConvertibleToBool(true), false));
36  ASSERT_FALSE(coerceOrFallback<bool>(ConvertibleToBool(false)));
37  ASSERT_FALSE(coerceOrFallback<bool>(ConvertibleToBool(false), true));
38  ASSERT_EQ(1, coerceOrFallback<long>(ConvertibleToBool(true)));
39  ASSERT_EQ(0, coerceOrFallback<long>(ConvertibleToBool(false), -100));
40 
41  //coerceOrFallback<NonDefaultConstructible>(ConvertibleToBool(true)); // Will fail to compile
42  coerceOrFallback<NonDefaultConstructible>(NonConvertible(), NonDefaultConstructible(64));
43 }
44 
45 TEST(Util, FloatClassification)
46 {
47  // NAN
48  ASSERT_TRUE(uavcan::isNaN(std::numeric_limits<float>::quiet_NaN()));
49  ASSERT_FALSE(uavcan::isNaN(std::numeric_limits<double>::infinity()));
50  ASSERT_FALSE(uavcan::isNaN(std::numeric_limits<long double>::infinity()));
51  ASSERT_FALSE(uavcan::isNaN(123.456));
52 
53  // INF
54  ASSERT_TRUE(uavcan::isInfinity(std::numeric_limits<float>::infinity()));
55  ASSERT_TRUE(uavcan::isInfinity(-std::numeric_limits<long double>::infinity()));
56  ASSERT_FALSE(uavcan::isInfinity(std::numeric_limits<float>::quiet_NaN()));
57  ASSERT_FALSE(uavcan::isInfinity(-0.1L));
58 
59  // Signbit
60  ASSERT_FALSE(uavcan::getSignBit(12));
61  ASSERT_TRUE(uavcan::getSignBit(-std::numeric_limits<long double>::infinity()));
62  ASSERT_FALSE(uavcan::getSignBit(std::numeric_limits<float>::infinity()));
63  ASSERT_TRUE(uavcan::getSignBit(-0.0)); // Negative zero
64 }
NonDefaultConstructible::NonDefaultConstructible
NonDefaultConstructible(int)
Definition: templates.cpp:21
templates.hpp
uavcan::isNaN
bool isNaN(T arg)
Definition: templates.hpp:501
NonConvertible
Definition: templates.cpp:9
uavcan::getSignBit
bool getSignBit(T arg)
Definition: templates.hpp:545
uavcan::isInfinity
bool isInfinity(T arg)
Definition: templates.hpp:517
NonDefaultConstructible
Definition: templates.cpp:19
ConvertibleToBool
Definition: templates.cpp:11
TEST
TEST(Util, CoerceOrFallback)
Definition: templates.cpp:24
ConvertibleToBool::operator!
bool operator!() const
Definition: templates.cpp:16
uavcan::coerceOrFallback
UAVCAN_EXPORT To coerceOrFallback(const From &from, const To &default_)
Definition: templates.hpp:172
ConvertibleToBool::ConvertibleToBool
ConvertibleToBool(bool value)
Definition: templates.cpp:14
ConvertibleToBool::value
const bool value
Definition: templates.cpp:13


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:03