ArmNN
 20.05
UtilityTests.cpp File Reference
#include <boost/test/unit_test.hpp>
#include <boost/core/lightweight_test.hpp>
#include <armnn/utility/IgnoreUnused.hpp>
#include <armnn/utility/PolymorphicDowncast.hpp>
#include <armnn/utility/NumericCast.hpp>
#include <armnn/Exceptions.hpp>

Go to the source code of this file.

Macros

#define ARMNN_POLYMORPHIC_CAST_TESTABLE
 
#define ARMNN_NUMERIC_CAST_TESTABLE
 

Functions

 BOOST_AUTO_TEST_CASE (PolymorphicDowncast)
 
 BOOST_AUTO_TEST_CASE (PolymorphicPointerDowncast_SharedPointer)
 
 BOOST_AUTO_TEST_CASE (PolymorphicPointerDowncast_BuildInPointer)
 
 BOOST_AUTO_TEST_CASE (NumericCast)
 

Macro Definition Documentation

◆ ARMNN_NUMERIC_CAST_TESTABLE

#define ARMNN_NUMERIC_CAST_TESTABLE

Definition at line 10 of file UtilityTests.cpp.

◆ ARMNN_POLYMORPHIC_CAST_TESTABLE

#define ARMNN_POLYMORPHIC_CAST_TESTABLE

Definition at line 9 of file UtilityTests.cpp.

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/4]

BOOST_AUTO_TEST_CASE ( PolymorphicDowncast  )

Definition at line 21 of file UtilityTests.cpp.

References BOOST_CHECK(), and armnn::IgnoreUnused().

22 {
23  using namespace armnn;
24  class Base
25  {
26  public:
27  virtual ~Base(){}
28  float v;
29  };
30 
31  class Child1 : public Base
32  {
33  public:
34  int j;
35  };
36 
37  class Child2 : public Base
38  {
39  public:
40  char b;
41  };
42 
43  Child1 child1;
44  Base* base1 = &child1;
45  auto ptr1 = dynamic_cast<Child1*>(base1);
46  BOOST_CHECK(ptr1 != nullptr);
47  BOOST_CHECK_NO_THROW(armnn::PolymorphicDowncast<Child1*>(base1));
48  BOOST_CHECK(armnn::PolymorphicDowncast<Child1*>(base1) == ptr1);
49 
50  auto ptr2 = dynamic_cast<Child2*>(base1);
51  BOOST_CHECK(ptr2 == nullptr);
52  BOOST_CHECK_THROW(armnn::PolymorphicDowncast<Child2*>(base1), std::bad_cast);
53 
54  armnn::IgnoreUnused(ptr1, ptr2);
55 }
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)

◆ BOOST_AUTO_TEST_CASE() [2/4]

BOOST_AUTO_TEST_CASE ( PolymorphicPointerDowncast_SharedPointer  )

Definition at line 58 of file UtilityTests.cpp.

References BOOST_CHECK(), and armnn::IgnoreUnused().

59 {
60  using namespace armnn;
61  class Base
62  {
63  public:
64  virtual ~Base(){}
65  float v;
66  };
67 
68  class Child1 : public Base
69  {
70  public:
71  int j;
72  };
73 
74  class Child2 : public Base
75  {
76  public:
77  char b;
78  };
79 
80  std::shared_ptr<Base> base1 = std::make_shared<Child1>();
81 
82  std::shared_ptr<Child1> ptr1 = std::static_pointer_cast<Child1>(base1);
83  BOOST_CHECK(ptr1);
84  BOOST_CHECK_NO_THROW(armnn::PolymorphicPointerDowncast<Child1>(base1));
85  BOOST_CHECK(armnn::PolymorphicPointerDowncast<Child1>(base1) == ptr1);
86 
87  auto ptr2 = std::dynamic_pointer_cast<Child2>(base1);
88  BOOST_CHECK(!ptr2);
89  BOOST_CHECK_THROW(armnn::PolymorphicPointerDowncast<Child2>(base1), std::bad_cast);
90 
91  armnn::IgnoreUnused(ptr1, ptr2);
92 }
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)

◆ BOOST_AUTO_TEST_CASE() [3/4]

BOOST_AUTO_TEST_CASE ( PolymorphicPointerDowncast_BuildInPointer  )

