blob: 271bc235a9c1fbb58841f59af1350c11a70606a5 [file] [log] [blame]
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "GreaterTestImpl.hpp"
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +01007
8#include "ComparisonTestImpl.hpp"
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +01009
Matthew Jackson9bff1442019-09-12 09:08:23 +010010#include <Half.hpp>
11
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +010012LayerTestResult<uint8_t, 4> GreaterSimpleTest(armnn::IWorkloadFactory& workloadFactory,
13 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
14{
15 const unsigned int width = 2u;
16 const unsigned int height = 2u;
17 const unsigned int channelCount = 2u;
18 const unsigned int batchSize = 2u;
19
20 unsigned int shape[] = { batchSize, channelCount, height, width };
21
22 std::vector<float> input0 =
23 {
24 1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
25 3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
26 };
27
28 std::vector<float> input1 =
29 {
30 1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f,
31 5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f
32 };
33
34 std::vector<uint8_t> output =
35 {
36 0, 0, 0, 0, 1, 1, 1, 1,
37 0, 0, 0, 0, 0, 0, 0, 0
38 };
39
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010040 return ComparisonTestImpl<4, armnn::DataType::Float32>(
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +010041 workloadFactory,
42 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010043 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +010044 shape,
45 input0,
46 shape,
47 input1,
48 shape,
49 output);
50}
51
52LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
53 armnn::IWorkloadFactory& workloadFactory,
54 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
55{
56 unsigned int shape0[] = { 1, 2, 2, 2 };
57 unsigned int shape1[] = { 1, 1, 1, 1 };
58
59 std::vector<float> input0 = { 1, 2, 3, 4, 5, 6, 7, 8};
60 std::vector<float> input1 = { 1 };
61
62 std::vector<uint8_t> output = { 0, 1, 1, 1, 1, 1, 1, 1};
63
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010064 return ComparisonTestImpl<4, armnn::DataType::Float32>(
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +010065 workloadFactory,
66 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010067 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +010068 shape0,
69 input0,
70 shape1,
71 input1,
72 shape0,
73 output);
74}
75
76LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
77 armnn::IWorkloadFactory& workloadFactory,
78 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
79{
80 const unsigned int shape0[] = { 1, 2, 2, 3 };
81 const unsigned int shape1[] = { 1, 1, 1, 3 };
82
83 std::vector<float> input0 =
84 {
85 1.0f, 2.9f, 2.1f, 4.0f, 5.0f, 6.0f,
86 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f
87 };
88
89 std::vector<float> input1 = { 1.f, 3.f, 2.f };
90
91 std::vector<uint8_t> output =
92 {
93 0, 0, 1, 1, 1, 1,
94 1, 1, 1, 1, 1, 1
95 };
96
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010097 return ComparisonTestImpl<4, armnn::DataType::Float32>(
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +010098 workloadFactory,
99 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100100 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +0100101 shape0,
102 input0,
103 shape1,
104 input1,
105 shape0,
106 output);
107}
108
Matthew Jackson9bff1442019-09-12 09:08:23 +0100109LayerTestResult<uint8_t, 4> GreaterFloat16Test(
110 armnn::IWorkloadFactory& workloadFactory,
111 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
112{
113 using namespace half_float::literal;
114
115 const unsigned int width = 2u;
116 const unsigned int height = 2u;
117 const unsigned int channelCount = 2u;
118 const unsigned int batchSize = 2u;
119
120 unsigned int shape[] = { batchSize, channelCount, height, width };
121
122 std::vector<armnn::Half> input0 =
123 {
124 1._h, 1._h, 1._h, 1._h, 5._h, 5._h, 5._h, 5._h,
125 3._h, 3._h, 3._h, 3._h, 4._h, 4._h, 4._h, 4._h
126 };
127
128 std::vector<armnn::Half> input1 =
129 {
130 1._h, 1._h, 1._h, 1._h, 3._h, 3._h, 3._h, 3._h,
131 5._h, 5._h, 5._h, 5._h, 4._h, 4._h, 4._h, 4._h
132 };
133
134 std::vector<uint8_t> output =
135 {
136 0, 0, 0, 0, 1, 1, 1, 1,
137 0, 0, 0, 0, 0, 0, 0, 0
138 };
139
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100140 return ComparisonTestImpl<4,armnn::DataType::Float16>(
Matthew Jackson9bff1442019-09-12 09:08:23 +0100141 workloadFactory,
142 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100143 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Matthew Jackson9bff1442019-09-12 09:08:23 +0100144 shape,
145 input0,
146 shape,
147 input1,
148 shape,
149 output);
150}
151
152LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementFloat16Test(
153 armnn::IWorkloadFactory& workloadFactory,
154 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
155{
156 using namespace half_float::literal;
157
158 unsigned int shape0[] = { 1, 2, 2, 2 };
159 unsigned int shape1[] = { 1, 1, 1, 1 };
160
161 std::vector<armnn::Half> input0 = { 1._h, 2._h, 3._h, 4._h, 5._h, 6._h, 7._h, 8._h };
162 std::vector<armnn::Half> input1 = { 1._h };
163
164 std::vector<uint8_t> output = { 0, 1, 1, 1, 1, 1, 1, 1};
165
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100166 return ComparisonTestImpl<4, armnn::DataType::Float16>(
Matthew Jackson9bff1442019-09-12 09:08:23 +0100167 workloadFactory,
168 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100169 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Matthew Jackson9bff1442019-09-12 09:08:23 +0100170 shape0,
171 input0,
172 shape1,
173 input1,
174 shape0,
175 output);
176}
177
178LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorFloat16Test(
179 armnn::IWorkloadFactory& workloadFactory,
180 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
181{
182 using namespace half_float::literal;
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100183
Matthew Jackson9bff1442019-09-12 09:08:23 +0100184 const unsigned int shape0[] = { 1, 2, 2, 3 };
185 const unsigned int shape1[] = { 1, 1, 1, 3 };
186
187 std::vector<armnn::Half> input0 =
188 {
189 1.0_h, 2.9_h, 2.1_h, 4.0_h, 5.0_h, 6.0_h,
190 7.0_h, 8.0_h, 9.0_h, 10.0_h, 11.0_h, 12.0_h
191 };
192
193 std::vector<armnn::Half> input1 = { 1._h, 3._h, 2._h };
194
195 std::vector<uint8_t> output =
196 {
197 0, 0, 1, 1, 1, 1,
198 1, 1, 1, 1, 1, 1
199 };
200
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100201 return ComparisonTestImpl<4, armnn::DataType::Float16>(
Matthew Jackson9bff1442019-09-12 09:08:23 +0100202 workloadFactory,
203 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100204 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Matthew Jackson9bff1442019-09-12 09:08:23 +0100205 shape0,
206 input0,
207 shape1,
208 input1,
209 shape0,
210 output);
211}
212
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +0100213LayerTestResult<uint8_t, 4> GreaterUint8Test(
214 armnn::IWorkloadFactory& workloadFactory,
215 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
216{
217 unsigned int shape[] = { 2, 2, 2, 2 };
218
219 // See dequantized values to the right.
220 std::vector<uint8_t> input0 =
221 {
222 1, 1, 1, 1, 6, 6, 6, 6,
223 3, 3, 3, 3, 5, 5, 5, 5
224 };
225
226 std::vector<uint8_t> input1 =
227 {
228 2, 2, 2, 2, 6, 6, 6, 6,
229 2, 2, 2, 2, 5, 5, 5, 5
230 };
231
232 std::vector<uint8_t> output =
233 {
234 0, 0, 0, 0, 0, 0, 0, 0,
235 1, 1, 1, 1, 0, 0, 0, 0
236 };
237
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100238 return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +0100239 workloadFactory,
240 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100241 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +0100242 shape,
243 input0,
244 shape,
245 input1,
246 shape,
247 output);
248}
249
250LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
251 armnn::IWorkloadFactory& workloadFactory,
252 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
253{
254 const unsigned int shape0[] = { 1, 2, 2, 3 };
255 const unsigned int shape1[] = { 1, 1, 1, 1 };
256
257 std::vector<uint8_t> input0 =
258 {
259 1, 2, 3, 4, 5, 6,
260 7, 8, 9, 10, 11, 12
261 };
262
263 std::vector<uint8_t> input1 = { 1 };
264
265 std::vector<uint8_t> output =
266 {
267 0, 1, 1, 1, 1, 1,
268 1, 1, 1, 1, 1, 1
269 };
270
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100271 return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +0100272 workloadFactory,
273 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100274 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +0100275 shape0,
276 input0,
277 shape1,
278 input1,
279 shape0,
280 output);
281}
282
283LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
284 armnn::IWorkloadFactory& workloadFactory,
285 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
286{
287 const unsigned int shape0[] = { 1, 2, 2, 3 };
288 const unsigned int shape1[] = { 1, 1, 1, 3 };
289
290 std::vector<uint8_t> input0 =
291 {
292 1, 2, 3, 4, 5, 6,
293 7, 8, 9, 10, 11, 12
294 };
295
296 std::vector<uint8_t> input1 = { 1, 1, 3 };
297
298 std::vector<uint8_t> output =
299 {
300 0, 1, 0, 1, 1, 1,
301 1, 1, 1, 1, 1, 1
302 };
303
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100304 return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +0100305 workloadFactory,
306 memoryManager,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100307 armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
Aron Virginas-Tare89ebad2019-08-27 18:14:26 +0100308 shape0,
309 input0,
310 shape1,
311 input1,
312 shape0,
313 output);
314}