From 4cc7dfb2d43c3e98d69303986b03ff18a7961b23 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Thu, 28 Aug 2014 01:40:29 +0400 Subject: [PATCH] Float classification test --- libuavcan/test/util/templates.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/libuavcan/test/util/templates.cpp b/libuavcan/test/util/templates.cpp index f8844eec73..d494fdb4e1 100644 --- a/libuavcan/test/util/templates.cpp +++ b/libuavcan/test/util/templates.cpp @@ -4,6 +4,7 @@ #include #include +#include struct NonConvertible { }; @@ -40,3 +41,24 @@ TEST(Util, TryImplicitCast) //try_implicit_cast(ConvertibleToBool(true)); // Will fail to compile try_implicit_cast(NonConvertible(), NonDefaultConstructible(64)); } + +TEST(Util, FloatClassification) +{ + // NAN + ASSERT_TRUE(uavcan::isNaN(std::numeric_limits::quiet_NaN())); + ASSERT_FALSE(uavcan::isNaN(std::numeric_limits::infinity())); + ASSERT_FALSE(uavcan::isNaN(std::numeric_limits::infinity())); + ASSERT_FALSE(uavcan::isNaN(123.456)); + + // INF + ASSERT_TRUE(uavcan::isInfinity(std::numeric_limits::infinity())); + ASSERT_TRUE(uavcan::isInfinity(-std::numeric_limits::infinity())); + ASSERT_FALSE(uavcan::isInfinity(std::numeric_limits::quiet_NaN())); + ASSERT_FALSE(uavcan::isInfinity(-0.1L)); + + // Signbit + ASSERT_FALSE(uavcan::getSignBit(12)); + ASSERT_TRUE(uavcan::getSignBit(-std::numeric_limits::infinity())); + ASSERT_FALSE(uavcan::getSignBit(std::numeric_limits::infinity())); + ASSERT_TRUE(uavcan::getSignBit(-0.0)); // Negative zero +}