// // Copyright © 2019 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "ComparisonTestImpl.hpp" #include #include #include #include #include #include #include #include #include namespace { template > LayerTestResult ComparisonTestImpl( armnn::IWorkloadFactory & workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory, const armnn::ComparisonDescriptor& descriptor, const armnn::TensorShape& shape0, std::vector values0, float quantScale0, int quantOffset0, const armnn::TensorShape& shape1, std::vector values1, float quantScale1, int quantOffset1, const armnn::TensorShape& outShape, std::vector outValues, float outQuantScale, int outQuantOffset) { IgnoreUnused(memoryManager); ARMNN_ASSERT(shape0.GetNumDimensions() == NumDims); armnn::TensorInfo inputTensorInfo0(shape0, ArmnnInType, quantScale0, quantOffset0); ARMNN_ASSERT(shape1.GetNumDimensions() == NumDims); armnn::TensorInfo inputTensorInfo1(shape1, ArmnnInType, quantScale1, quantOffset1); ARMNN_ASSERT(outShape.GetNumDimensions() == NumDims); armnn::TensorInfo outputTensorInfo(outShape, armnn::DataType::Boolean, outQuantScale, outQuantOffset); std::vector actualOutput(outputTensorInfo.GetNumElements()); std::unique_ptr inputHandle0 = tensorHandleFactory.CreateTensorHandle(inputTensorInfo0); std::unique_ptr inputHandle1 = tensorHandleFactory.CreateTensorHandle(inputTensorInfo1); std::unique_ptr outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo); armnn::ComparisonQueueDescriptor qDescriptor; qDescriptor.m_Parameters = descriptor; armnn::WorkloadInfo info; AddInputToWorkload(qDescriptor, info, inputTensorInfo0, inputHandle0.get()); AddInputToWorkload(qDescriptor, info, inputTensorInfo1, inputHandle1.get()); AddOutputToWorkload(qDescriptor, info, outputTensorInfo, outputHandle.get()); std::unique_ptr workload = workloadFactory.CreateWorkload(armnn::LayerType::Comparison, qDescriptor, info); inputHandle0->Allocate(); inputHandle1->Allocate(); outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle0.get(), values0.data()); CopyDataToITensorHandle(inputHandle1.get(), values1.data()); workload->PostAllocationConfigure(); ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get()); return LayerTestResult(actualOutput, outValues, outputHandle->GetShape(), outputTensorInfo.GetShape(), true); } template > LayerTestResult ComparisonTestImpl( armnn::IWorkloadFactory & workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory, const armnn::ComparisonDescriptor& descriptor, const armnn::TensorShape& shape0, std::vector values0, const armnn::TensorShape& shape1, std::vector values1, const armnn::TensorShape outShape, std::vector outValues, float quantScale = 1.f, int quantOffset = 0) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, descriptor, shape0, values0, quantScale, quantOffset, shape1, values1, quantScale, quantOffset, outShape, outValues, quantScale, quantOffset); } template std::vector GetExpectedOutputData(const TestData& testData, armnn::ComparisonOperation operation) { switch (operation) { case armnn::ComparisonOperation::Equal: return testData.m_OutputEqual; case armnn::ComparisonOperation::Greater: return testData.m_OutputGreater; case armnn::ComparisonOperation::GreaterOrEqual: return testData.m_OutputGreaterOrEqual; case armnn::ComparisonOperation::Less: return testData.m_OutputLess; case armnn::ComparisonOperation::LessOrEqual: return testData.m_OutputLessOrEqual; case armnn::ComparisonOperation::NotEqual: default: return testData.m_OutputNotEqual; } } template LayerTestResult 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) { using T = armnn::ResolveType; std::vector inputData0 = armnnUtils::QuantizedVector(testData.m_InputData0, quantScale, quantOffset); std::vector inputData1 = armnnUtils::QuantizedVector(testData.m_InputData1, quantScale, quantOffset); return ComparisonTestImpl<4, ArmnnInType>( workloadFactory, memoryManager, tensorHandleFactory, armnn::ComparisonDescriptor(operation), testData.m_InputShape0, inputData0, testData.m_InputShape1, inputData1, testData.m_OutputShape, GetExpectedOutputData(testData, operation), quantScale, quantOffset); } class ComparisonTestData { public: ComparisonTestData() = default; virtual ~ComparisonTestData() = default; armnn::TensorShape m_InputShape0; armnn::TensorShape m_InputShape1; armnn::TensorShape m_OutputShape; std::vector m_InputData0; std::vector m_InputData1; std::vector m_OutputEqual; std::vector m_OutputGreater; std::vector m_OutputGreaterOrEqual; std::vector m_OutputLess; std::vector m_OutputLessOrEqual; std::vector m_OutputNotEqual; }; class SimpleTestData : public ComparisonTestData { public: SimpleTestData() : ComparisonTestData() { m_InputShape0 = { 2, 2, 2, 2 }; m_InputShape1 = m_InputShape0; m_OutputShape = m_InputShape0; m_InputData0 = { 1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f, 3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f }; m_InputData1 = { 1.f, 1.f, 1.f, 1.f, 3.f, 3.f, 3.f, 3.f, 5.f, 5.f, 5.f, 5.f, 4.f, 4.f, 4.f, 4.f }; m_OutputEqual = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }; m_OutputGreater = { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; m_OutputGreaterOrEqual = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }; m_OutputLess = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 }; m_OutputLessOrEqual = { 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }; m_OutputNotEqual = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }; } }; class Broadcast1ElementTestData : public ComparisonTestData { public: Broadcast1ElementTestData() : ComparisonTestData() { m_InputShape0 = { 1, 2, 2, 2 }; m_InputShape1 = { 1, 1, 1, 1 }; m_OutputShape = m_InputShape0; m_InputData0 = { 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f }; m_InputData1 = { 3.f }; m_OutputEqual = { 0, 0, 1, 0, 0, 0, 0, 0 }; m_OutputGreater = { 0, 0, 0, 1, 1, 1, 1, 1 }; m_OutputGreaterOrEqual = { 0, 0, 1, 1, 1, 1, 1, 1 }; m_OutputLess = { 1, 1, 0, 0, 0, 0, 0, 0 }; m_OutputLessOrEqual = { 1, 1, 1, 0, 0, 0, 0, 0 }; m_OutputNotEqual = { 1, 1, 0, 1, 1, 1, 1, 1 }; } }; class Broadcast1dVectorTestData : public ComparisonTestData { public: Broadcast1dVectorTestData() : ComparisonTestData() { m_InputShape0 = { 1, 2, 2, 3 }; m_InputShape1 = { 1, 1, 1, 3 }; m_OutputShape = m_InputShape0; m_InputData0 = { 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, 10.f, 11.f, 12.f }; m_InputData1 = { 4.f, 5.f, 6.f }; m_OutputEqual = { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; m_OutputGreater = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 }; m_OutputGreaterOrEqual = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; m_OutputLess = { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; m_OutputLessOrEqual = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }; m_OutputNotEqual = { 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1 }; } }; static SimpleTestData s_SimpleTestData; static Broadcast1ElementTestData s_Broadcast1ElementTestData; static Broadcast1dVectorTestData s_Broadcast1dVectorTestData; } // anonymous namespace // Equal LayerTestResult EqualSimpleTest(armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Equal); } LayerTestResult EqualBroadcast1ElementTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Equal); } LayerTestResult EqualBroadcast1dVectorTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Equal); } LayerTestResult EqualSimpleFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Equal); } LayerTestResult EqualBroadcast1ElementFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Equal); } LayerTestResult EqualBroadcast1dVectorFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Equal); } LayerTestResult EqualSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Equal); } LayerTestResult EqualBroadcast1ElementUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Equal); } LayerTestResult EqualBroadcast1dVectorUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Equal); } // Greater LayerTestResult GreaterSimpleTest(armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Greater); } LayerTestResult GreaterBroadcast1ElementTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Greater); } LayerTestResult GreaterBroadcast1dVectorTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Greater); } LayerTestResult GreaterSimpleFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Greater); } LayerTestResult GreaterBroadcast1ElementFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Greater); } LayerTestResult GreaterBroadcast1dVectorFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Greater); } LayerTestResult GreaterSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Greater); } LayerTestResult GreaterBroadcast1ElementUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Greater); } LayerTestResult GreaterBroadcast1dVectorUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Greater); } // GreaterOrEqual LayerTestResult GreaterOrEqualSimpleTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::GreaterOrEqual); } LayerTestResult GreaterOrEqualBroadcast1ElementTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::GreaterOrEqual); } LayerTestResult GreaterOrEqualBroadcast1dVectorTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::GreaterOrEqual); } LayerTestResult GreaterOrEqualSimpleFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::GreaterOrEqual); } LayerTestResult GreaterOrEqualBroadcast1ElementFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::GreaterOrEqual); } LayerTestResult GreaterOrEqualBroadcast1dVectorFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::GreaterOrEqual); } LayerTestResult GreaterOrEqualSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::GreaterOrEqual); } LayerTestResult GreaterOrEqualBroadcast1ElementUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::GreaterOrEqual); } LayerTestResult GreaterOrEqualBroadcast1dVectorUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::GreaterOrEqual); } // Less LayerTestResult LessSimpleTest(armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Less); } LayerTestResult LessBroadcast1ElementTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Less); } LayerTestResult LessBroadcast1dVectorTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Less); } LayerTestResult LessSimpleFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Less); } LayerTestResult LessBroadcast1ElementFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Less); } LayerTestResult LessBroadcast1dVectorFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Less); } LayerTestResult LessSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::Less); } LayerTestResult LessBroadcast1ElementUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::Less); } LayerTestResult LessBroadcast1dVectorUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::Less); } // LessOrEqual LayerTestResult LessOrEqualSimpleTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::LessOrEqual); } LayerTestResult LessOrEqualBroadcast1ElementTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::LessOrEqual); } LayerTestResult LessOrEqualBroadcast1dVectorTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::LessOrEqual); } LayerTestResult LessOrEqualSimpleFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::LessOrEqual); } LayerTestResult LessOrEqualBroadcast1ElementFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::LessOrEqual); } LayerTestResult LessOrEqualBroadcast1dVectorFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::LessOrEqual); } LayerTestResult LessOrEqualSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::LessOrEqual); } LayerTestResult LessOrEqualBroadcast1ElementUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::LessOrEqual); } LayerTestResult LessOrEqualBroadcast1dVectorUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::LessOrEqual); } // NotEqual LayerTestResult NotEqualSimpleTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::NotEqual); } LayerTestResult NotEqualBroadcast1ElementTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::NotEqual); } LayerTestResult NotEqualBroadcast1dVectorTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::NotEqual); } LayerTestResult NotEqualSimpleFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::NotEqual); } LayerTestResult NotEqualBroadcast1ElementFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::NotEqual); } LayerTestResult NotEqualBroadcast1dVectorFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::NotEqual); } LayerTestResult NotEqualSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_SimpleTestData, armnn::ComparisonOperation::NotEqual); } LayerTestResult NotEqualBroadcast1ElementUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1ElementTestData, armnn::ComparisonOperation::NotEqual); } LayerTestResult NotEqualBroadcast1dVectorUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { return ComparisonTestImpl( workloadFactory, memoryManager, tensorHandleFactory, s_Broadcast1dVectorTestData, armnn::ComparisonOperation::NotEqual); }