Definition at line 95 of file UtilityTests.cpp.

References BOOST_CHECK(), and armnn::IgnoreUnused().

96 {
97  using namespace armnn;
98  class Base
99  {
100  public:
101  virtual ~Base(){}
102  float v;
103  };
104 
105  class Child1 : public Base
106  {
107  public:
108  int j;
109  };
110 
111  class Child2 : public Base
112  {
113  public:
114  char b;
115  };
116 
117  Child1 child1;
118  Base* base1 = &child1;
119  auto ptr1 = dynamic_cast<Child1*>(base1);
120  BOOST_CHECK(ptr1 != nullptr);
121  BOOST_CHECK_NO_THROW(armnn::PolymorphicPointerDowncast<Child1>(base1));
122  BOOST_CHECK(armnn::PolymorphicPointerDowncast<Child1>(base1) == ptr1);
123 
124  auto ptr2 = dynamic_cast<Child2*>(base1);
125  BOOST_CHECK(ptr2 == nullptr);
126  BOOST_CHECK_THROW(armnn::PolymorphicPointerDowncast<Child2>(base1), std::bad_cast);
127 
128  armnn::IgnoreUnused(ptr1, ptr2);
129 }
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)

◆ BOOST_AUTO_TEST_CASE() [4/4]

BOOST_AUTO_TEST_CASE ( NumericCast  )

Definition at line 132 of file UtilityTests.cpp.

References BOOST_AUTO_TEST_SUITE_END().

133 {
134  using namespace armnn;
135 
136  // To 8 bit
137  BOOST_CHECK_THROW(numeric_cast<unsigned char>(-1), std::bad_cast);
138  BOOST_CHECK_THROW(numeric_cast<unsigned char>(1 << 8), std::bad_cast);
139  BOOST_CHECK_THROW(numeric_cast<unsigned char>(1L << 16), std::bad_cast);
140  BOOST_CHECK_THROW(numeric_cast<unsigned char>(1LL << 32), std::bad_cast);
141 
142  BOOST_CHECK_THROW(numeric_cast<signed char>((1L << 8)*-1), std::bad_cast);
143  BOOST_CHECK_THROW(numeric_cast<signed char>((1L << 15)*-1), std::bad_cast);
144  BOOST_CHECK_THROW(numeric_cast<signed char>((1LL << 31)*-1), std::bad_cast);
145 
146  BOOST_CHECK_NO_THROW(numeric_cast<unsigned char>(1U));
147  BOOST_CHECK_NO_THROW(numeric_cast<unsigned char>(1L));
148  BOOST_CHECK_NO_THROW(numeric_cast<signed char>(-1));
149  BOOST_CHECK_NO_THROW(numeric_cast<signed char>(-1L));
150  BOOST_CHECK_NO_THROW(numeric_cast<signed char>((1 << 7)*-1));
151 
152  // To 16 bit
153  BOOST_CHECK_THROW(numeric_cast<uint16_t>(-1), std::bad_cast);
154  BOOST_CHECK_THROW(numeric_cast<uint16_t>(1L << 16), std::bad_cast);
155  BOOST_CHECK_THROW(numeric_cast<uint16_t>(1LL << 32), std::bad_cast);
156 
157  BOOST_CHECK_THROW(numeric_cast<int16_t>(1L << 15), std::bad_cast);
158  BOOST_CHECK_THROW(numeric_cast<int16_t>(1LL << 31), std::bad_cast);
159 
160  BOOST_CHECK_NO_THROW(numeric_cast<uint16_t>(1L << 8));
161  BOOST_CHECK_NO_THROW(numeric_cast<int16_t>(1L << 7));
162  BOOST_CHECK_NO_THROW(numeric_cast<int16_t>((1L << 15)*-1));
163 
164  // To 32 bit
165  BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1));
166  BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1 << 8));
167  BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1L << 16));
168  BOOST_CHECK_NO_THROW(numeric_cast<uint32_t>(1LL << 31));
169 
170  BOOST_CHECK_NO_THROW(numeric_cast<int32_t>(-1));
171  BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 8)*-1));
172  BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1L << 16)*-1));
173  BOOST_CHECK_NO_THROW(numeric_cast<int32_t>((1LL << 31)*-1));
174 }
Copyright (c) 2020 ARM Limited.