aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/armnn/test')
-rw-r--r--src/armnn/test/UtilityTests.cpp80
1 files changed, 79 insertions, 1 deletions
diff --git a/src/armnn/test/UtilityTests.cpp b/src/armnn/test/UtilityTests.cpp
index 8d933eb435..bad6c2250b 100644
--- a/src/armnn/test/UtilityTests.cpp
+++ b/src/armnn/test/UtilityTests.cpp
@@ -14,6 +14,8 @@
#include <armnn/Exceptions.hpp>
+#include <limits>
+
// Tests of include/Utility files
BOOST_AUTO_TEST_SUITE(UtilityTests)
@@ -160,6 +162,9 @@ BOOST_AUTO_TEST_CASE(NumericCast)
BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1L << 7));
BOOST_CHECK_NO_THROW(numeric_cast<int16_t>((1L << 15)*-1));
+ BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1U << 8));
+ BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1U << 14));
+
// To 32 bit
BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1));
BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1 << 8));
@@ -170,6 +175,79 @@ BOOST_AUTO_TEST_CASE(NumericCast)
BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 8)*-1));
BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 16)*-1));
BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1LL << 31)*-1));
-}
+
+ BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1U));
+ BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1U << 8));
+ BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1U << 16));
+ BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1U << 30));
+
+ float float_max = std::numeric_limits<float>::max();
+ float float_min = std::numeric_limits<float>::lowest();
+ auto int8_max = std::numeric_limits<int8_t>::max();
+ auto int16_max = std::numeric_limits<int16_t>::max();
+ auto int32_max = std::numeric_limits<int32_t>::max();
+ auto int8_min = std::numeric_limits<int8_t>::lowest();
+ auto int16_min = std::numeric_limits<int16_t>::lowest();
+ auto int32_min = std::numeric_limits<int32_t>::lowest();
+ auto uint8_max = std::numeric_limits<uint8_t>::max();
+ auto uint16_max = std::numeric_limits<uint16_t>::max();
+ auto uint32_max = std::numeric_limits<uint32_t>::max();
+ auto double_max = std::numeric_limits<double>::max();
+
+ // Float to signed integer
+ BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(1.324f));
+ BOOST_CHECK(1 == numeric_cast<int32_t>(1.324f));
+ BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(-1.0f));
+ BOOST_CHECK(-1 == numeric_cast<int32_t>(-1.0f));
+
+ BOOST_CHECK_NO_THROW(numeric_cast<int8_t>(static_cast<float>(int8_max)));
+ BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(static_cast<float>(int16_max)));
+ BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(static_cast<float>(int32_max)));
+
+ BOOST_CHECK_THROW(numeric_cast<int8_t>(float_max), std::bad_cast);
+ BOOST_CHECK_THROW(numeric_cast<int16_t>(float_max), std::bad_cast);
+ BOOST_CHECK_THROW(numeric_cast<int32_t>(float_max), std::bad_cast);
+
+ BOOST_CHECK_THROW(numeric_cast<int8_t>(float_min), std::bad_cast);
+ BOOST_CHECK_THROW(numeric_cast<int16_t>(float_min), std::bad_cast);
+ BOOST_CHECK_THROW(numeric_cast<int32_t>(float_min), std::bad_cast);
+
+ // Signed integer to float
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(1));
+ BOOST_CHECK(1.0 == numeric_cast<float>(1));
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(-1));
+ BOOST_CHECK(-1.0 == numeric_cast<float>(-1));
+
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(int8_max));
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(int16_max));
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(int32_max));
+
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(int8_min));
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(int16_min));
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(int32_min));
+
+ // Unsigned integer to float
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(1U));
+ BOOST_CHECK(1.0 == numeric_cast<float>(1U));
+
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(uint8_max));
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(uint16_max));
+ BOOST_CHECK_NO_THROW(numeric_cast<float>(uint32_max));
+
+ // Float to unsigned integer
+ BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1.43243f));
+ BOOST_CHECK(1 == numeric_cast<uint32_t>(1.43243f));
+
+ BOOST_CHECK_THROW(numeric_cast<uint32_t>(-1.1f), std::bad_cast);
+ BOOST_CHECK_THROW(numeric_cast<uint32_t>(float_max), std::bad_cast);
+
+ // Double checks
+ BOOST_CHECK_THROW(numeric_cast<int32_t>(double_max), std::bad_cast);
+ BOOST_CHECK_THROW(numeric_cast<int32_t>(double_max), std::bad_cast);
+ BOOST_CHECK_THROW(numeric_cast<float>(double_max), std::bad_cast);
+ BOOST_CHECK_NO_THROW(numeric_cast<double>(int32_max));
+ BOOST_CHECK_NO_THROW(numeric_cast<long double>(int32_max));
+
+ }
BOOST_AUTO_TEST_SUITE_END()