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