// // Copyright © 2020 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include #include #include #define ARMNN_POLYMORPHIC_CAST_TESTABLE #define ARMNN_NUMERIC_CAST_TESTABLE #include #include #include #include // Tests of include/Utility files BOOST_AUTO_TEST_SUITE(UtilityTests) BOOST_AUTO_TEST_CASE(PolymorphicDowncast) { using namespace armnn; class Base { public: virtual ~Base(){} float v; }; class Child1 : public Base { public: int j; }; class Child2 : public Base { public: char b; }; Child1 child1; Base* base1 = &child1; auto ptr1 = dynamic_cast(base1); BOOST_CHECK(ptr1 != nullptr); BOOST_CHECK_NO_THROW(polymorphic_downcast(base1)); BOOST_CHECK(polymorphic_downcast(base1) == ptr1); auto ptr2 = dynamic_cast(base1); BOOST_CHECK(ptr2 == nullptr); BOOST_CHECK_THROW(polymorphic_downcast(base1), std::bad_cast); 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()