// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "GreaterTestImpl.hpp" #include "ElementwiseTestImpl.hpp" #include template<> std::unique_ptr CreateWorkload( const armnn::IWorkloadFactory& workloadFactory, const armnn::WorkloadInfo& info, const armnn::GreaterQueueDescriptor& descriptor) { return workloadFactory.CreateGreater(descriptor, info); } LayerTestResult GreaterSimpleTest(armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int width = 2u; const unsigned int height = 2u; const unsigned int channelCount = 2u; const unsigned int batchSize = 2u; unsigned int shape[] = { batchSize, channelCount, height, width }; std::vector input0 = { 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 }; std::vector input1 = { 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 }; std::vector output = { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::Float32, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape, input0, shape, input1, shape, output); } LayerTestResult GreaterBroadcast1ElementTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int shape0[] = { 1, 2, 2, 2 }; unsigned int shape1[] = { 1, 1, 1, 1 }; std::vector input0 = { 1, 2, 3, 4, 5, 6, 7, 8}; std::vector input1 = { 1 }; std::vector output = { 0, 1, 1, 1, 1, 1, 1, 1}; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::Float32, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape0, input0, shape1, input1, shape0, output); } LayerTestResult GreaterBroadcast1DVectorTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 2, 2, 3 }; const unsigned int shape1[] = { 1, 1, 1, 3 }; std::vector input0 = { 1.0f, 2.9f, 2.1f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f }; std::vector input1 = { 1.f, 3.f, 2.f }; std::vector output = { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::Float32, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape0, input0, shape1, input1, shape0, output); } LayerTestResult GreaterFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { using namespace half_float::literal; const unsigned int width = 2u; const unsigned int height = 2u; const unsigned int channelCount = 2u; const unsigned int batchSize = 2u; unsigned int shape[] = { batchSize, channelCount, height, width }; std::vector input0 = { 1._h, 1._h, 1._h, 1._h, 5._h, 5._h, 5._h, 5._h, 3._h, 3._h, 3._h, 3._h, 4._h, 4._h, 4._h, 4._h }; std::vector input1 = { 1._h, 1._h, 1._h, 1._h, 3._h, 3._h, 3._h, 3._h, 5._h, 5._h, 5._h, 5._h, 4._h, 4._h, 4._h, 4._h }; std::vector output = { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::Float16, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape, input0, shape, input1, shape, output); } LayerTestResult GreaterBroadcast1ElementFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { using namespace half_float::literal; unsigned int shape0[] = { 1, 2, 2, 2 }; unsigned int shape1[] = { 1, 1, 1, 1 }; std::vector input0 = { 1._h, 2._h, 3._h, 4._h, 5._h, 6._h, 7._h, 8._h }; std::vector input1 = { 1._h }; std::vector output = { 0, 1, 1, 1, 1, 1, 1, 1}; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::Float16, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape0, input0, shape1, input1, shape0, output); } LayerTestResult GreaterBroadcast1DVectorFloat16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { using namespace half_float::literal; const unsigned int shape0[] = { 1, 2, 2, 3 }; const unsigned int shape1[] = { 1, 1, 1, 3 }; std::vector input0 = { 1.0_h, 2.9_h, 2.1_h, 4.0_h, 5.0_h, 6.0_h, 7.0_h, 8.0_h, 9.0_h, 10.0_h, 11.0_h, 12.0_h }; std::vector input1 = { 1._h, 3._h, 2._h }; std::vector output = { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::Float16, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape0, input0, shape1, input1, shape0, output); } LayerTestResult GreaterUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int shape[] = { 2, 2, 2, 2 }; // See dequantized values to the right. std::vector input0 = { 1, 1, 1, 1, 6, 6, 6, 6, 3, 3, 3, 3, 5, 5, 5, 5 }; std::vector input1 = { 2, 2, 2, 2, 6, 6, 6, 6, 2, 2, 2, 2, 5, 5, 5, 5 }; std::vector output = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 }; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape, input0, shape, input1, shape, output); } LayerTestResult GreaterBroadcast1ElementUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 2, 2, 3 }; const unsigned int shape1[] = { 1, 1, 1, 1 }; std::vector input0 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; std::vector input1 = { 1 }; std::vector output = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape0, input0, shape1, input1, shape0, output); } LayerTestResult GreaterBroadcast1DVectorUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 2, 2, 3 }; const unsigned int shape1[] = { 1, 1, 1, 3 }; std::vector input0 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; std::vector input1 = { 1, 1, 3 }; std::vector output = { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; return ElementwiseTestHelper<4, armnn::GreaterQueueDescriptor, armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>( workloadFactory, memoryManager, shape0, input0, shape1, input1, shape0, output); }