xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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