Float classification test

This commit is contained in:
Pavel Kirienko
2014-08-28 01:40:29 +04:00
parent 8240c7962b
commit 4cc7dfb2d4
+22
View File
@@ -4,6 +4,7 @@
#include <gtest/gtest.h>
#include <uavcan/util/templates.hpp>
#include <limits>
struct NonConvertible { };
@@ -40,3 +41,24 @@ TEST(Util, TryImplicitCast)
//try_implicit_cast<NonDefaultConstructible>(ConvertibleToBool(true)); // Will fail to compile
try_implicit_cast<NonDefaultConstructible>(NonConvertible(), NonDefaultConstructible(64));
}
TEST(Util, FloatClassification)
{
// NAN
ASSERT_TRUE(uavcan::isNaN(std::numeric_limits<float>::quiet_NaN()));
ASSERT_FALSE(uavcan::isNaN(std::numeric_limits<double>::infinity()));
ASSERT_FALSE(uavcan::isNaN(std::numeric_limits<long double>::infinity()));
ASSERT_FALSE(uavcan::isNaN(123.456));
// INF
ASSERT_TRUE(uavcan::isInfinity(std::numeric_limits<float>::infinity()));
ASSERT_TRUE(uavcan::isInfinity(-std::numeric_limits<long double>::infinity()));
ASSERT_FALSE(uavcan::isInfinity(std::numeric_limits<float>::quiet_NaN()));
ASSERT_FALSE(uavcan::isInfinity(-0.1L));
// Signbit
ASSERT_FALSE(uavcan::getSignBit(12));
ASSERT_TRUE(uavcan::getSignBit(-std::numeric_limits<long double>::infinity()));
ASSERT_FALSE(uavcan::getSignBit(std::numeric_limits<float>::infinity()));
ASSERT_TRUE(uavcan::getSignBit(-0.0)); // Negative zero
}