ArmNN
 20.02
UtilityTests.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2020 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <boost/test/unit_test.hpp>
7 #include <boost/core/lightweight_test.hpp>
8 #include <boost/polymorphic_cast.hpp>
9 
10 #define ARMNN_POLYMORPHIC_CAST_TESTABLE
11 #define ARMNN_NUMERIC_CAST_TESTABLE
12 
16 
17 #include <armnn/Exceptions.hpp>
18 
19 // Tests of include/Utility files
20 BOOST_AUTO_TEST_SUITE(UtilityTests)
21 
22 BOOST_AUTO_TEST_CASE(PolymorphicDowncast)
23 {
24  using namespace armnn;
25  class Base
26  {
27  public:
28  virtual ~Base(){}
29  float v;
30  };
31 
32  class Child1 : public Base
33  {
34  public:
35  int j;
36  };
37 
38  class Child2 : public Base
39  {
40  public:
41  char b;
42  };
43 
44  Child1 child1;
45  Base* base1 = &child1;
46  auto ptr1 = dynamic_cast<Child1*>(base1);
47  BOOST_CHECK(ptr1 != nullptr);
48  BOOST_CHECK_NO_THROW(polymorphic_downcast<Child1*>(base1));
49  BOOST_CHECK(polymorphic_downcast<Child1*>(base1) == ptr1);
50 
51  auto ptr2 = dynamic_cast<Child2*>(base1);
52  BOOST_CHECK(ptr2 == nullptr);
53  BOOST_CHECK_THROW(polymorphic_downcast<Child2*>(base1), std::bad_cast);
54 
55  armnn::IgnoreUnused(ptr1, ptr2);
56 }
57 
58 
60 {
61  using namespace armnn;
62 
63  // To 8 bit
64  BOOST_CHECK_THROW(numeric_cast<unsigned char>(-1), std::bad_cast);
65  BOOST_CHECK_THROW(numeric_cast<unsigned char>(1 << 8), std::bad_cast);
66  BOOST_CHECK_THROW(numeric_cast<unsigned char>(1L << 16), std::bad_cast);
67  BOOST_CHECK_THROW(numeric_cast<unsigned char>(1LL << 32), std::bad_cast);
68 
69  BOOST_CHECK_THROW(numeric_cast<signed char>((1L << 8)*-1), std::bad_cast);
70  BOOST_CHECK_THROW(numeric_cast<signed char>((1L << 15)*-1), std::bad_cast);
71  BOOST_CHECK_THROW(numeric_cast<signed char>((1LL << 31)*-1), std::bad_cast);
72 
73  BOOST_CHECK_NO_THROW(numeric_cast<unsigned char>(1U));
74  BOOST_CHECK_NO_THROW(numeric_cast<unsigned char>(1L));
75  BOOST_CHECK_NO_THROW(numeric_cast<signed char>(-1));
76  BOOST_CHECK_NO_THROW(numeric_cast<signed char>(-1L));
77  BOOST_CHECK_NO_THROW(numeric_cast<signed char>((1 << 7)*-1));
78 
79  // To 16 bit
80  BOOST_CHECK_THROW(numeric_cast<uint16_t>(-1), std::bad_cast);
81  BOOST_CHECK_THROW(numeric_cast<uint16_t>(1L << 16), std::bad_cast);
82  BOOST_CHECK_THROW(numeric_cast<uint16_t>(1LL << 32), std::bad_cast);
83 
84  BOOST_CHECK_THROW(numeric_cast<int16_t>(1L << 15), std::bad_cast);
85  BOOST_CHECK_THROW(numeric_cast<int16_t>(1LL << 31), std::bad_cast);
86 
87  BOOST_CHECK_NO_THROW(numeric_cast<uint16_t>(1L << 8));
88  BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1L << 7));
89  BOOST_CHECK_NO_THROW(numeric_cast<int16_t>((1L << 15)*-1));
90 
91  // To 32 bit
92  BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1));
93  BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1 << 8));
94  BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1L << 16));
95  BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1LL << 31));
96 
97  BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(-1));
98  BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 8)*-1));
99  BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 16)*-1));
100  BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1LL << 31)*-1));
101 }
102 
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)
BOOST_AUTO_TEST_CASE(PolymorphicDowncast)
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
BOOST_AUTO_TEST_SUITE_END()