ArmNN  NotReleased
UtilsTests.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #include <boost/test/unit_test.hpp>
6 
7 
8 #include <armnn/Utils.hpp>
9 #include <armnn/Types.hpp>
10 #include <armnn/TypesUtils.hpp>
11 #include <armnn/Descriptors.hpp>
12 #include <GraphTopologicalSort.hpp>
13 #include <Graph.hpp>
14 #include <ResolveType.hpp>
15 
17 
18 BOOST_AUTO_TEST_CASE(DataTypeSize)
19 {
24 }
25 
26 BOOST_AUTO_TEST_CASE(PermuteDescriptorWithTooManyMappings)
27 {
28  BOOST_CHECK_THROW(armnn::PermuteDescriptor({ 0u, 1u, 2u, 3u, 4u, 5u }), armnn::InvalidArgumentException);
29 }
30 
31 BOOST_AUTO_TEST_CASE(PermuteDescriptorWithInvalidMappings1d)
32 {
34 }
35 
36 BOOST_AUTO_TEST_CASE(PermuteDescriptorWithInvalidMappings2d)
37 {
38  BOOST_CHECK_THROW(armnn::PermuteDescriptor({ 2u, 0u }), armnn::InvalidArgumentException);
39 }
40 
41 BOOST_AUTO_TEST_CASE(PermuteDescriptorWithInvalidMappings3d)
42 {
43  BOOST_CHECK_THROW(armnn::PermuteDescriptor({ 0u, 3u, 1u }), armnn::InvalidArgumentException);
44 }
45 
46 BOOST_AUTO_TEST_CASE(PermuteDescriptorWithInvalidMappings4d)
47 {
48  BOOST_CHECK_THROW(armnn::PermuteDescriptor({ 0u, 1u, 2u, 4u }), armnn::InvalidArgumentException);
49 }
50 
51 BOOST_AUTO_TEST_CASE(PermuteDescriptorWithInvalidMappings5d)
52 {
53  BOOST_CHECK_THROW(armnn::PermuteDescriptor({ 0u, 1u, 2u, 3u, 5u }), armnn::InvalidArgumentException);
54 }
55 
56 BOOST_AUTO_TEST_CASE(PermuteDescriptorWithDuplicatedMappings)
57 {
58  BOOST_CHECK_THROW(armnn::PermuteDescriptor({ 1u, 1u, 0u }), armnn::InvalidArgumentException);
59 }
60 
62 {
63  using namespace half_float::literal;
64  armnn::Half a = 1.0_h;
65 
66  float b = 1.0f;
67  armnn::Half c(b);
68 
69  // Test half type
70  BOOST_CHECK_EQUAL(a, b);
71  BOOST_CHECK_EQUAL(sizeof(c), 2);
72 
73  // Test half type is floating point type
74  BOOST_CHECK(std::is_floating_point<armnn::Half>::value);
75 
76  // Test utility function returns correct type.
78  constexpr bool isHalfType = std::is_same<armnn::Half, ResolvedType>::value;
79  BOOST_CHECK(isHalfType);
80 
81  //Test utility functions return correct size
83 
84  //Test utility functions return correct name
85  BOOST_CHECK((GetDataTypeName(armnn::DataType::Float16) == std::string("Float16")));
86 }
87 
88 BOOST_AUTO_TEST_CASE(GraphTopologicalSortSimpleTest)
89 {
90  std::map<int, std::vector<int>> graph;
91 
92  graph[0] = {2};
93  graph[1] = {3};
94  graph[2] = {4};
95  graph[3] = {4};
96  graph[4] = {5};
97  graph[5] = {};
98 
99  auto getNodeInputs = [graph](int node) -> std::vector<int>
100  {
101  return graph.find(node)->second;
102  };
103 
104  std::vector<int> targetNodes = {0, 1};
105 
106  std::vector<int> output;
107  bool sortCompleted = armnnUtils::GraphTopologicalSort<int>(targetNodes, getNodeInputs, output);
108 
109  BOOST_TEST(sortCompleted);
110 
111  std::vector<int> correctResult = {5, 4, 2, 0, 3, 1};
112  BOOST_CHECK_EQUAL_COLLECTIONS(output.begin(), output.end(), correctResult.begin(), correctResult.end());
113 }
114 
115 BOOST_AUTO_TEST_CASE(GraphTopologicalSortVariantTest)
116 {
117  std::map<int, std::vector<int>> graph;
118 
119  graph[0] = {2};
120  graph[1] = {2};
121  graph[2] = {3, 4};
122  graph[3] = {5};
123  graph[4] = {5};
124  graph[5] = {6};
125  graph[6] = {};
126 
127  auto getNodeInputs = [graph](int node) -> std::vector<int>
128  {
129  return graph.find(node)->second;
130  };
131 
132  std::vector<int> targetNodes = {0, 1};
133 
134  std::vector<int> output;
135  bool sortCompleted = armnnUtils::GraphTopologicalSort<int>(targetNodes, getNodeInputs, output);
136 
137  BOOST_TEST(sortCompleted);
138 
139  std::vector<int> correctResult = {6, 5, 3, 4, 2, 0, 1};
140  BOOST_CHECK_EQUAL_COLLECTIONS(output.begin(), output.end(), correctResult.begin(), correctResult.end());
141 }
142 
143 BOOST_AUTO_TEST_CASE(CyclicalGraphTopologicalSortTest)
144 {
145  std::map<int, std::vector<int>> graph;
146 
147  graph[0] = {1};
148  graph[1] = {2};
149  graph[2] = {0};
150 
151  auto getNodeInputs = [graph](int node) -> std::vector<int>
152  {
153  return graph.find(node)->second;
154  };
155 
156  std::vector<int> targetNodes = {0};
157 
158  std::vector<int> output;
159  bool sortCompleted = armnnUtils::GraphTopologicalSort<int>(targetNodes, getNodeInputs, output);
160 
161  BOOST_TEST(!sortCompleted);
162 }
163 
half_float::half Half
Definition: Half.hpp:16
typename ResolveTypeImpl< DT >::Type ResolveType
Definition: ResolveType.hpp:66
constexpr unsigned int GetDataTypeSize(DataType dataType)
Definition: TypesUtils.hpp:113
BOOST_AUTO_TEST_CASE(DataTypeSize)
Definition: UtilsTests.cpp:18
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
A PermuteDescriptor for the PermuteLayer.
constexpr const char * GetDataTypeName(DataType dataType)
Definition: TypesUtils.hpp:165