1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include "AbsTestImpl.hpp"
7 #include "ElementwiseUnaryTestImpl.hpp"
8
9
10 template<armnn::DataType ArmnnType, typename T>
Abs2dTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)11 LayerTestResult<T, 2> Abs2dTest(
12 armnn::IWorkloadFactory& workloadFactory,
13 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
14 const armnn::ITensorHandleFactory& tensorHandleFactory)
15 {
16 const unsigned int inputShape[] = { 2, 2 };
17
18 std::vector<float> inputValues
19 {
20 -0.1f, 0.2f,
21 0.3f, -0.4f
22 };
23
24 // Calculate output values for input.
25 auto f = [](float value)
26 {
27 return std::abs(value);
28 };
29 std::vector<float> expectedOutputValues(inputValues.size());
30 std::transform(inputValues.begin(), inputValues.end(), expectedOutputValues.begin(), f);
31
32 return ElementwiseUnaryTestHelper<2, ArmnnType>(
33 workloadFactory,
34 memoryManager,
35 armnn::UnaryOperation::Abs,
36 inputShape,
37 inputValues,
38 inputShape,
39 expectedOutputValues,
40 tensorHandleFactory);
41 }
42
43 template<armnn::DataType ArmnnType, typename T>
Abs3dTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)44 LayerTestResult<T, 3> Abs3dTest(
45 armnn::IWorkloadFactory& workloadFactory,
46 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
47 const armnn::ITensorHandleFactory& tensorHandleFactory)
48 {
49 const unsigned int inputShape[] = { 3, 1, 2 };
50
51 std::vector<float> inputValues
52 {
53 -0.1f, -0.2f, -0.3f,
54 0.1f, 0.2f, 0.3f
55 };
56
57 auto f = [](float value)
58 {
59 return std::abs(value);
60 };
61 std::vector<float>expectedOutputValues(inputValues.size());
62 std::transform(inputValues.begin(), inputValues.end(), expectedOutputValues.begin(), f);
63
64 return ElementwiseUnaryTestHelper<3, ArmnnType>(
65 workloadFactory,
66 memoryManager,
67 armnn::UnaryOperation::Abs,
68 inputShape,
69 inputValues,
70 inputShape,
71 expectedOutputValues,
72 tensorHandleFactory);
73 }
74
75 template<armnn::DataType ArmnnType, typename T>
AbsZeroTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)76 LayerTestResult<T, 2> AbsZeroTest(
77 armnn::IWorkloadFactory& workloadFactory,
78 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
79 const armnn::ITensorHandleFactory& tensorHandleFactory)
80 {
81 const unsigned int inputShape[] = { 1, 2 };
82
83 std::vector<float> inputValues
84 {
85 0.f, -0.f
86 };
87
88 std::vector<float> expectedOutputValues
89 {
90 0.f, 0.f
91 };
92
93 return ElementwiseUnaryTestHelper<2, ArmnnType>(
94 workloadFactory,
95 memoryManager,
96 armnn::UnaryOperation::Abs,
97 inputShape,
98 inputValues,
99 inputShape,
100 expectedOutputValues,
101 tensorHandleFactory);
102 }
103
104 //
105 // Explicit template specializations
106 //
107
108 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
109 Abs2dTest<armnn::DataType::Float32>(
110 armnn::IWorkloadFactory& workloadFactory,
111 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
112 const armnn::ITensorHandleFactory& tensorHandleFactory);
113
114 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
115 Abs2dTest<armnn::DataType::Float16>(
116 armnn::IWorkloadFactory& workloadFactory,
117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
118 const armnn::ITensorHandleFactory& tensorHandleFactory);
119
120 template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 2>
121 Abs2dTest<armnn::DataType::Signed32>(
122 armnn::IWorkloadFactory& workloadFactory,
123 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
124 const armnn::ITensorHandleFactory& tensorHandleFactory);
125
126 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
127 Abs2dTest<armnn::DataType::QAsymmS8>(
128 armnn::IWorkloadFactory& workloadFactory,
129 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
130 const armnn::ITensorHandleFactory& tensorHandleFactory);
131
132 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
133 Abs2dTest<armnn::DataType::QAsymmU8>(
134 armnn::IWorkloadFactory& workloadFactory,
135 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
136 const armnn::ITensorHandleFactory& tensorHandleFactory);
137
138 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
139 Abs2dTest<armnn::DataType::QSymmS16>(
140 armnn::IWorkloadFactory& workloadFactory,
141 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
142 const armnn::ITensorHandleFactory& tensorHandleFactory);
143
144 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 3>
145 Abs3dTest<armnn::DataType::Float32>(
146 armnn::IWorkloadFactory& workloadFactory,
147 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
148 const armnn::ITensorHandleFactory& tensorHandleFactory);
149
150 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 3>
151 Abs3dTest<armnn::DataType::Float16>(
152 armnn::IWorkloadFactory& workloadFactory,
153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
154 const armnn::ITensorHandleFactory& tensorHandleFactory);
155
156 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 3>
157 Abs3dTest<armnn::DataType::QAsymmS8>(
158 armnn::IWorkloadFactory& workloadFactory,
159 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
160 const armnn::ITensorHandleFactory& tensorHandleFactory);
161
162 template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 3>
163 Abs3dTest<armnn::DataType::Signed32>(
164 armnn::IWorkloadFactory& workloadFactory,
165 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
166 const armnn::ITensorHandleFactory& tensorHandleFactory);
167
168 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 3>
169 Abs3dTest<armnn::DataType::QAsymmU8>(
170 armnn::IWorkloadFactory& workloadFactory,
171 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
172 const armnn::ITensorHandleFactory& tensorHandleFactory);
173
174 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
175 Abs3dTest<armnn::DataType::QSymmS16>(
176 armnn::IWorkloadFactory& workloadFactory,
177 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
178 const armnn::ITensorHandleFactory& tensorHandleFactory);
179
180 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
181 AbsZeroTest<armnn::DataType::Float32>(
182 armnn::IWorkloadFactory& workloadFactory,
183 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
184 const armnn::ITensorHandleFactory& tensorHandleFactory);
185
186 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
187 AbsZeroTest<armnn::DataType::Float16>(
188 armnn::IWorkloadFactory& workloadFactory,
189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
190 const armnn::ITensorHandleFactory& tensorHandleFactory);
191
192 template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 2>
193 AbsZeroTest<armnn::DataType::Signed32>(
194 armnn::IWorkloadFactory& workloadFactory,
195 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
196 const armnn::ITensorHandleFactory& tensorHandleFactory);