blob: 8650f94b1aa7edeb858fa8506f28cec96bceca11 [file] [log] [blame]
Sadik Armagan9199e582019-09-05 17:35:31 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "AbsTestImpl.hpp"
josh minor4a3c6102020-01-06 16:40:46 -06007#include "ElementwiseUnaryTestImpl.hpp"
Sadik Armagan9199e582019-09-05 17:35:31 +01008
Sadik Armagan9199e582019-09-05 17:35:31 +01009
Sadik Armagan9199e582019-09-05 17:35:31 +010010template<armnn::DataType ArmnnType, typename T>
11LayerTestResult<T, 2> Abs2dTest(
12 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +010013 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
14 const armnn::ITensorHandleFactory& tensorHandleFactory)
Sadik Armagan9199e582019-09-05 17:35:31 +010015{
josh minor4a3c6102020-01-06 16:40:46 -060016 const unsigned int inputShape[] = { 2, 2 };
Sadik Armagan9199e582019-09-05 17:35:31 +010017
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
josh minor4a3c6102020-01-06 16:40:46 -060032 return ElementwiseUnaryTestHelper<2, ArmnnType>(
33 workloadFactory,
34 memoryManager,
35 armnn::UnaryOperation::Abs,
36 inputShape,
37 inputValues,
38 inputShape,
Keith Davis33a626f2020-08-27 15:38:12 +010039 expectedOutputValues,
40 tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +010041}
42
43template<armnn::DataType ArmnnType, typename T>
44LayerTestResult<T, 3> Abs3dTest(
45 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +010046 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
47 const armnn::ITensorHandleFactory& tensorHandleFactory)
Sadik Armagan9199e582019-09-05 17:35:31 +010048{
josh minor4a3c6102020-01-06 16:40:46 -060049 const unsigned int inputShape[] = { 3, 1, 2 };
Sadik Armagan9199e582019-09-05 17:35:31 +010050
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
josh minor4a3c6102020-01-06 16:40:46 -060064 return ElementwiseUnaryTestHelper<3, ArmnnType>(
65 workloadFactory,
66 memoryManager,
67 armnn::UnaryOperation::Abs,
68 inputShape,
69 inputValues,
70 inputShape,
Keith Davis33a626f2020-08-27 15:38:12 +010071 expectedOutputValues,
72 tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +010073}
74
75template<armnn::DataType ArmnnType, typename T>
76LayerTestResult<T, 2> AbsZeroTest(
77 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +010078 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
79 const armnn::ITensorHandleFactory& tensorHandleFactory)
Sadik Armagan9199e582019-09-05 17:35:31 +010080{
josh minor4a3c6102020-01-06 16:40:46 -060081 const unsigned int inputShape[] = { 1, 2 };
Sadik Armagan9199e582019-09-05 17:35:31 +010082
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
josh minor4a3c6102020-01-06 16:40:46 -060093 return ElementwiseUnaryTestHelper<2, ArmnnType>(
94 workloadFactory,
95 memoryManager,
96 armnn::UnaryOperation::Abs,
97 inputShape,
98 inputValues,
99 inputShape,
Keith Davis33a626f2020-08-27 15:38:12 +0100100 expectedOutputValues,
101 tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +0100102}
103
104//
105// Explicit template specializations
106//
107
108template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
109Abs2dTest<armnn::DataType::Float32>(
110 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100111 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
112 const armnn::ITensorHandleFactory& tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +0100113
Kevin Mayb6482f32019-09-11 12:31:38 +0100114template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
115Abs2dTest<armnn::DataType::Float16>(
116 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
118 const armnn::ITensorHandleFactory& tensorHandleFactory);
Kevin Mayb6482f32019-09-11 12:31:38 +0100119
Kevin Mayec52c3a2020-04-24 09:42:31 +0100120template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 2>
121Abs2dTest<armnn::DataType::Signed32>(
122 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100123 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
124 const armnn::ITensorHandleFactory& tensorHandleFactory);
Kevin Mayec52c3a2020-04-24 09:42:31 +0100125
Sadik Armagan303980c2020-04-17 12:45:14 +0100126template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
127Abs2dTest<armnn::DataType::QAsymmS8>(
128 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100129 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
130 const armnn::ITensorHandleFactory& tensorHandleFactory);
Sadik Armagan303980c2020-04-17 12:45:14 +0100131
Derek Lambertif90c56d2020-01-10 17:14:08 +0000132template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
133Abs2dTest<armnn::DataType::QAsymmU8>(
Sadik Armagan9199e582019-09-05 17:35:31 +0100134 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100135 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
136 const armnn::ITensorHandleFactory& tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +0100137
Derek Lambertif90c56d2020-01-10 17:14:08 +0000138template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
139Abs2dTest<armnn::DataType::QSymmS16>(
Sadik Armagan9199e582019-09-05 17:35:31 +0100140 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100141 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
142 const armnn::ITensorHandleFactory& tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +0100143
144template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 3>
145Abs3dTest<armnn::DataType::Float32>(
146 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100147 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
148 const armnn::ITensorHandleFactory& tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +0100149
Kevin Mayb6482f32019-09-11 12:31:38 +0100150template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 3>
151Abs3dTest<armnn::DataType::Float16>(
152 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
154 const armnn::ITensorHandleFactory& tensorHandleFactory);
Kevin Mayb6482f32019-09-11 12:31:38 +0100155
Sadik Armagan303980c2020-04-17 12:45:14 +0100156template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 3>
157Abs3dTest<armnn::DataType::QAsymmS8>(
158 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100159 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
160 const armnn::ITensorHandleFactory& tensorHandleFactory);
Sadik Armagan303980c2020-04-17 12:45:14 +0100161
Kevin Mayec52c3a2020-04-24 09:42:31 +0100162template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 3>
163Abs3dTest<armnn::DataType::Signed32>(
164 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100165 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
166 const armnn::ITensorHandleFactory& tensorHandleFactory);
Kevin Mayec52c3a2020-04-24 09:42:31 +0100167
Derek Lambertif90c56d2020-01-10 17:14:08 +0000168template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 3>
169Abs3dTest<armnn::DataType::QAsymmU8>(
Sadik Armagan9199e582019-09-05 17:35:31 +0100170 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100171 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
172 const armnn::ITensorHandleFactory& tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +0100173
Derek Lambertif90c56d2020-01-10 17:14:08 +0000174template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
175Abs3dTest<armnn::DataType::QSymmS16>(
Sadik Armagan9199e582019-09-05 17:35:31 +0100176 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100177 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
178 const armnn::ITensorHandleFactory& tensorHandleFactory);
Sadik Armagan9199e582019-09-05 17:35:31 +0100179
180template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
181AbsZeroTest<armnn::DataType::Float32>(
182 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100183 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
184 const armnn::ITensorHandleFactory& tensorHandleFactory);
Kevin Mayb6482f32019-09-11 12:31:38 +0100185
186template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
187AbsZeroTest<armnn::DataType::Float16>(
188 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
190 const armnn::ITensorHandleFactory& tensorHandleFactory);
Kevin Mayec52c3a2020-04-24 09:42:31 +0100191
192template LayerTestResult<armnn::ResolveType<armnn::DataType::Signed32>, 2>
193AbsZeroTest<armnn::DataType::Signed32>(
194 armnn::IWorkloadFactory& workloadFactory,
Keith Davis33a626f2020-08-27 15:38:12 +0100195 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
196 const armnn::ITensorHandleFactory& tensorHandleFactory);