21 template <std::
size_t NumDims>
27 std::vector<uint8_t> input,
29 std::vector<uint8_t> expectedOutput,
38 auto inputTensor = MakeTensor<uint8_t, NumDims>(inputTensorInfo, input);
42 std::unique_ptr <armnn::ITensorHandle> inputHandle = tensorHandleFactory.
CreateTensorHandle(inputTensorInfo);
43 std::unique_ptr <armnn::ITensorHandle> outputHandle = tensorHandleFactory.
CreateTensorHandle(outputTensorInfo);
50 AddInputToWorkload(qDesc, info, inputTensorInfo, inputHandle.get());
51 AddOutputToWorkload(qDesc, info, outputTensorInfo, outputHandle.get());
55 inputHandle->Allocate();
56 outputHandle->Allocate();
60 workload->PostAllocationConfigure();
61 ExecuteWorkload(*workload, memoryManager);
65 ret.outputExpected = MakeTensor<uint8_t, NumDims>(outputTensorInfo, expectedOutput);
66 ret.compareBoolean =
true;
70 template <std::
size_t NumDims>
77 std::vector<uint8_t> input0,
78 std::vector<uint8_t> input1,
80 std::vector<uint8_t> expectedOutput,
92 auto inputTensor0 = MakeTensor<uint8_t, NumDims>(inputTensorInfo0, input0);
93 auto inputTensor1 = MakeTensor<uint8_t, NumDims>(inputTensorInfo1, input1);
97 std::unique_ptr <armnn::ITensorHandle> inputHandle0 = tensorHandleFactory.
CreateTensorHandle(inputTensorInfo0);
98 std::unique_ptr <armnn::ITensorHandle> inputHandle1 = tensorHandleFactory.
CreateTensorHandle(inputTensorInfo1);
99 std::unique_ptr <armnn::ITensorHandle> outputHandle = tensorHandleFactory.
CreateTensorHandle(outputTensorInfo);
106 AddInputToWorkload(qDesc, info, inputTensorInfo0, inputHandle0.get());
107 AddInputToWorkload(qDesc, info, inputTensorInfo1, inputHandle1.get());
108 AddOutputToWorkload(qDesc, info, outputTensorInfo, outputHandle.get());
112 inputHandle0->Allocate();
113 inputHandle1->Allocate();
114 outputHandle->Allocate();
119 workload->PostAllocationConfigure();
120 ExecuteWorkload(*workload, memoryManager);
124 ret.outputExpected = MakeTensor<uint8_t, NumDims>(outputTensorInfo, expectedOutput);
125 ret.compareBoolean =
true;
132 UnaryTestData() =
default;
133 virtual ~UnaryTestData() =
default;
138 std::vector<uint8_t> m_InputData;
140 std::vector<uint8_t> m_OutputNot;
146 BinaryTestData() =
default;
147 virtual ~BinaryTestData() =
default;
153 std::vector<uint8_t> m_InputData0;
154 std::vector<uint8_t> m_InputData1;
156 std::vector<uint8_t> m_OutputAnd;
157 std::vector<uint8_t> m_OutputOr;
160 class SimpleUnaryTestData :
public UnaryTestData
163 SimpleUnaryTestData() : UnaryTestData()
165 m_InputShape = { 1, 1, 1, 4 };
166 m_OutputShape = m_InputShape;
170 true,
false,
false,
true 175 false,
true,
true,
false 180 class SimpleUnaryIntTestData :
public UnaryTestData
183 SimpleUnaryIntTestData() : UnaryTestData()
185 m_InputShape = { 1, 1, 1, 4 };
186 m_OutputShape = m_InputShape;
200 class SimpleBinaryTestData :
public BinaryTestData
203 SimpleBinaryTestData() : BinaryTestData()
205 m_InputShape0 = { 1, 1, 1, 4 };
206 m_InputShape1 = m_InputShape0;
207 m_OutputShape = m_InputShape1;
211 true,
false,
false,
true 216 true,
false,
true,
false 221 true,
false,
false,
false 226 true,
false,
true,
true 231 class SimpleBinaryIntTestData :
public BinaryTestData
234 SimpleBinaryIntTestData() : BinaryTestData()
236 m_InputShape0 = { 1, 1, 1, 4 };
237 m_InputShape1 = m_InputShape0;
238 m_OutputShape = m_InputShape1;
262 class BroadcastBinary1TestData :
public BinaryTestData
265 BroadcastBinary1TestData() : BinaryTestData()
267 m_InputShape0 = { 1, 1, 1, 4 };
268 m_InputShape1 = { 1, 1, 1, 1 };
269 m_OutputShape = m_InputShape0;
273 true,
false,
false,
true 283 true,
false,
false,
true 288 true,
true,
true,
true 293 class BroadcastBinary2TestData :
public BinaryTestData
296 BroadcastBinary2TestData() : BinaryTestData()
298 m_InputShape0 = { 1, 1, 1, 1 };
299 m_InputShape1 = { 1, 1, 1, 4 };
300 m_OutputShape = m_InputShape1;
309 true,
false,
false,
true 314 true,
false,
false,
true 319 true,
true,
true,
true 324 class BroadcastBinary3TestData :
public BinaryTestData
327 BroadcastBinary3TestData() : BinaryTestData()
329 m_InputShape0 = { 1, 1, 1, 4 };
330 m_InputShape1 = { 1, 1, 1, 1 };
331 m_OutputShape = m_InputShape0;
335 true,
false,
false,
true 345 false,
false,
false,
false 350 true,
false,
false,
true 355 static SimpleUnaryTestData s_SimpleUnaryTestData;
356 static SimpleBinaryTestData s_SimpleBinaryTestData;
358 static SimpleUnaryIntTestData s_SimpleUnaryIntTestData;
359 static SimpleBinaryIntTestData s_SimpleBinaryIntTestData;
361 static BroadcastBinary1TestData s_BroadcastBinary1TestData;
362 static BroadcastBinary2TestData s_BroadcastBinary2TestData;
363 static BroadcastBinary3TestData s_BroadcastBinary3TestData;
373 return LogicalUnaryTestHelper<4>(workloadFactory,
376 s_SimpleUnaryTestData.m_InputShape,
377 s_SimpleUnaryTestData.m_InputData,
378 s_SimpleUnaryTestData.m_OutputShape,
379 s_SimpleUnaryTestData.m_OutputNot,
380 tensorHandleFactory);
388 return LogicalUnaryTestHelper<4>(workloadFactory,
391 s_SimpleUnaryIntTestData.m_InputShape,
392 s_SimpleUnaryIntTestData.m_InputData,
393 s_SimpleUnaryIntTestData.m_OutputShape,
394 s_SimpleUnaryIntTestData.m_OutputNot,
395 tensorHandleFactory);
403 return LogicalBinaryTestHelper<4>(workloadFactory,
406 s_SimpleBinaryTestData.m_InputShape0,
407 s_SimpleBinaryTestData.m_InputShape1,
408 s_SimpleBinaryTestData.m_InputData0,
409 s_SimpleBinaryTestData.m_InputData1,
410 s_SimpleBinaryTestData.m_OutputShape,
411 s_SimpleBinaryTestData.m_OutputAnd,
412 tensorHandleFactory);
420 return LogicalBinaryTestHelper<4>(workloadFactory,
423 s_SimpleBinaryTestData.m_InputShape0,
424 s_SimpleBinaryTestData.m_InputShape1,
425 s_SimpleBinaryTestData.m_InputData0,
426 s_SimpleBinaryTestData.m_InputData1,
427 s_SimpleBinaryTestData.m_OutputShape,
428 s_SimpleBinaryTestData.m_OutputOr,
429 tensorHandleFactory);
437 return LogicalBinaryTestHelper<4>(workloadFactory,
440 s_SimpleBinaryIntTestData.m_InputShape0,
441 s_SimpleBinaryIntTestData.m_InputShape1,
442 s_SimpleBinaryIntTestData.m_InputData0,
443 s_SimpleBinaryIntTestData.m_InputData1,
444 s_SimpleBinaryIntTestData.m_OutputShape,
445 s_SimpleBinaryIntTestData.m_OutputAnd,
446 tensorHandleFactory);
454 return LogicalBinaryTestHelper<4>(workloadFactory,
457 s_SimpleBinaryIntTestData.m_InputShape0,
458 s_SimpleBinaryIntTestData.m_InputShape1,
459 s_SimpleBinaryIntTestData.m_InputData0,
460 s_SimpleBinaryIntTestData.m_InputData1,
461 s_SimpleBinaryIntTestData.m_OutputShape,
462 s_SimpleBinaryIntTestData.m_OutputOr,
463 tensorHandleFactory);
472 return LogicalBinaryTestHelper<4>(workloadFactory,
475 s_BroadcastBinary1TestData.m_InputShape0,
476 s_BroadcastBinary1TestData.m_InputShape1,
477 s_BroadcastBinary1TestData.m_InputData0,
478 s_BroadcastBinary1TestData.m_InputData1,
479 s_BroadcastBinary1TestData.m_OutputShape,
480 s_BroadcastBinary1TestData.m_OutputAnd,
481 tensorHandleFactory);
490 return LogicalBinaryTestHelper<4>(workloadFactory,
493 s_BroadcastBinary1TestData.m_InputShape0,
494 s_BroadcastBinary1TestData.m_InputShape1,
495 s_BroadcastBinary1TestData.m_InputData0,
496 s_BroadcastBinary1TestData.m_InputData1,
497 s_BroadcastBinary1TestData.m_OutputShape,
498 s_BroadcastBinary1TestData.m_OutputOr,
499 tensorHandleFactory);
508 return LogicalBinaryTestHelper<4>(workloadFactory,
511 s_BroadcastBinary2TestData.m_InputShape0,
512 s_BroadcastBinary2TestData.m_InputShape1,
513 s_BroadcastBinary2TestData.m_InputData0,
514 s_BroadcastBinary2TestData.m_InputData1,
515 s_BroadcastBinary2TestData.m_OutputShape,
516 s_BroadcastBinary2TestData.m_OutputAnd,
517 tensorHandleFactory);
526 return LogicalBinaryTestHelper<4>(workloadFactory,
529 s_BroadcastBinary2TestData.m_InputShape0,
530 s_BroadcastBinary2TestData.m_InputShape1,
531 s_BroadcastBinary2TestData.m_InputData0,
532 s_BroadcastBinary2TestData.m_InputData1,
533 s_BroadcastBinary2TestData.m_OutputShape,
534 s_BroadcastBinary2TestData.m_OutputOr,
535 tensorHandleFactory);
544 return LogicalBinaryTestHelper<4>(workloadFactory,
547 s_BroadcastBinary3TestData.m_InputShape0,
548 s_BroadcastBinary3TestData.m_InputShape1,
549 s_BroadcastBinary3TestData.m_InputData0,
550 s_BroadcastBinary3TestData.m_InputData1,
551 s_BroadcastBinary3TestData.m_OutputShape,
552 s_BroadcastBinary3TestData.m_OutputAnd,
553 tensorHandleFactory);
562 return LogicalBinaryTestHelper<4>(workloadFactory,
565 s_BroadcastBinary3TestData.m_InputShape0,
566 s_BroadcastBinary3TestData.m_InputShape1,
567 s_BroadcastBinary3TestData.m_InputData0,
568 s_BroadcastBinary3TestData.m_InputData1,
569 s_BroadcastBinary3TestData.m_OutputShape,
570 s_BroadcastBinary3TestData.m_OutputOr,
571 tensorHandleFactory);
LayerTestResult< uint8_t, 4 > LogicalAndBroadcast1Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
virtual std::unique_ptr< IWorkload > CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor &descriptor, const WorkloadInfo &Info) const
A LogicalBinaryDescriptor for the LogicalBinaryLayer.
LayerTestResult< uint8_t, 4 > LogicalOrIntTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerDescriptor m_Parameters
LayerTestResult< uint8_t, 4 > LogicalNotIntTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LogicalAndBroadcast3Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LogicalOrBroadcast2Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
#define ARMNN_ASSERT(COND)
LayerTestResult< uint8_t, 4 > LogicalNotTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
virtual std::unique_ptr< IWorkload > CreateLogicalBinary(const LogicalBinaryQueueDescriptor &descriptor, const WorkloadInfo &Info) const
LayerTestResult< uint8_t, 4 > LogicalAndTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
unsigned int GetNumDimensions() const
Function that returns the tensor rank.
LayerTestResult< uint8_t, 4 > LogicalAndBroadcast2Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LogicalAndIntTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
LayerTestResult< uint8_t, 4 > LogicalOrTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
Contains information about inputs and outputs to a layer.
LayerTestResult< uint8_t, 4 > LogicalOrBroadcast3Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo) const =0
LayerTestResult< uint8_t, 4 > LogicalOrBroadcast1Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)