blob: 9c83b9d06c671de479e5419d8fc81dbf99cdb7a4 [file] [log] [blame]
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +01001//
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +01003// SPDX-License-Identifier: MIT
4//
5
6#include "ComparisonTestImpl.hpp"
7
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +01008#include <armnn/utility/Assert.hpp>
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +01009#include <Half.hpp>
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010010#include <QuantizeHelper.hpp>
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +010011#include <ResolveType.hpp>
12
13#include <backendsCommon/Workload.hpp>
14#include <backendsCommon/WorkloadData.hpp>
15
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +010016#include <backendsCommon/test/TensorCopyUtils.hpp>
17#include <backendsCommon/test/WorkloadTestUtils.hpp>
18
19#include <test/TensorHelpers.hpp>
20
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +010021namespace
22{
23
24template <std::size_t NumDims,
25 armnn::DataType ArmnnInType,
26 typename InType = armnn::ResolveType<ArmnnInType>>
27LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
28 armnn::IWorkloadFactory & workloadFactory,
29 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,
30 const armnn::ComparisonDescriptor& descriptor,
31 const armnn::TensorShape& shape0,
32 std::vector<InType> values0,
33 float quantScale0,
34 int quantOffset0,
35 const armnn::TensorShape& shape1,
36 std::vector<InType> values1,
37 float quantScale1,
38 int quantOffset1,
39 const armnn::TensorShape& outShape,
40 std::vector<uint8_t> outValues,
41 float outQuantScale,
42 int outQuantOffset)
43{
Jan Eilers8eb25602020-03-09 12:13:48 +000044 IgnoreUnused(memoryManager);
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010045 ARMNN_ASSERT(shape0.GetNumDimensions() == NumDims);
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +010046 armnn::TensorInfo inputTensorInfo0(shape0, ArmnnInType, quantScale0, quantOffset0);
47
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010048 ARMNN_ASSERT(shape1.GetNumDimensions() == NumDims);
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +010049 armnn::TensorInfo inputTensorInfo1(shape1, ArmnnInType, quantScale1, quantOffset1);
50
Narumol Prangnawaratac2770a2020-04-01 16:51:23 +010051 ARMNN_ASSERT(outShape.GetNumDimensions() == NumDims);
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +010052 armnn::TensorInfo outputTensorInfo(outShape, armnn::DataType::Boolean, outQuantScale, outQuantOffset);
53
54 auto input0 = MakeTensor<InType, NumDims>(inputTensorInfo0, values0);
55 auto input1 = MakeTensor<InType, NumDims>(inputTensorInfo1, values1);
56
57 LayerTestResult<uint8_t, NumDims> ret(outputTensorInfo);
58
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010059 ARMNN_NO_DEPRECATE_WARN_BEGIN
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +010060 std::unique_ptr<armnn::ITensorHandle> inputHandle0 = workloadFactory.CreateTensorHandle(inputTensorInfo0);
61 std::unique_ptr<armnn::ITensorHandle> inputHandle1 = workloadFactory.CreateTensorHandle(inputTensorInfo1);
62 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010063 ARMNN_NO_DEPRECATE_WARN_END
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +010064
65 armnn::ComparisonQueueDescriptor qDescriptor;
66 qDescriptor.m_Parameters = descriptor;
67
68 armnn::WorkloadInfo info;
69 AddInputToWorkload(qDescriptor, info, inputTensorInfo0, inputHandle0.get());
70 AddInputToWorkload(qDescriptor, info, inputTensorInfo1, inputHandle1.get());
71 AddOutputToWorkload(qDescriptor, info, outputTensorInfo, outputHandle.get());
72
73 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateComparison(qDescriptor, info);
74
75 inputHandle0->Allocate();
76 inputHandle1->Allocate();
77 outputHandle->Allocate();
78
79 CopyDataToITensorHandle(inputHandle0.get(), input0.origin());
80 CopyDataToITensorHandle(inputHandle1.get(), input1.origin());
81
82 workload->PostAllocationConfigure();
83 ExecuteWorkload(*workload, memoryManager);
84
85 CopyDataFromITensorHandle(ret.output.origin(), outputHandle.get());
86
87 ret.outputExpected = MakeTensor<uint8_t, NumDims>(outputTensorInfo, outValues);
88 ret.compareBoolean = true;
89
90 return ret;
91}
92
93template <std::size_t NumDims,
94 armnn::DataType ArmnnInType,
95 typename InType = armnn::ResolveType<ArmnnInType>>
96LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
97 armnn::IWorkloadFactory & workloadFactory,
98 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,
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 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
127template<typename TestData>
128std::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
148template<armnn::DataType ArmnnInType, typename TestData>
149LayerTestResult<uint8_t, 4> ComparisonTestImpl(armnn::IWorkloadFactory& workloadFactory,
150 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
151 const TestData& testData,
152 armnn::ComparisonOperation operation,
153 float quantScale = 1.f,
154 int quantOffset = 0)
155{
156 using T = armnn::ResolveType<ArmnnInType>;
157
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100158 std::vector<T> inputData0 = armnnUtils::QuantizedVector<T>(testData.m_InputData0, quantScale, quantOffset);
159 std::vector<T> inputData1 = armnnUtils::QuantizedVector<T>(testData.m_InputData1, quantScale, quantOffset);
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100160
161 return ComparisonTestImpl<4, ArmnnInType>(
162 workloadFactory,
163 memoryManager,
164 armnn::ComparisonDescriptor(operation),
165 testData.m_InputShape0,
166 inputData0,
167 testData.m_InputShape1,
168 inputData1,
169 testData.m_OutputShape,
170 GetExpectedOutputData(testData, operation),
171 quantScale,
172 quantOffset);
173}
174
175class ComparisonTestData
176{
177public:
178 ComparisonTestData() = default;
179 virtual ~ComparisonTestData() = default;
180
181 armnn::TensorShape m_InputShape0;
182 armnn::TensorShape m_InputShape1;
183 armnn::TensorShape m_OutputShape;
184
185 std::vector<float> m_InputData0;
186 std::vector<float> m_InputData1;
187
188 std::vector<uint8_t> m_OutputEqual;
189 std::vector<uint8_t> m_OutputGreater;
190 std::vector<uint8_t> m_OutputGreaterOrEqual;
191 std::vector<uint8_t> m_OutputLess;
192 std::vector<uint8_t> m_OutputLessOrEqual;
193 std::vector<uint8_t> m_OutputNotEqual;
194};
195
196class SimpleTestData : public ComparisonTestData
197{
198public:
199 SimpleTestData() : ComparisonTestData()
200 {
201 m_InputShape0 = { 2, 2, 2, 2 };
202
203 m_InputShape1 = m_InputShape0;
204 m_OutputShape = m_InputShape0;
205
206 m_InputData0 =
207 {
208 1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
209 3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
210 };
211
212 m_InputData1 =
213 {
214 1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f,
215 5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f
216 };
217
218 m_OutputEqual =
219 {
220 1, 1, 1, 1, 0, 0, 0, 0,
221 0, 0, 0, 0, 1, 1, 1, 1
222 };
223
224 m_OutputGreater =
225 {
226 0, 0, 0, 0, 1, 1, 1, 1,
227 0, 0, 0, 0, 0, 0, 0, 0
228 };
229
230 m_OutputGreaterOrEqual =
231 {
232 1, 1, 1, 1, 1, 1, 1, 1,
233 0, 0, 0, 0, 1, 1, 1, 1
234 };
235
236 m_OutputLess =
237 {
238 0, 0, 0, 0, 0, 0, 0, 0,
239 1, 1, 1, 1, 0, 0, 0, 0
240 };
241
242 m_OutputLessOrEqual =
243 {
244 1, 1, 1, 1, 0, 0, 0, 0,
245 1, 1, 1, 1, 1, 1, 1, 1
246 };
247
248 m_OutputNotEqual =
249 {
250 0, 0, 0, 0, 1, 1, 1, 1,
251 1, 1, 1, 1, 0, 0, 0, 0
252 };
253 }
254};
255
256class Broadcast1ElementTestData : public ComparisonTestData
257{
258public:
259 Broadcast1ElementTestData() : ComparisonTestData()
260 {
261 m_InputShape0 = { 1, 2, 2, 2 };
262 m_InputShape1 = { 1, 1, 1, 1 };
263
264 m_OutputShape = m_InputShape0;
265
266 m_InputData0 = { 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f };
267 m_InputData1 = { 3.f };
268
269 m_OutputEqual = { 0, 0, 1, 0, 0, 0, 0, 0 };
270 m_OutputGreater = { 0, 0, 0, 1, 1, 1, 1, 1 };
271 m_OutputGreaterOrEqual = { 0, 0, 1, 1, 1, 1, 1, 1 };
272 m_OutputLess = { 1, 1, 0, 0, 0, 0, 0, 0 };
273 m_OutputLessOrEqual = { 1, 1, 1, 0, 0, 0, 0, 0 };
274 m_OutputNotEqual = { 1, 1, 0, 1, 1, 1, 1, 1 };
275 }
276};
277
278class Broadcast1dVectorTestData : public ComparisonTestData
279{
280public:
281 Broadcast1dVectorTestData() : ComparisonTestData()
282 {
283 m_InputShape0 = { 1, 2, 2, 3 };
284 m_InputShape1 = { 1, 1, 1, 3 };
285
286 m_OutputShape = m_InputShape0;
287
288 m_InputData0 =
289 {
290 1.f, 2.f, 3.f, 4.f, 5.f, 6.f,
291 7.f, 8.f, 9.f, 10.f, 11.f, 12.f
292 };
293
294 m_InputData1 = { 4.f, 5.f, 6.f };
295
296 m_OutputEqual =
297 {
298 0, 0, 0, 1, 1, 1,
299 0, 0, 0, 0, 0, 0
300 };
301
302 m_OutputGreater =
303 {
304 0, 0, 0, 0, 0, 0,
305 1, 1, 1, 1, 1, 1
306 };
307
308 m_OutputGreaterOrEqual =
309 {
310 0, 0, 0, 1, 1, 1,
311 1, 1, 1, 1, 1, 1
312 };
313
314 m_OutputLess =
315 {
316 1, 1, 1, 0, 0, 0,
317 0, 0, 0, 0, 0, 0
318 };
319
320 m_OutputLessOrEqual =
321 {
322 1, 1, 1, 1, 1, 1,
323 0, 0, 0, 0, 0, 0
324 };
325
326 m_OutputNotEqual =
327 {
328 1, 1, 1, 0, 0, 0,
329 1, 1, 1, 1, 1, 1
330 };
331 }
332};
333
334static SimpleTestData s_SimpleTestData;
335static Broadcast1ElementTestData s_Broadcast1ElementTestData;
336static Broadcast1dVectorTestData s_Broadcast1dVectorTestData;
337
338} // anonymous namespace
339
340// Equal
341LayerTestResult<uint8_t, 4> EqualSimpleTest(armnn::IWorkloadFactory& workloadFactory,
342 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
343{
344 return ComparisonTestImpl<armnn::DataType::Float32>(
345 workloadFactory,
346 memoryManager,
347 s_SimpleTestData,
348 armnn::ComparisonOperation::Equal);
349}
350
351LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
352 armnn::IWorkloadFactory& workloadFactory,
353 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
354{
355 return ComparisonTestImpl<armnn::DataType::Float32>(
356 workloadFactory,
357 memoryManager,
358 s_Broadcast1ElementTestData,
359 armnn::ComparisonOperation::Equal);
360}
361
362LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorTest(
363 armnn::IWorkloadFactory& workloadFactory,
364 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
365{
366 return ComparisonTestImpl<armnn::DataType::Float32>(
367 workloadFactory,
368 memoryManager,
369 s_Broadcast1dVectorTestData,
370 armnn::ComparisonOperation::Equal);
371}
372
373LayerTestResult<uint8_t, 4> EqualSimpleFloat16Test(
374 armnn::IWorkloadFactory& workloadFactory,
375 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
376{
377 return ComparisonTestImpl<armnn::DataType::Float16>(
378 workloadFactory,
379 memoryManager,
380 s_SimpleTestData,
381 armnn::ComparisonOperation::Equal);
382}
383
384LayerTestResult<uint8_t, 4> EqualBroadcast1ElementFloat16Test(
385 armnn::IWorkloadFactory& workloadFactory,
386 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
387{
388 return ComparisonTestImpl<armnn::DataType::Float16>(
389 workloadFactory,
390 memoryManager,
391 s_Broadcast1ElementTestData,
392 armnn::ComparisonOperation::Equal);
393}
394
395LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorFloat16Test(
396 armnn::IWorkloadFactory& workloadFactory,
397 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
398{
399 return ComparisonTestImpl<armnn::DataType::Float16>(
400 workloadFactory,
401 memoryManager,
402 s_Broadcast1dVectorTestData,
403 armnn::ComparisonOperation::Equal);
404}
405
406LayerTestResult<uint8_t, 4> EqualSimpleUint8Test(
407 armnn::IWorkloadFactory& workloadFactory,
408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
409{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000410 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100411 workloadFactory,
412 memoryManager,
413 s_SimpleTestData,
414 armnn::ComparisonOperation::Equal);
415}
416
417LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
418 armnn::IWorkloadFactory& workloadFactory,
419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
420{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000421 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100422 workloadFactory,
423 memoryManager,
424 s_Broadcast1ElementTestData,
425 armnn::ComparisonOperation::Equal);
426}
427
428LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorUint8Test(
429 armnn::IWorkloadFactory& workloadFactory,
430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
431{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000432 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100433 workloadFactory,
434 memoryManager,
435 s_Broadcast1dVectorTestData,
436 armnn::ComparisonOperation::Equal);
437}
438
439// Greater
440LayerTestResult<uint8_t, 4> GreaterSimpleTest(armnn::IWorkloadFactory& workloadFactory,
441 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
442{
443 return ComparisonTestImpl<armnn::DataType::Float32>(
444 workloadFactory,
445 memoryManager,
446 s_SimpleTestData,
447 armnn::ComparisonOperation::Greater);
448}
449
450LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
451 armnn::IWorkloadFactory& workloadFactory,
452 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
453{
454 return ComparisonTestImpl<armnn::DataType::Float32>(
455 workloadFactory,
456 memoryManager,
457 s_Broadcast1ElementTestData,
458 armnn::ComparisonOperation::Greater);
459}
460
461LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorTest(
462 armnn::IWorkloadFactory& workloadFactory,
463 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
464{
465 return ComparisonTestImpl<armnn::DataType::Float32>(
466 workloadFactory,
467 memoryManager,
468 s_Broadcast1dVectorTestData,
469 armnn::ComparisonOperation::Greater);
470}
471
472LayerTestResult<uint8_t, 4> GreaterSimpleFloat16Test(
473 armnn::IWorkloadFactory& workloadFactory,
474 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
475{
476 return ComparisonTestImpl<armnn::DataType::Float16>(
477 workloadFactory,
478 memoryManager,
479 s_SimpleTestData,
480 armnn::ComparisonOperation::Greater);
481}
482
483LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementFloat16Test(
484 armnn::IWorkloadFactory& workloadFactory,
485 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
486{
487 return ComparisonTestImpl<armnn::DataType::Float16>(
488 workloadFactory,
489 memoryManager,
490 s_Broadcast1ElementTestData,
491 armnn::ComparisonOperation::Greater);
492}
493
494LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorFloat16Test(
495 armnn::IWorkloadFactory& workloadFactory,
496 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
497{
498 return ComparisonTestImpl<armnn::DataType::Float16>(
499 workloadFactory,
500 memoryManager,
501 s_Broadcast1dVectorTestData,
502 armnn::ComparisonOperation::Greater);
503}
504
505LayerTestResult<uint8_t, 4> GreaterSimpleUint8Test(
506 armnn::IWorkloadFactory& workloadFactory,
507 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
508{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000509 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100510 workloadFactory,
511 memoryManager,
512 s_SimpleTestData,
513 armnn::ComparisonOperation::Greater);
514}
515
516LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
517 armnn::IWorkloadFactory& workloadFactory,
518 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
519{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000520 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100521 workloadFactory,
522 memoryManager,
523 s_Broadcast1ElementTestData,
524 armnn::ComparisonOperation::Greater);
525}
526
527LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorUint8Test(
528 armnn::IWorkloadFactory& workloadFactory,
529 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
530{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000531 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100532 workloadFactory,
533 memoryManager,
534 s_Broadcast1dVectorTestData,
535 armnn::ComparisonOperation::Greater);
536}
537
538// GreaterOrEqual
539LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleTest(
540 armnn::IWorkloadFactory& workloadFactory,
541 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
542{
543 return ComparisonTestImpl<armnn::DataType::Float32>(
544 workloadFactory,
545 memoryManager,
546 s_SimpleTestData,
547 armnn::ComparisonOperation::GreaterOrEqual);
548}
549
550LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementTest(
551 armnn::IWorkloadFactory& workloadFactory,
552 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
553{
554 return ComparisonTestImpl<armnn::DataType::Float32>(
555 workloadFactory,
556 memoryManager,
557 s_Broadcast1ElementTestData,
558 armnn::ComparisonOperation::GreaterOrEqual);
559}
560
561LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorTest(
562 armnn::IWorkloadFactory& workloadFactory,
563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
564{
565 return ComparisonTestImpl<armnn::DataType::Float32>(
566 workloadFactory,
567 memoryManager,
568 s_Broadcast1dVectorTestData,
569 armnn::ComparisonOperation::GreaterOrEqual);
570}
571
572LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleFloat16Test(
573 armnn::IWorkloadFactory& workloadFactory,
574 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
575{
576 return ComparisonTestImpl<armnn::DataType::Float16>(
577 workloadFactory,
578 memoryManager,
579 s_SimpleTestData,
580 armnn::ComparisonOperation::GreaterOrEqual);
581}
582
583LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementFloat16Test(
584 armnn::IWorkloadFactory& workloadFactory,
585 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
586{
587 return ComparisonTestImpl<armnn::DataType::Float16>(
588 workloadFactory,
589 memoryManager,
590 s_Broadcast1ElementTestData,
591 armnn::ComparisonOperation::GreaterOrEqual);
592}
593
594LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorFloat16Test(
595 armnn::IWorkloadFactory& workloadFactory,
596 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
597{
598 return ComparisonTestImpl<armnn::DataType::Float16>(
599 workloadFactory,
600 memoryManager,
601 s_Broadcast1dVectorTestData,
602 armnn::ComparisonOperation::GreaterOrEqual);
603}
604
605LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleUint8Test(
606 armnn::IWorkloadFactory& workloadFactory,
607 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
608{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000609 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100610 workloadFactory,
611 memoryManager,
612 s_SimpleTestData,
613 armnn::ComparisonOperation::GreaterOrEqual);
614}
615
616LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementUint8Test(
617 armnn::IWorkloadFactory& workloadFactory,
618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
619{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000620 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100621 workloadFactory,
622 memoryManager,
623 s_Broadcast1ElementTestData,
624 armnn::ComparisonOperation::GreaterOrEqual);
625}
626
627LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorUint8Test(
628 armnn::IWorkloadFactory& workloadFactory,
629 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
630{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000631 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100632 workloadFactory,
633 memoryManager,
634 s_Broadcast1dVectorTestData,
635 armnn::ComparisonOperation::GreaterOrEqual);
636}
637
638// Less
639LayerTestResult<uint8_t, 4> LessSimpleTest(armnn::IWorkloadFactory& workloadFactory,
640 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
641{
642 return ComparisonTestImpl<armnn::DataType::Float32>(
643 workloadFactory,
644 memoryManager,
645 s_SimpleTestData,
646 armnn::ComparisonOperation::Less);
647}
648
649LayerTestResult<uint8_t, 4> LessBroadcast1ElementTest(
650 armnn::IWorkloadFactory& workloadFactory,
651 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
652{
653 return ComparisonTestImpl<armnn::DataType::Float32>(
654 workloadFactory,
655 memoryManager,
656 s_Broadcast1ElementTestData,
657 armnn::ComparisonOperation::Less);
658}
659
660LayerTestResult<uint8_t, 4> LessBroadcast1dVectorTest(
661 armnn::IWorkloadFactory& workloadFactory,
662 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
663{
664 return ComparisonTestImpl<armnn::DataType::Float32>(
665 workloadFactory,
666 memoryManager,
667 s_Broadcast1dVectorTestData,
668 armnn::ComparisonOperation::Less);
669}
670
671LayerTestResult<uint8_t, 4> LessSimpleFloat16Test(
672 armnn::IWorkloadFactory& workloadFactory,
673 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
674{
675 return ComparisonTestImpl<armnn::DataType::Float16>(
676 workloadFactory,
677 memoryManager,
678 s_SimpleTestData,
679 armnn::ComparisonOperation::Less);
680}
681
682LayerTestResult<uint8_t, 4> LessBroadcast1ElementFloat16Test(
683 armnn::IWorkloadFactory& workloadFactory,
684 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
685{
686 return ComparisonTestImpl<armnn::DataType::Float16>(
687 workloadFactory,
688 memoryManager,
689 s_Broadcast1ElementTestData,
690 armnn::ComparisonOperation::Less);
691}
692
693LayerTestResult<uint8_t, 4> LessBroadcast1dVectorFloat16Test(
694 armnn::IWorkloadFactory& workloadFactory,
695 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
696{
697 return ComparisonTestImpl<armnn::DataType::Float16>(
698 workloadFactory,
699 memoryManager,
700 s_Broadcast1dVectorTestData,
701 armnn::ComparisonOperation::Less);
702}
703
704LayerTestResult<uint8_t, 4> LessSimpleUint8Test(
705 armnn::IWorkloadFactory& workloadFactory,
706 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
707{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000708 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100709 workloadFactory,
710 memoryManager,
711 s_SimpleTestData,
712 armnn::ComparisonOperation::Less);
713}
714
715LayerTestResult<uint8_t, 4> LessBroadcast1ElementUint8Test(
716 armnn::IWorkloadFactory& workloadFactory,
717 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
718{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000719 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100720 workloadFactory,
721 memoryManager,
722 s_Broadcast1ElementTestData,
723 armnn::ComparisonOperation::Less);
724}
725
726LayerTestResult<uint8_t, 4> LessBroadcast1dVectorUint8Test(
727 armnn::IWorkloadFactory& workloadFactory,
728 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
729{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000730 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100731 workloadFactory,
732 memoryManager,
733 s_Broadcast1dVectorTestData,
734 armnn::ComparisonOperation::Less);
735}
736
737// LessOrEqual
738LayerTestResult<uint8_t, 4> LessOrEqualSimpleTest(
739 armnn::IWorkloadFactory& workloadFactory,
740 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
741{
742 return ComparisonTestImpl<armnn::DataType::Float32>(
743 workloadFactory,
744 memoryManager,
745 s_SimpleTestData,
746 armnn::ComparisonOperation::LessOrEqual);
747}
748
749LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementTest(
750 armnn::IWorkloadFactory& workloadFactory,
751 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
752{
753 return ComparisonTestImpl<armnn::DataType::Float32>(
754 workloadFactory,
755 memoryManager,
756 s_Broadcast1ElementTestData,
757 armnn::ComparisonOperation::LessOrEqual);
758}
759
760LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorTest(
761 armnn::IWorkloadFactory& workloadFactory,
762 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
763{
764 return ComparisonTestImpl<armnn::DataType::Float32>(
765 workloadFactory,
766 memoryManager,
767 s_Broadcast1dVectorTestData,
768 armnn::ComparisonOperation::LessOrEqual);
769}
770
771LayerTestResult<uint8_t, 4> LessOrEqualSimpleFloat16Test(
772 armnn::IWorkloadFactory& workloadFactory,
773 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
774{
775 return ComparisonTestImpl<armnn::DataType::Float16>(
776 workloadFactory,
777 memoryManager,
778 s_SimpleTestData,
779 armnn::ComparisonOperation::LessOrEqual);
780}
781
782LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementFloat16Test(
783 armnn::IWorkloadFactory& workloadFactory,
784 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
785{
786 return ComparisonTestImpl<armnn::DataType::Float16>(
787 workloadFactory,
788 memoryManager,
789 s_Broadcast1ElementTestData,
790 armnn::ComparisonOperation::LessOrEqual);
791}
792
793LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorFloat16Test(
794 armnn::IWorkloadFactory& workloadFactory,
795 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
796{
797 return ComparisonTestImpl<armnn::DataType::Float16>(
798 workloadFactory,
799 memoryManager,
800 s_Broadcast1dVectorTestData,
801 armnn::ComparisonOperation::LessOrEqual);
802}
803
804LayerTestResult<uint8_t, 4> LessOrEqualSimpleUint8Test(
805 armnn::IWorkloadFactory& workloadFactory,
806 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
807{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000808 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100809 workloadFactory,
810 memoryManager,
811 s_SimpleTestData,
812 armnn::ComparisonOperation::LessOrEqual);
813}
814
815LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementUint8Test(
816 armnn::IWorkloadFactory& workloadFactory,
817 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
818{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000819 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100820 workloadFactory,
821 memoryManager,
822 s_Broadcast1ElementTestData,
823 armnn::ComparisonOperation::LessOrEqual);
824}
825
826LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorUint8Test(
827 armnn::IWorkloadFactory& workloadFactory,
828 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
829{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000830 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100831 workloadFactory,
832 memoryManager,
833 s_Broadcast1dVectorTestData,
834 armnn::ComparisonOperation::LessOrEqual);
835}
836
837// NotEqual
838LayerTestResult<uint8_t, 4> NotEqualSimpleTest(
839 armnn::IWorkloadFactory& workloadFactory,
840 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
841{
842 return ComparisonTestImpl<armnn::DataType::Float32>(
843 workloadFactory,
844 memoryManager,
845 s_SimpleTestData,
846 armnn::ComparisonOperation::NotEqual);
847}
848
849LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementTest(
850 armnn::IWorkloadFactory& workloadFactory,
851 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
852{
853 return ComparisonTestImpl<armnn::DataType::Float32>(
854 workloadFactory,
855 memoryManager,
856 s_Broadcast1ElementTestData,
857 armnn::ComparisonOperation::NotEqual);
858}
859
860LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorTest(
861 armnn::IWorkloadFactory& workloadFactory,
862 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
863{
864 return ComparisonTestImpl<armnn::DataType::Float32>(
865 workloadFactory,
866 memoryManager,
867 s_Broadcast1dVectorTestData,
868 armnn::ComparisonOperation::NotEqual);
869}
870
871LayerTestResult<uint8_t, 4> NotEqualSimpleFloat16Test(
872 armnn::IWorkloadFactory& workloadFactory,
873 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
874{
875 return ComparisonTestImpl<armnn::DataType::Float16>(
876 workloadFactory,
877 memoryManager,
878 s_SimpleTestData,
879 armnn::ComparisonOperation::NotEqual);
880}
881
882LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementFloat16Test(
883 armnn::IWorkloadFactory& workloadFactory,
884 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
885{
886 return ComparisonTestImpl<armnn::DataType::Float16>(
887 workloadFactory,
888 memoryManager,
889 s_Broadcast1ElementTestData,
890 armnn::ComparisonOperation::NotEqual);
891}
892
893LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorFloat16Test(
894 armnn::IWorkloadFactory& workloadFactory,
895 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
896{
897 return ComparisonTestImpl<armnn::DataType::Float16>(
898 workloadFactory,
899 memoryManager,
900 s_Broadcast1dVectorTestData,
901 armnn::ComparisonOperation::NotEqual);
902}
903
904LayerTestResult<uint8_t, 4> NotEqualSimpleUint8Test(
905 armnn::IWorkloadFactory& workloadFactory,
906 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
907{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000908 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100909 workloadFactory,
910 memoryManager,
911 s_SimpleTestData,
912 armnn::ComparisonOperation::NotEqual);
913}
914
915LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementUint8Test(
916 armnn::IWorkloadFactory& workloadFactory,
917 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
918{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000919 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100920 workloadFactory,
921 memoryManager,
922 s_Broadcast1ElementTestData,
923 armnn::ComparisonOperation::NotEqual);
924}
925
926LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorUint8Test(
927 armnn::IWorkloadFactory& workloadFactory,
928 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
929{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000930 return ComparisonTestImpl<armnn::DataType::QAsymmU8>(
Aron Virginas-Tar3bc00ec2019-10-18 15:42:58 +0100931 workloadFactory,
932 memoryManager,
933 s_Broadcast1dVectorTestData,
934 armnn::ComparisonOperation::NotEqual);
935}