From 53d092d34c1e9924151d8d3a228c04620c1baf5c Mon Sep 17 00:00:00 2001 From: Derek Lamberti Date: Wed, 19 Feb 2020 13:40:56 +0000 Subject: IVGCVSW-4486 Introduce numeric_cast implementation Change-Id: I3e64bca4a1709ac199513676579cf3c9a3090f26 Signed-off-by: Derek Lamberti --- src/armnn/test/UtilityTests.cpp | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'src/armnn/test') diff --git a/src/armnn/test/UtilityTests.cpp b/src/armnn/test/UtilityTests.cpp index 5309d82ce4..7be5c9518a 100644 --- a/src/armnn/test/UtilityTests.cpp +++ b/src/armnn/test/UtilityTests.cpp @@ -8,9 +8,11 @@ #include #define ARMNN_POLYMORPHIC_CAST_TESTABLE +#define ARMNN_NUMERIC_CAST_TESTABLE #include #include +#include #include @@ -53,4 +55,49 @@ BOOST_AUTO_TEST_CASE(PolymorphicDowncast) armnn::IgnoreUnused(ptr1, ptr2); } + +BOOST_AUTO_TEST_CASE(NumericCast) +{ + using namespace armnn; + + // To 8 bit + BOOST_CHECK_THROW(numeric_cast(-1), std::bad_cast); + BOOST_CHECK_THROW(numeric_cast(1 << 8), std::bad_cast); + BOOST_CHECK_THROW(numeric_cast(1L << 16), std::bad_cast); + BOOST_CHECK_THROW(numeric_cast(1LL << 32), std::bad_cast); + + BOOST_CHECK_THROW(numeric_cast((1L << 8)*-1), std::bad_cast); + BOOST_CHECK_THROW(numeric_cast((1L << 15)*-1), std::bad_cast); + BOOST_CHECK_THROW(numeric_cast((1LL << 31)*-1), std::bad_cast); + + BOOST_CHECK_NO_THROW(numeric_cast(1U)); + BOOST_CHECK_NO_THROW(numeric_cast(1L)); + BOOST_CHECK_NO_THROW(numeric_cast(-1)); + BOOST_CHECK_NO_THROW(numeric_cast(-1L)); + BOOST_CHECK_NO_THROW(numeric_cast((1 << 7)*-1)); + + // To 16 bit + BOOST_CHECK_THROW(numeric_cast(-1), std::bad_cast); + BOOST_CHECK_THROW(numeric_cast(1L << 16), std::bad_cast); + BOOST_CHECK_THROW(numeric_cast(1LL << 32), std::bad_cast); + + BOOST_CHECK_THROW(numeric_cast(1L << 15), std::bad_cast); + BOOST_CHECK_THROW(numeric_cast(1LL << 31), std::bad_cast); + + BOOST_CHECK_NO_THROW(numeric_cast(1L << 8)); + BOOST_CHECK_NO_THROW(numeric_cast(1L << 7)); + BOOST_CHECK_NO_THROW(numeric_cast((1L << 15)*-1)); + + // To 32 bit + BOOST_CHECK_NO_THROW(numeric_cast(1)); + BOOST_CHECK_NO_THROW(numeric_cast(1 << 8)); + BOOST_CHECK_NO_THROW(numeric_cast(1L << 16)); + BOOST_CHECK_NO_THROW(numeric_cast(1LL << 31)); + + BOOST_CHECK_NO_THROW(numeric_cast(-1)); + BOOST_CHECK_NO_THROW(numeric_cast((1L << 8)*-1)); + BOOST_CHECK_NO_THROW(numeric_cast((1L << 16)*-1)); + BOOST_CHECK_NO_THROW(numeric_cast((1LL << 31)*-1)); +} + BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.1