1 //
2 // Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include "ComparisonTestImpl.hpp"
7
8 #include <armnn/utility/Assert.hpp>
9 #include <Half.hpp>
10 #include <armnnUtils/QuantizeHelper.hpp>
11 #include <ResolveType.hpp>
12
13 #include <armnn/backends/Workload.hpp>
14 #include <armnn/backends/WorkloadData.hpp>
15
16 #include <armnnTestUtils/TensorCopyUtils.hpp>
17 #include <armnnTestUtils/WorkloadTestUtils.hpp>
18
19 #include <armnnTestUtils/TensorHelpers.hpp>
20
21 namespace
22 {
23
24 template <std::size_t NumDims,
25 armnn::DataType ArmnnInType,
26 typename InType = armnn::ResolveType<ArmnnInType>>
ComparisonTestImpl(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::ComparisonDescriptor & descriptor,const armnn::TensorShape & shape0,std::vector<InType> values0,float quantScale0,int quantOffset0,const armnn::TensorShape & shape1,std::vector<InType> values1,float quantScale1,int quantOffset1,const armnn::TensorShape & outShape,std::vector<uint8_t> outValues,float outQuantScale,int outQuantOffset)27 LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
28 armnn::IWorkloadFactory & workloadFactory,
29 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
30 const armnn::ITensorHandleFactory& tensorHandleFactory,
31 const armnn::ComparisonDescriptor& descriptor,
32 const armnn::TensorShape& shape0,
33 std::vector<InType> values0,
34 float quantScale0,
35 int quantOffset0,
36 const armnn::TensorShape& shape1,
37 std::vector<InType> values1,
38 float quantScale1,
39 int quantOffset1,
40 const armnn::TensorShape& outShape,
41 std::vector<uint8_t> outValues,
42 float outQuantScale,
43 int outQuantOffset)
44 {
45 IgnoreUnused(memoryManager);
46 ARMNN_ASSERT(shape0.GetNumDimensions() == NumDims);
47 armnn::TensorInfo inputTensorInfo0(shape0, ArmnnInType, quantScale0, quantOffset0);
48
49 ARMNN_ASSERT(shape1.GetNumDimensions() == NumDims);
50 armnn::TensorInfo inputTensorInfo1(shape1, ArmnnInType, quantScale1, quantOffset1);
51
52 ARMNN_ASSERT(outShape.GetNumDimensions() == NumDims);
53 armnn::TensorInfo outputTensorInfo(outShape, armnn::DataType::Boolean, outQuantScale, outQuantOffset);
54
55 std::vector<uint8_t> actualOutput(outputTensorInfo.GetNumElements());
56
57 std::unique_ptr<armnn::ITensorHandle> inputHandle0 = tensorHandleFactory.CreateTensorHandle(inputTensorInfo0);
58 std::unique_ptr<armnn::ITensorHandle> inputHandle1 = tensorHandleFactory.CreateTensorHandle(inputTensorInfo1);
59 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
60
61 armnn::ComparisonQueueDescriptor qDescriptor;
62 qDescriptor.m_Parameters = descriptor;
63
64 armnn::WorkloadInfo info;
65 AddInputToWorkload(qDescriptor, info, inputTensorInfo0, inputHandle0.get());
66 AddInputToWorkload(qDescriptor, info, inputTensorInfo1, inputHandle1.get());
67 AddOutputToWorkload(qDescriptor, info, outputTensorInfo, outputHandle.get());
68
69 std::unique_ptr<armnn::IWorkload> workload
70 = workloadFactory.CreateWorkload(armnn::LayerType::Comparison, qDescriptor, info);
71
72 inputHandle0->Allocate();
73 inputHandle1->Allocate();
74 outputHandle->Allocate();
75
76 CopyDataToITensorHandle(inputHandle0.get(), values0.data());
77 CopyDataToITensorHandle(inputHandle1.get(), values1.data());
78
79 workload->PostAllocationConfigure();
80 ExecuteWorkload(*workload, memoryManager);
81
82 CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
83
84 return LayerTestResult<uint8_t, NumDims>(actualOutput,
85 outValues,
86 outputHandle->GetShape(),
87 outputTensorInfo.GetShape(),
88 true);
89 }
90
91 template <std::size_t NumDims,
92 armnn::DataType ArmnnInType,
93 typename InType = armnn::ResolveType<ArmnnInType>>
ComparisonTestImpl(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::ComparisonDescriptor & descriptor,const armnn::TensorShape & shape0,std::vector<InType> values0,const armnn::TensorShape & shape1,std::vector<InType> values1,const armnn::TensorShape outShape,std::vector<uint8_t> outValues,float quantScale=1.f,int quantOffset=0)94 LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
95 armnn::IWorkloadFactory & workloadFactory,
96 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
97 const armnn::ITensorHandleFactory& tensorHandleFactory,
98 const armnn::ComparisonDescriptor& descriptor,
99 const armnn::TensorShape& shape0,
100 std::vector<InType> values0,
101 const armnn::TensorShape& shape1,
102 std::vector<InType> values1,
103 const armnn::TensorShape outShape,
104 std::vector<uint8_t> outValues,
105 float quantScale = 1.f,
106 int quantOffset = 0)
107 {
108 return ComparisonTestImpl<NumDims, ArmnnInType>(
109 workloadFactory,
110 memoryManager,
111 tensorHandleFactory,
112 descriptor,
113 shape0,
114 values0,
115 quantScale,
116 quantOffset,
117 shape1,
118 values1,
119 quantScale,
120 quantOffset,
121 outShape,
122 outValues,
123 quantScale,
124 quantOffset);
125 }
126
127 template<typename TestData>
GetExpectedOutputData(const TestData & testData,armnn::ComparisonOperation operation)128 std::vector<uint8_t> GetExpectedOutputData(const TestData& testData, armnn::ComparisonOperation operation)
129 {
130 switch (operation)
131 {
132 case armnn::ComparisonOperation::Equal:
133 return testData.m_OutputEqual;
134 case armnn::ComparisonOperation::Greater:
135 return testData.m_OutputGreater;
136 case armnn::ComparisonOperation::GreaterOrEqual:
137 return testData.m_OutputGreaterOrEqual;
138 case armnn::ComparisonOperation::Less:
139 return testData.m_OutputLess;
140 case armnn::ComparisonOperation::LessOrEqual:
141 return testData.m_OutputLessOrEqual;
142 case armnn::ComparisonOperation::NotEqual:
143 default:
144 return testData.m_OutputNotEqual;
145 }
146 }
147
148 template<armnn::DataType ArmnnInType, typename TestData>
ComparisonTestImpl(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const TestData & testData,armnn::ComparisonOperation operation,float quantScale=1.f,int quantOffset=0)149 LayerTestResult<uint8_t, 4> ComparisonTestImpl(armnn::IWorkloadFactory& workloadFactory,
150 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
151 const armnn::ITensorHandleFactory& tensorHandleFactory,
152 const TestData& testData,
153 armnn::ComparisonOperation operation,
154 float quantScale = 1.f,
155 int quantOffset = 0)
156 {
157 using T = armnn::ResolveType<ArmnnInType>;
158
159 std::vector<T> inputData0 = armnnUtils::QuantizedVector<T>(testData.m_InputData0, quantScale, quantOffset);
160 std::vector<T> inputData1 = armnnUtils::QuantizedVector<T>(testData.m_InputData1, quantScale, quantOffset);
161
162 return ComparisonTestImpl<4, ArmnnInType>(
163 workloadFactory,
164 memoryManager,
165 tensorHandleFactory,
166 armnn::ComparisonDescriptor(operation),
167 testData.m_InputShape0,
168 inputData0,
169 testData.m_InputShape1,
170 inputData1,
171 testData.m_OutputShape,
172 GetExpectedOutputData(testData, operation),
173 quantScale,
174 quantOffset);
175 }
176
177 class ComparisonTestData
178 {
179 public:
180 ComparisonTestData() = default;
181 virtual ~ComparisonTestData() = default;
182
183 armnn::TensorShape m_InputShape0;
184 armnn::TensorShape m_InputShape1;
185 armnn::TensorShape m_OutputShape;
186
187 std::vector<float> m_InputData0;
188 std::vector<float> m_InputData1;
189
190 std::vector<uint8_t> m_OutputEqual;
191 std::vector<uint8_t> m_OutputGreater;
192 std::vector<uint8_t> m_OutputGreaterOrEqual;
193 std::vector<uint8_t> m_OutputLess;
194 std::vector<uint8_t> m_OutputLessOrEqual;
195 std::vector<uint8_t> m_OutputNotEqual;
196 };
197
198 class SimpleTestData : public ComparisonTestData
199 {
200 public:
SimpleTestData()201 SimpleTestData() : ComparisonTestData()
202 {
203 m_InputShape0 = { 2, 2, 2, 2 };
204
205 m_InputShape1 = m_InputShape0;
206 m_OutputShape = m_InputShape0;
207
208 m_InputData0 =
209 {
210 1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
211 3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
212 };
213
214 m_InputData1 =
215 {
216 1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f,
217 5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f
218 };
219
220 m_OutputEqual =
221 {
222 1, 1, 1, 1, 0, 0, 0, 0,
223 0, 0, 0, 0, 1, 1, 1, 1
224 };
225
226 m_OutputGreater =
227 {
228 0, 0, 0, 0, 1, 1, 1, 1,
229 0, 0, 0, 0, 0, 0, 0, 0
230 };
231
232 m_OutputGreaterOrEqual =
233 {
234 1, 1, 1, 1, 1, 1, 1, 1,
235 0, 0, 0, 0, 1, 1, 1, 1
236 };
237
238 m_OutputLess =
239 {
240 0, 0, 0, 0, 0, 0, 0, 0,
241 1, 1, 1, 1, 0, 0, 0, 0
242 };
243
244 m_OutputLessOrEqual =
245 {
246 1, 1, 1, 1, 0, 0, 0, 0,
247 1, 1, 1, 1, 1, 1, 1, 1
248 };
249
250 m_OutputNotEqual =
251 {
252 0, 0, 0, 0, 1, 1, 1, 1,
253 1, 1, 1, 1, 0, 0, 0, 0
254 };
255 }
256 };
257
258 class Broadcast1ElementTestData : public ComparisonTestData
259 {
260 public:
Broadcast1ElementTestData()261 Broadcast1ElementTestData() : ComparisonTestData()
262 {
263 m_InputShape0 = { 1, 2, 2, 2 };
264 m_InputShape1 = { 1, 1, 1, 1 };
265
266 m_OutputShape = m_InputShape0;
267
268 m_InputData0 = { 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f };
269 m_InputData1 = { 3.f };
270
271 m_OutputEqual = { 0, 0, 1, 0, 0, 0, 0, 0 };
272 m_OutputGreater = { 0, 0, 0, 1, 1, 1, 1, 1 };
273 m_OutputGreaterOrEqual = { 0, 0, 1, 1, 1, 1, 1, 1 };
274 m_OutputLess = { 1, 1, 0, 0, 0, 0, 0, 0 };
275 m_OutputLessOrEqual = { 1, 1, 1, 0, 0, 0, 0, 0 };
276 m_OutputNotEqual = { 1, 1, 0, 1, 1, 1, 1, 1 };
277 }
278 };
279
280 class Broadcast1dVectorTestData : public ComparisonTestData
281 {
282 public:
Broadcast1dVectorTestData()283 Broadcast1dVectorTestData() : ComparisonTestData()
284 {
285 m_InputShape0 = { 1, 2, 2, 3 };
286 m_InputShape1 = { 1, 1, 1, 3 };
287
288 m_OutputShape = m_InputShape0;
289
290 m_InputData0 =
291 {
292 1.f, 2.f, 3.f, 4.f, 5.f, 6.f,
293 7.f, 8.f, 9.f, 10.f, 11.f, 12.f
294 };
295
296 m_InputData1 = { 4.f, 5.f, 6.f };
297
298 m_OutputEqual =
299 {
300 0, 0, 0, 1, 1, 1,
301 0, 0, 0, 0, 0, 0
302 };
303
304 m_OutputGreater =
305 {
306 0, 0, 0, 0, 0, 0,
307 1, 1, 1, 1, 1, 1
308 };
309
310 m_OutputGreaterOrEqual =
311 {
312 0, 0, 0, 1, 1, 1,
313 1, 1, 1, 1, 1, 1
314 };
315
316 m_OutputLess =
317 {
318 1, 1, 1, 0, 0, 0,
319 0, 0, 0, 0, 0, 0
320 };
321
322 m_OutputLessOrEqual =
323 {
324 1, 1, 1, 1, 1, 1,
325 0, 0, 0, 0, 0, 0
326 };
327
328 m_OutputNotEqual =
329 {
330 1, 1, 1, 0, 0, 0,
331 1, 1, 1, 1, 1, 1
332 };
333 }
334 };
335
336 static SimpleTestData s_SimpleTestData;
337 static Broadcast1ElementTestData s_Broadcast1ElementTestData;
338 static Broadcast1dVectorTestData s_Broadcast1dVectorTestData;
339
340 } // anonymous namespace
341
342 // Equal
EqualSimpleTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)343 LayerTestResult<uint8_t, 4> EqualSimpleTest(armnn::IWorkloadFactory& workloadFactory,
344 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
345 const armnn::ITensorHandleFactory& tensorHandleFactory)
346 {
347 return ComparisonTestImpl<armnn::DataType::Float32>(
348 workloadFactory,
349 memoryManager,
350 tensorHandleFactory,
351 s_SimpleTestData,
352 armnn::ComparisonOperation::Equal);
353 }
354
EqualBroadcast1ElementTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)355 LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
356 armnn::IWorkloadFactory& workloadFactory,
357 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
358 const armnn::ITensorHandleFactory& tensorHandleFactory)
359 {
360 return ComparisonTestImpl<armnn::DataType::Float32>(
361 workloadFactory,
362 memoryManager,
363 tensorHandleFactory,
364 s_Broadcast1ElementTestData,
365 armnn::ComparisonOperation::Equal);
366 }
367
EqualBroadcast1dVectorTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)368 LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorTest(
369 armnn::IWorkloadFactory& workloadFactory,
370 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
371 const armnn::ITensorHandleFactory& tensorHandleFactory)
372 {
373 return ComparisonTestImpl<armnn::DataType::Float32>(
374 workloadFactory,
375 memoryManager,
376 tensorHandleFactory,
377 s_Broadcast1dVectorTestData,
378 armnn::ComparisonOperation::Equal);
379 }
380
EqualSimpleFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)381 LayerTestResult<uint8_t, 4> EqualSimpleFloat16Test(
382 armnn::IWorkloadFactory& workloadFactory,
383 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
384 const armnn::ITensorHandleFactory& tensorHandleFactory)
385 {
386 return ComparisonTestImpl<armnn::DataType::Float16>(
387 workloadFactory,
388 memoryManager,
389 tensorHandleFactory,
390 s_SimpleTestData,
391 armnn::ComparisonOperation::Equal);
392 }
393
EqualBroadcast1ElementFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)394 LayerTestResult<uint8_t, 4> EqualBroadcast1ElementFloat16Test(
395 armnn::IWorkloadFactory& workloadFactory,
396 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
397 const armnn::ITensorHandleFactory& tensorHandleFactory)
398 {
399 return ComparisonTestImpl<armnn::DataType::Float16>(
400 workloadFactory,
401 memoryManager,
402 tensorHandleFactory,
403 s_Broadcast1ElementTestData,
404 armnn::ComparisonOperation::Equal);
405 }
406
EqualBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)407 LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorFloat16Test(
408 armnn::IWorkloadFactory& workloadFactory,
409 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
410 const armnn::ITensorHandleFactory& tensorHandleFactory)
411 {
412 return ComparisonTestImpl<armnn::DataType::Float16>(
413 workloadFactory,
414 memoryManager,
415 tensorHandleFactory,
416 s_Broadcast1dVectorTestData,
417 armnn::ComparisonOperation::Equal);
418 }
419
EqualSimpleUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)420 LayerTestResult<uint8_t, 4> EqualSimpleUint8Test(
421 armnn::IWorkloadFactory& workloadFactory,
422 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
423 const armnn::ITensorHandleFactory& tensorHandleFactory)
424 {
425 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
426 workloadFactory,
427 memoryManager,
428 tensorHandleFactory,
429 s_SimpleTestData,
430 armnn::ComparisonOperation::Equal);
431 }
432
EqualBroadcast1ElementUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)433 LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
434 armnn::IWorkloadFactory& workloadFactory,
435 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
436 const armnn::ITensorHandleFactory& tensorHandleFactory)
437 {
438 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
439 workloadFactory,
440 memoryManager,
441 tensorHandleFactory,
442 s_Broadcast1ElementTestData,
443 armnn::ComparisonOperation::Equal);
444 }
445
EqualBroadcast1dVectorUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)446 LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorUint8Test(
447 armnn::IWorkloadFactory& workloadFactory,
448 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
449 const armnn::ITensorHandleFactory& tensorHandleFactory)
450 {
451 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
452 workloadFactory,
453 memoryManager,
454 tensorHandleFactory,
455 s_Broadcast1dVectorTestData,
456 armnn::ComparisonOperation::Equal);
457 }
458
459 // Greater
GreaterSimpleTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)460 LayerTestResult<uint8_t, 4> GreaterSimpleTest(armnn::IWorkloadFactory& workloadFactory,
461 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
462 const armnn::ITensorHandleFactory& tensorHandleFactory)
463 {
464 return ComparisonTestImpl<armnn::DataType::Float32>(
465 workloadFactory,
466 memoryManager,
467 tensorHandleFactory,
468 s_SimpleTestData,
469 armnn::ComparisonOperation::Greater);
470 }
471
GreaterBroadcast1ElementTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)472 LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
473 armnn::IWorkloadFactory& workloadFactory,
474 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
475 const armnn::ITensorHandleFactory& tensorHandleFactory)
476 {
477 return ComparisonTestImpl<armnn::DataType::Float32>(
478 workloadFactory,
479 memoryManager,
480 tensorHandleFactory,
481 s_Broadcast1ElementTestData,
482 armnn::ComparisonOperation::Greater);
483 }
484
GreaterBroadcast1dVectorTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)485 LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorTest(
486 armnn::IWorkloadFactory& workloadFactory,
487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
488 const armnn::ITensorHandleFactory& tensorHandleFactory)
489 {
490 return ComparisonTestImpl<armnn::DataType::Float32>(
491 workloadFactory,
492 memoryManager,
493 tensorHandleFactory,
494 s_Broadcast1dVectorTestData,
495 armnn::ComparisonOperation::Greater);
496 }
497
GreaterSimpleFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)498 LayerTestResult<uint8_t, 4> GreaterSimpleFloat16Test(
499 armnn::IWorkloadFactory& workloadFactory,
500 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
501 const armnn::ITensorHandleFactory& tensorHandleFactory)
502 {
503 return ComparisonTestImpl<armnn::DataType::Float16>(
504 workloadFactory,
505 memoryManager,
506 tensorHandleFactory,
507 s_SimpleTestData,
508 armnn::ComparisonOperation::Greater);
509 }
510
GreaterBroadcast1ElementFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)511 LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementFloat16Test(
512 armnn::IWorkloadFactory& workloadFactory,
513 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
514 const armnn::ITensorHandleFactory& tensorHandleFactory)
515 {
516 return ComparisonTestImpl<armnn::DataType::Float16>(
517 workloadFactory,
518 memoryManager,
519 tensorHandleFactory,
520 s_Broadcast1ElementTestData,
521 armnn::ComparisonOperation::Greater);
522 }
523
GreaterBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)524 LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorFloat16Test(
525 armnn::IWorkloadFactory& workloadFactory,
526 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
527 const armnn::ITensorHandleFactory& tensorHandleFactory)
528 {
529 return ComparisonTestImpl<armnn::DataType::Float16>(
530 workloadFactory,
531 memoryManager,
532 tensorHandleFactory,
533 s_Broadcast1dVectorTestData,
534 armnn::ComparisonOperation::Greater);
535 }
536
GreaterSimpleUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)537 LayerTestResult<uint8_t, 4> GreaterSimpleUint8Test(
538 armnn::IWorkloadFactory& workloadFactory,
539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
540 const armnn::ITensorHandleFactory& tensorHandleFactory)
541 {
542 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
543 workloadFactory,
544 memoryManager,
545 tensorHandleFactory,
546 s_SimpleTestData,
547 armnn::ComparisonOperation::Greater);
548 }
549
GreaterBroadcast1ElementUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)550 LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
551 armnn::IWorkloadFactory& workloadFactory,
552 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
553 const armnn::ITensorHandleFactory& tensorHandleFactory)
554 {
555 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
556 workloadFactory,
557 memoryManager,
558 tensorHandleFactory,
559 s_Broadcast1ElementTestData,
560 armnn::ComparisonOperation::Greater);
561 }
562
GreaterBroadcast1dVectorUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)563 LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorUint8Test(
564 armnn::IWorkloadFactory& workloadFactory,
565 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
566 const armnn::ITensorHandleFactory& tensorHandleFactory)
567 {
568 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
569 workloadFactory,
570 memoryManager,
571 tensorHandleFactory,
572 s_Broadcast1dVectorTestData,
573 armnn::ComparisonOperation::Greater);
574 }
575
576 // GreaterOrEqual
GreaterOrEqualSimpleTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)577 LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleTest(
578 armnn::IWorkloadFactory& workloadFactory,
579 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
580 const armnn::ITensorHandleFactory& tensorHandleFactory)
581 {
582 return ComparisonTestImpl<armnn::DataType::Float32>(
583 workloadFactory,
584 memoryManager,
585 tensorHandleFactory,
586 s_SimpleTestData,
587 armnn::ComparisonOperation::GreaterOrEqual);
588 }
589
GreaterOrEqualBroadcast1ElementTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)590 LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementTest(
591 armnn::IWorkloadFactory& workloadFactory,
592 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
593 const armnn::ITensorHandleFactory& tensorHandleFactory)
594 {
595 return ComparisonTestImpl<armnn::DataType::Float32>(
596 workloadFactory,
597 memoryManager,
598 tensorHandleFactory,
599 s_Broadcast1ElementTestData,
600 armnn::ComparisonOperation::GreaterOrEqual);
601 }
602
GreaterOrEqualBroadcast1dVectorTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)603 LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorTest(
604 armnn::IWorkloadFactory& workloadFactory,
605 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
606 const armnn::ITensorHandleFactory& tensorHandleFactory)
607 {
608 return ComparisonTestImpl<armnn::DataType::Float32>(
609 workloadFactory,
610 memoryManager,
611 tensorHandleFactory,
612 s_Broadcast1dVectorTestData,
613 armnn::ComparisonOperation::GreaterOrEqual);
614 }
615
GreaterOrEqualSimpleFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)616 LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleFloat16Test(
617 armnn::IWorkloadFactory& workloadFactory,
618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
619 const armnn::ITensorHandleFactory& tensorHandleFactory)
620 {
621 return ComparisonTestImpl<armnn::DataType::Float16>(
622 workloadFactory,
623 memoryManager,
624 tensorHandleFactory,
625 s_SimpleTestData,
626 armnn::ComparisonOperation::GreaterOrEqual);
627 }
628
GreaterOrEqualBroadcast1ElementFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)629 LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementFloat16Test(
630 armnn::IWorkloadFactory& workloadFactory,
631 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
632 const armnn::ITensorHandleFactory& tensorHandleFactory)
633 {
634 return ComparisonTestImpl<armnn::DataType::Float16>(
635 workloadFactory,
636 memoryManager,
637 tensorHandleFactory,
638 s_Broadcast1ElementTestData,
639 armnn::ComparisonOperation::GreaterOrEqual);
640 }
641
GreaterOrEqualBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)642 LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorFloat16Test(
643 armnn::IWorkloadFactory& workloadFactory,
644 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
645 const armnn::ITensorHandleFactory& tensorHandleFactory)
646 {
647 return ComparisonTestImpl<armnn::DataType::Float16>(
648 workloadFactory,
649 memoryManager,
650 tensorHandleFactory,
651 s_Broadcast1dVectorTestData,
652 armnn::ComparisonOperation::GreaterOrEqual);
653 }
654
GreaterOrEqualSimpleUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)655 LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleUint8Test(
656 armnn::IWorkloadFactory& workloadFactory,
657 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
658 const armnn::ITensorHandleFactory& tensorHandleFactory)
659 {
660 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
661 workloadFactory,
662 memoryManager,
663 tensorHandleFactory,
664 s_SimpleTestData,
665 armnn::ComparisonOperation::GreaterOrEqual);
666 }
667
GreaterOrEqualBroadcast1ElementUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)668 LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementUint8Test(
669 armnn::IWorkloadFactory& workloadFactory,
670 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
671 const armnn::ITensorHandleFactory& tensorHandleFactory)
672 {
673 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
674 workloadFactory,
675 memoryManager,
676 tensorHandleFactory,
677 s_Broadcast1ElementTestData,
678 armnn::ComparisonOperation::GreaterOrEqual);
679 }
680
GreaterOrEqualBroadcast1dVectorUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)681 LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorUint8Test(
682 armnn::IWorkloadFactory& workloadFactory,
683 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
684 const armnn::ITensorHandleFactory& tensorHandleFactory)
685 {
686 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
687 workloadFactory,
688 memoryManager,
689 tensorHandleFactory,
690 s_Broadcast1dVectorTestData,
691 armnn::ComparisonOperation::GreaterOrEqual);
692 }
693
694 // Less
LessSimpleTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)695 LayerTestResult<uint8_t, 4> LessSimpleTest(armnn::IWorkloadFactory& workloadFactory,
696 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
697 const armnn::ITensorHandleFactory& tensorHandleFactory)
698 {
699 return ComparisonTestImpl<armnn::DataType::Float32>(
700 workloadFactory,
701 memoryManager,
702 tensorHandleFactory,
703 s_SimpleTestData,
704 armnn::ComparisonOperation::Less);
705 }
706
LessBroadcast1ElementTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)707 LayerTestResult<uint8_t, 4> LessBroadcast1ElementTest(
708 armnn::IWorkloadFactory& workloadFactory,
709 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
710 const armnn::ITensorHandleFactory& tensorHandleFactory)
711 {
712 return ComparisonTestImpl<armnn::DataType::Float32>(
713 workloadFactory,
714 memoryManager,
715 tensorHandleFactory,
716 s_Broadcast1ElementTestData,
717 armnn::ComparisonOperation::Less);
718 }
719
LessBroadcast1dVectorTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)720 LayerTestResult<uint8_t, 4> LessBroadcast1dVectorTest(
721 armnn::IWorkloadFactory& workloadFactory,
722 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
723 const armnn::ITensorHandleFactory& tensorHandleFactory)
724 {
725 return ComparisonTestImpl<armnn::DataType::Float32>(
726 workloadFactory,
727 memoryManager,
728 tensorHandleFactory,
729 s_Broadcast1dVectorTestData,
730 armnn::ComparisonOperation::Less);
731 }
732
LessSimpleFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)733 LayerTestResult<uint8_t, 4> LessSimpleFloat16Test(
734 armnn::IWorkloadFactory& workloadFactory,
735 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
736 const armnn::ITensorHandleFactory& tensorHandleFactory)
737 {
738 return ComparisonTestImpl<armnn::DataType::Float16>(
739 workloadFactory,
740 memoryManager,
741 tensorHandleFactory,
742 s_SimpleTestData,
743 armnn::ComparisonOperation::Less);
744 }
745
LessBroadcast1ElementFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)746 LayerTestResult<uint8_t, 4> LessBroadcast1ElementFloat16Test(
747 armnn::IWorkloadFactory& workloadFactory,
748 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
749 const armnn::ITensorHandleFactory& tensorHandleFactory)
750 {
751 return ComparisonTestImpl<armnn::DataType::Float16>(
752 workloadFactory,
753 memoryManager,
754 tensorHandleFactory,
755 s_Broadcast1ElementTestData,
756 armnn::ComparisonOperation::Less);
757 }
758
LessBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)759 LayerTestResult<uint8_t, 4> LessBroadcast1dVectorFloat16Test(
760 armnn::IWorkloadFactory& workloadFactory,
761 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
762 const armnn::ITensorHandleFactory& tensorHandleFactory)
763 {
764 return ComparisonTestImpl<armnn::DataType::Float16>(
765 workloadFactory,
766 memoryManager,
767 tensorHandleFactory,
768 s_Broadcast1dVectorTestData,
769 armnn::ComparisonOperation::Less);
770 }
771
LessSimpleUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)772 LayerTestResult<uint8_t, 4> LessSimpleUint8Test(
773 armnn::IWorkloadFactory& workloadFactory,
774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
775 const armnn::ITensorHandleFactory& tensorHandleFactory)
776 {
777 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
778 workloadFactory,
779 memoryManager,
780 tensorHandleFactory,
781 s_SimpleTestData,
782 armnn::ComparisonOperation::Less);
783 }
784
LessBroadcast1ElementUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)785 LayerTestResult<uint8_t, 4> LessBroadcast1ElementUint8Test(
786 armnn::IWorkloadFactory& workloadFactory,
787 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
788 const armnn::ITensorHandleFactory& tensorHandleFactory)
789 {
790 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
791 workloadFactory,
792 memoryManager,
793 tensorHandleFactory,
794 s_Broadcast1ElementTestData,
795 armnn::ComparisonOperation::Less);
796 }
797
LessBroadcast1dVectorUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)798 LayerTestResult<uint8_t, 4> LessBroadcast1dVectorUint8Test(
799 armnn::IWorkloadFactory& workloadFactory,
800 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
801 const armnn::ITensorHandleFactory& tensorHandleFactory)
802 {
803 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
804 workloadFactory,
805 memoryManager,
806 tensorHandleFactory,
807 s_Broadcast1dVectorTestData,
808 armnn::ComparisonOperation::Less);
809 }
810
811 // LessOrEqual
LessOrEqualSimpleTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)812 LayerTestResult<uint8_t, 4> LessOrEqualSimpleTest(
813 armnn::IWorkloadFactory& workloadFactory,
814 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
815 const armnn::ITensorHandleFactory& tensorHandleFactory)
816 {
817 return ComparisonTestImpl<armnn::DataType::Float32>(
818 workloadFactory,
819 memoryManager,
820 tensorHandleFactory,
821 s_SimpleTestData,
822 armnn::ComparisonOperation::LessOrEqual);
823 }
824
LessOrEqualBroadcast1ElementTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)825 LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementTest(
826 armnn::IWorkloadFactory& workloadFactory,
827 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
828 const armnn::ITensorHandleFactory& tensorHandleFactory)
829 {
830 return ComparisonTestImpl<armnn::DataType::Float32>(
831 workloadFactory,
832 memoryManager,
833 tensorHandleFactory,
834 s_Broadcast1ElementTestData,
835 armnn::ComparisonOperation::LessOrEqual);
836 }
837
LessOrEqualBroadcast1dVectorTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)838 LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorTest(
839 armnn::IWorkloadFactory& workloadFactory,
840 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
841 const armnn::ITensorHandleFactory& tensorHandleFactory)
842 {
843 return ComparisonTestImpl<armnn::DataType::Float32>(
844 workloadFactory,
845 memoryManager,
846 tensorHandleFactory,
847 s_Broadcast1dVectorTestData,
848 armnn::ComparisonOperation::LessOrEqual);
849 }
850
LessOrEqualSimpleFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)851 LayerTestResult<uint8_t, 4> LessOrEqualSimpleFloat16Test(
852 armnn::IWorkloadFactory& workloadFactory,
853 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
854 const armnn::ITensorHandleFactory& tensorHandleFactory)
855 {
856 return ComparisonTestImpl<armnn::DataType::Float16>(
857 workloadFactory,
858 memoryManager,
859 tensorHandleFactory,
860 s_SimpleTestData,
861 armnn::ComparisonOperation::LessOrEqual);
862 }
863
LessOrEqualBroadcast1ElementFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)864 LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementFloat16Test(
865 armnn::IWorkloadFactory& workloadFactory,
866 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
867 const armnn::ITensorHandleFactory& tensorHandleFactory)
868 {
869 return ComparisonTestImpl<armnn::DataType::Float16>(
870 workloadFactory,
871 memoryManager,
872 tensorHandleFactory,
873 s_Broadcast1ElementTestData,
874 armnn::ComparisonOperation::LessOrEqual);
875 }
876
LessOrEqualBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)877 LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorFloat16Test(
878 armnn::IWorkloadFactory& workloadFactory,
879 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
880 const armnn::ITensorHandleFactory& tensorHandleFactory)
881 {
882 return ComparisonTestImpl<armnn::DataType::Float16>(
883 workloadFactory,
884 memoryManager,
885 tensorHandleFactory,
886 s_Broadcast1dVectorTestData,
887 armnn::ComparisonOperation::LessOrEqual);
888 }
889
LessOrEqualSimpleUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)890 LayerTestResult<uint8_t, 4> LessOrEqualSimpleUint8Test(
891 armnn::IWorkloadFactory& workloadFactory,
892 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
893 const armnn::ITensorHandleFactory& tensorHandleFactory)
894 {
895 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
896 workloadFactory,
897 memoryManager,
898 tensorHandleFactory,
899 s_SimpleTestData,
900 armnn::ComparisonOperation::LessOrEqual);
901 }
902
LessOrEqualBroadcast1ElementUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)903 LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementUint8Test(
904 armnn::IWorkloadFactory& workloadFactory,
905 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
906 const armnn::ITensorHandleFactory& tensorHandleFactory)
907 {
908 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
909 workloadFactory,
910 memoryManager,
911 tensorHandleFactory,
912 s_Broadcast1ElementTestData,
913 armnn::ComparisonOperation::LessOrEqual);
914 }
915
LessOrEqualBroadcast1dVectorUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)916 LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorUint8Test(
917 armnn::IWorkloadFactory& workloadFactory,
918 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
919 const armnn::ITensorHandleFactory& tensorHandleFactory)
920 {
921 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
922 workloadFactory,
923 memoryManager,
924 tensorHandleFactory,
925 s_Broadcast1dVectorTestData,
926 armnn::ComparisonOperation::LessOrEqual);
927 }
928
929 // NotEqual
NotEqualSimpleTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)930 LayerTestResult<uint8_t, 4> NotEqualSimpleTest(
931 armnn::IWorkloadFactory& workloadFactory,
932 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
933 const armnn::ITensorHandleFactory& tensorHandleFactory)
934 {
935 return ComparisonTestImpl<armnn::DataType::Float32>(
936 workloadFactory,
937 memoryManager,
938 tensorHandleFactory,
939 s_SimpleTestData,
940 armnn::ComparisonOperation::NotEqual);
941 }
942
NotEqualBroadcast1ElementTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)943 LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementTest(
944 armnn::IWorkloadFactory& workloadFactory,
945 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
946 const armnn::ITensorHandleFactory& tensorHandleFactory)
947 {
948 return ComparisonTestImpl<armnn::DataType::Float32>(
949 workloadFactory,
950 memoryManager,
951 tensorHandleFactory,
952 s_Broadcast1ElementTestData,
953 armnn::ComparisonOperation::NotEqual);
954 }
955
NotEqualBroadcast1dVectorTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)956 LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorTest(
957 armnn::IWorkloadFactory& workloadFactory,
958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
959 const armnn::ITensorHandleFactory& tensorHandleFactory)
960 {
961 return ComparisonTestImpl<armnn::DataType::Float32>(
962 workloadFactory,
963 memoryManager,
964 tensorHandleFactory,
965 s_Broadcast1dVectorTestData,
966 armnn::ComparisonOperation::NotEqual);
967 }
968
NotEqualSimpleFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)969 LayerTestResult<uint8_t, 4> NotEqualSimpleFloat16Test(
970 armnn::IWorkloadFactory& workloadFactory,
971 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
972 const armnn::ITensorHandleFactory& tensorHandleFactory)
973 {
974 return ComparisonTestImpl<armnn::DataType::Float16>(
975 workloadFactory,
976 memoryManager,
977 tensorHandleFactory,
978 s_SimpleTestData,
979 armnn::ComparisonOperation::NotEqual);
980 }
981
NotEqualBroadcast1ElementFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)982 LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementFloat16Test(
983 armnn::IWorkloadFactory& workloadFactory,
984 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
985 const armnn::ITensorHandleFactory& tensorHandleFactory)
986 {
987 return ComparisonTestImpl<armnn::DataType::Float16>(
988 workloadFactory,
989 memoryManager,
990 tensorHandleFactory,
991 s_Broadcast1ElementTestData,
992 armnn::ComparisonOperation::NotEqual);
993 }
994
NotEqualBroadcast1dVectorFloat16Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)995 LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorFloat16Test(
996 armnn::IWorkloadFactory& workloadFactory,
997 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
998 const armnn::ITensorHandleFactory& tensorHandleFactory)
999 {
1000 return ComparisonTestImpl<armnn::DataType::Float16>(
1001 workloadFactory,
1002 memoryManager,
1003 tensorHandleFactory,
1004 s_Broadcast1dVectorTestData,
1005 armnn::ComparisonOperation::NotEqual);
1006 }
1007
NotEqualSimpleUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)1008 LayerTestResult<uint8_t, 4> NotEqualSimpleUint8Test(
1009 armnn::IWorkloadFactory& workloadFactory,
1010 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1011 const armnn::ITensorHandleFactory& tensorHandleFactory)
1012 {
1013 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1014 workloadFactory,
1015 memoryManager,
1016 tensorHandleFactory,
1017 s_SimpleTestData,
1018 armnn::ComparisonOperation::NotEqual);
1019 }
1020
NotEqualBroadcast1ElementUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)1021 LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementUint8Test(
1022 armnn::IWorkloadFactory& workloadFactory,
1023 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1024 const armnn::ITensorHandleFactory& tensorHandleFactory)
1025 {
1026 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1027 workloadFactory,
1028 memoryManager,
1029 tensorHandleFactory,
1030 s_Broadcast1ElementTestData,
1031 armnn::ComparisonOperation::NotEqual);
1032 }
1033
NotEqualBroadcast1dVectorUint8Test(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)1034 LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorUint8Test(
1035 armnn::IWorkloadFactory& workloadFactory,
1036 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1037 const armnn::ITensorHandleFactory& tensorHandleFactory)
1038 {
1039 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
1040 workloadFactory,
1041 memoryManager,
1042 tensorHandleFactory,
1043 s_Broadcast1dVectorTestData,
1044 armnn::ComparisonOperation::NotEqual);
1045 }
1046