6 #include <boost/test/unit_test.hpp> 8 #define ARMNN_POLYMORPHIC_CAST_TESTABLE 9 #define ARMNN_NUMERIC_CAST_TESTABLE 22 using namespace armnn;
30 class Child1 :
public Base
36 class Child2 :
public Base
43 Base* base1 = &child1;
44 auto ptr1 =
dynamic_cast<Child1*
>(base1);
45 BOOST_CHECK(ptr1 !=
nullptr);
46 BOOST_CHECK_NO_THROW(armnn::PolymorphicDowncast<Child1*>(base1));
47 BOOST_CHECK(armnn::PolymorphicDowncast<Child1*>(base1) == ptr1);
49 auto ptr2 =
dynamic_cast<Child2*
>(base1);
50 BOOST_CHECK(ptr2 ==
nullptr);
51 BOOST_CHECK_THROW(armnn::PolymorphicDowncast<Child2*>(base1), std::bad_cast);
59 using namespace armnn;
67 class Child1 :
public Base
73 class Child2 :
public Base
79 std::shared_ptr<Base> base1 = std::make_shared<Child1>();
81 std::shared_ptr<Child1> ptr1 = std::static_pointer_cast<Child1>(base1);
83 BOOST_CHECK_NO_THROW(armnn::PolymorphicPointerDowncast<Child1>(base1));
84 BOOST_CHECK(armnn::PolymorphicPointerDowncast<Child1>(base1) == ptr1);
86 auto ptr2 = std::dynamic_pointer_cast<Child2>(base1);
88 BOOST_CHECK_THROW(armnn::PolymorphicPointerDowncast<Child2>(base1), std::bad_cast);
96 using namespace armnn;
104 class Child1 :
public Base
110 class Child2 :
public Base
117 Base* base1 = &child1;
118 auto ptr1 =
dynamic_cast<Child1*
>(base1);
119 BOOST_CHECK(ptr1 !=
nullptr);
120 BOOST_CHECK_NO_THROW(armnn::PolymorphicPointerDowncast<Child1>(base1));
121 BOOST_CHECK(armnn::PolymorphicPointerDowncast<Child1>(base1) == ptr1);
123 auto ptr2 =
dynamic_cast<Child2*
>(base1);
124 BOOST_CHECK(ptr2 ==
nullptr);
125 BOOST_CHECK_THROW(armnn::PolymorphicPointerDowncast<Child2>(base1), std::bad_cast);
133 using namespace armnn;
136 BOOST_CHECK_THROW(numeric_cast<unsigned char>(-1), std::bad_cast);
137 BOOST_CHECK_THROW(numeric_cast<unsigned char>(1 << 8), std::bad_cast);
138 BOOST_CHECK_THROW(numeric_cast<unsigned char>(1L << 16), std::bad_cast);
139 BOOST_CHECK_THROW(numeric_cast<unsigned char>(1LL << 32), std::bad_cast);
141 BOOST_CHECK_THROW(numeric_cast<signed char>((1L << 8)*-1), std::bad_cast);
142 BOOST_CHECK_THROW(numeric_cast<signed char>((1L << 15)*-1), std::bad_cast);
143 BOOST_CHECK_THROW(numeric_cast<signed char>((1LL << 31)*-1), std::bad_cast);
145 BOOST_CHECK_NO_THROW(numeric_cast<unsigned char>(1U));
146 BOOST_CHECK_NO_THROW(numeric_cast<unsigned char>(1L));
147 BOOST_CHECK_NO_THROW(numeric_cast<signed char>(-1));
148 BOOST_CHECK_NO_THROW(numeric_cast<signed char>(-1L));
149 BOOST_CHECK_NO_THROW(numeric_cast<signed char>((1 << 7)*-1));
152 BOOST_CHECK_THROW(numeric_cast<uint16_t>(-1), std::bad_cast);
153 BOOST_CHECK_THROW(numeric_cast<uint16_t>(1L << 16), std::bad_cast);
154 BOOST_CHECK_THROW(numeric_cast<uint16_t>(1LL << 32), std::bad_cast);
156 BOOST_CHECK_THROW(numeric_cast<int16_t>(1L << 15), std::bad_cast);
157 BOOST_CHECK_THROW(numeric_cast<int16_t>(1LL << 31), std::bad_cast);
159 BOOST_CHECK_NO_THROW(numeric_cast<uint16_t>(1L << 8));
160 BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1L << 7));
161 BOOST_CHECK_NO_THROW(numeric_cast<int16_t>((1L << 15)*-1));
164 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1));
165 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1 << 8));
166 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1L << 16));
167 BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1LL << 31));
169 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(-1));
170 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 8)*-1));
171 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 16)*-1));
172 BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1LL << 31)*-1));
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
BOOST_AUTO_TEST_CASE(PolymorphicDowncast)
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
BOOST_AUTO_TEST_SUITE_END()
DestType PolymorphicDowncast(SourceType value)
Polymorphic downcast for build in pointers only.