aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/test/layerTests
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/backendsCommon/test/layerTests')
-rw-r--r--src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp126
-rw-r--r--src/backends/backendsCommon/test/layerTests/EqualTestImpl.cpp57
-rw-r--r--src/backends/backendsCommon/test/layerTests/GreaterTestImpl.cpp68
3 files changed, 167 insertions, 84 deletions
diff --git a/src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp
new file mode 100644
index 0000000000..6ce9b306c0
--- /dev/null
+++ b/src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp
@@ -0,0 +1,126 @@
+//
+// Copyright © 2019 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "LayerTestResult.hpp"
+
+#include <armnn/ArmNN.hpp>
+
+#include <ResolveType.hpp>
+
+#include <backendsCommon/IBackendInternal.hpp>
+#include <backendsCommon/Workload.hpp>
+#include <backendsCommon/WorkloadData.hpp>
+#include <backendsCommon/WorkloadFactory.hpp>
+
+#include <backendsCommon/test/TensorCopyUtils.hpp>
+#include <backendsCommon/test/WorkloadTestUtils.hpp>
+
+#include <test/TensorHelpers.hpp>
+
+template <std::size_t NumDims,
+ armnn::DataType ArmnnInType,
+ typename InType = armnn::ResolveType<ArmnnInType>>
+LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
+ armnn::IWorkloadFactory & workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,
+ const armnn::ComparisonDescriptor& descriptor,
+ const unsigned int shape0[NumDims],
+ std::vector<InType> values0,
+ float quantScale0,
+ int quantOffset0,
+ const unsigned int shape1[NumDims],
+ std::vector<InType> values1,
+ float quantScale1,
+ int quantOffset1,
+ const unsigned int outShape[NumDims],
+ std::vector<uint8_t> outValues,
+ float outQuantScale,
+ int outQuantOffset)
+{
+ armnn::TensorInfo inputTensorInfo0{NumDims, shape0, ArmnnInType};
+ armnn::TensorInfo inputTensorInfo1{NumDims, shape1, ArmnnInType};
+ armnn::TensorInfo outputTensorInfo{NumDims, outShape, armnn::DataType::Boolean};
+
+ auto input0 = MakeTensor<InType, NumDims>(inputTensorInfo0, values0);
+ auto input1 = MakeTensor<InType, NumDims>(inputTensorInfo1, values1);
+
+ inputTensorInfo0.SetQuantizationScale(quantScale0);
+ inputTensorInfo0.SetQuantizationOffset(quantOffset0);
+
+ inputTensorInfo1.SetQuantizationScale(quantScale1);
+ inputTensorInfo1.SetQuantizationOffset(quantOffset1);
+
+ outputTensorInfo.SetQuantizationScale(outQuantScale);
+ outputTensorInfo.SetQuantizationOffset(outQuantOffset);
+
+ LayerTestResult<uint8_t, NumDims> ret(outputTensorInfo);
+
+ std::unique_ptr<armnn::ITensorHandle> inputHandle0 = workloadFactory.CreateTensorHandle(inputTensorInfo0);
+ std::unique_ptr<armnn::ITensorHandle> inputHandle1 = workloadFactory.CreateTensorHandle(inputTensorInfo1);
+ std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.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<armnn::IWorkload> workload = workloadFactory.CreateComparison(qDescriptor, info);
+
+ inputHandle0->Allocate();
+ inputHandle1->Allocate();
+ outputHandle->Allocate();
+
+ CopyDataToITensorHandle(inputHandle0.get(), input0.origin());
+ CopyDataToITensorHandle(inputHandle1.get(), input1.origin());
+
+ workload->PostAllocationConfigure();
+ ExecuteWorkload(*workload, memoryManager);
+
+ CopyDataFromITensorHandle(ret.output.origin(), outputHandle.get());
+
+ ret.outputExpected = MakeTensor<uint8_t, NumDims>(outputTensorInfo, outValues);
+ ret.compareBoolean = true;
+
+ return ret;
+}
+
+template <std::size_t NumDims,
+ armnn::DataType ArmnnInType,
+ typename InType = armnn::ResolveType<ArmnnInType>>
+LayerTestResult<uint8_t, NumDims> ComparisonTestImpl(
+ armnn::IWorkloadFactory & workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,
+ const armnn::ComparisonDescriptor& descriptor,
+ const unsigned int shape0[NumDims],
+ std::vector<InType> values0,
+ const unsigned int shape1[NumDims],
+ std::vector<InType> values1,
+ const unsigned int outShape[NumDims],
+ std::vector<uint8_t> outValues,
+ float qScale = 10.f,
+ int qOffset = 0)
+{
+ return ComparisonTestImpl<NumDims, ArmnnInType>(
+ workloadFactory,
+ memoryManager,
+ descriptor,
+ shape0,
+ values0,
+ qScale,
+ qOffset,
+ shape1,
+ values1,
+ qScale,
+ qOffset,
+ outShape,
+ outValues,
+ qScale,
+ qOffset);
+}
diff --git a/src/backends/backendsCommon/test/layerTests/EqualTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/EqualTestImpl.cpp
index b0b613c137..a3d2b2796f 100644
--- a/src/backends/backendsCommon/test/layerTests/EqualTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/EqualTestImpl.cpp
@@ -4,18 +4,10 @@
//
#include "EqualTestImpl.hpp"
-#include "ElementwiseTestImpl.hpp"
-#include <Half.hpp>
+#include "ComparisonTestImpl.hpp"
-template<>
-std::unique_ptr<armnn::IWorkload> CreateWorkload<armnn::EqualQueueDescriptor>(
- const armnn::IWorkloadFactory& workloadFactory,
- const armnn::WorkloadInfo& info,
- const armnn::EqualQueueDescriptor& descriptor)
-{
- return workloadFactory.CreateEqual(descriptor, info);
-}
+#include <Half.hpp>
LayerTestResult<uint8_t, 4> EqualSimpleTest(armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
@@ -39,9 +31,10 @@ LayerTestResult<uint8_t, 4> EqualSimpleTest(armnn::IWorkloadFactory& workloadFac
std::vector<uint8_t> output({ 1, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 1, 1, 1, 1 });
- return ElementwiseTestHelper<4, armnn::EqualQueueDescriptor, armnn::DataType::Float32, armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float32>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape,
input0,
shape,
@@ -62,9 +55,10 @@ LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
std::vector<uint8_t> output({ 1, 0, 0, 0, 0, 0, 0, 0});
- return ElementwiseTestHelper<4, armnn::EqualQueueDescriptor, armnn::DataType::Float32, armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float32>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape0,
input0,
shape1,
@@ -88,9 +82,10 @@ LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorTest(
std::vector<uint8_t> output({ 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0 });
- return ElementwiseTestHelper<4, armnn::EqualQueueDescriptor, armnn::DataType::Float32, armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float32>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape0,
input0,
shape1,
@@ -117,12 +112,10 @@ LayerTestResult<uint8_t, 4> EqualFloat16Test(
std::vector<uint8_t> output({ 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 0, 0, 0, 0 });
- return ElementwiseTestHelper<4,
- armnn::EqualQueueDescriptor,
- armnn::DataType::Float16,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float16>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape,
input0,
shape,
@@ -148,12 +141,10 @@ LayerTestResult<uint8_t, 4> EqualBroadcast1ElementFloat16Test(
std::vector<uint8_t> output({ 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0 });
- return ElementwiseTestHelper<4,
- armnn::EqualQueueDescriptor,
- armnn::DataType::Float16,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float16>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape0,
input0,
shape1,
@@ -179,12 +170,10 @@ LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorFloat16Test(
std::vector<uint8_t> output({ 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0 });
- return ElementwiseTestHelper<4,
- armnn::EqualQueueDescriptor,
- armnn::DataType::Float16,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float16>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape0,
input0,
shape1,
@@ -209,12 +198,10 @@ LayerTestResult<uint8_t, 4> EqualUint8Test(
std::vector<uint8_t> output({ 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 0, 0, 0, 0 });
- return ElementwiseTestHelper<4,
- armnn::EqualQueueDescriptor,
- armnn::DataType::QuantisedAsymm8,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape,
input0,
shape,
@@ -238,12 +225,10 @@ LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
std::vector<uint8_t> output({ 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0 });
- return ElementwiseTestHelper<4,
- armnn::EqualQueueDescriptor,
- armnn::DataType::QuantisedAsymm8,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape0,
input0,
shape1,
@@ -267,12 +252,10 @@ LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
std::vector<uint8_t> output({ 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0 });
- return ElementwiseTestHelper<4,
- armnn::EqualQueueDescriptor,
- armnn::DataType::QuantisedAsymm8,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Equal),
shape0,
input0,
shape1,
diff --git a/src/backends/backendsCommon/test/layerTests/GreaterTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/GreaterTestImpl.cpp
index 0148216285..271bc235a9 100644
--- a/src/backends/backendsCommon/test/layerTests/GreaterTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/GreaterTestImpl.cpp
@@ -4,18 +4,10 @@
//
#include "GreaterTestImpl.hpp"
-#include "ElementwiseTestImpl.hpp"
-#include <Half.hpp>
+#include "ComparisonTestImpl.hpp"
-template<>
-std::unique_ptr<armnn::IWorkload> CreateWorkload<armnn::GreaterQueueDescriptor>(
- const armnn::IWorkloadFactory& workloadFactory,
- const armnn::WorkloadInfo& info,
- const armnn::GreaterQueueDescriptor& descriptor)
-{
- return workloadFactory.CreateGreater(descriptor, info);
-}
+#include <Half.hpp>
LayerTestResult<uint8_t, 4> GreaterSimpleTest(armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
@@ -45,12 +37,10 @@ LayerTestResult<uint8_t, 4> GreaterSimpleTest(armnn::IWorkloadFactory& workloadF
0, 0, 0, 0, 0, 0, 0, 0
};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::Float32,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float32>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape,
input0,
shape,
@@ -71,12 +61,10 @@ LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
std::vector<uint8_t> output = { 0, 1, 1, 1, 1, 1, 1, 1};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::Float32,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float32>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape0,
input0,
shape1,
@@ -106,12 +94,10 @@ LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
1, 1, 1, 1, 1, 1
};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::Float32,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float32>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape0,
input0,
shape1,
@@ -151,12 +137,10 @@ LayerTestResult<uint8_t, 4> GreaterFloat16Test(
0, 0, 0, 0, 0, 0, 0, 0
};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::Float16,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4,armnn::DataType::Float16>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape,
input0,
shape,
@@ -179,12 +163,10 @@ LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementFloat16Test(
std::vector<uint8_t> output = { 0, 1, 1, 1, 1, 1, 1, 1};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::Float16,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float16>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape0,
input0,
shape1,
@@ -198,7 +180,7 @@ LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorFloat16Test(
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 };
@@ -216,12 +198,10 @@ LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorFloat16Test(
1, 1, 1, 1, 1, 1
};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::Float16,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::Float16>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape0,
input0,
shape1,
@@ -255,12 +235,10 @@ LayerTestResult<uint8_t, 4> GreaterUint8Test(
1, 1, 1, 1, 0, 0, 0, 0
};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::QuantisedAsymm8,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape,
input0,
shape,
@@ -290,12 +268,10 @@ LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1, 1, 1, 1, 1, 1
};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::QuantisedAsymm8,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape0,
input0,
shape1,
@@ -325,12 +301,10 @@ LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1, 1, 1, 1, 1, 1
};
- return ElementwiseTestHelper<4,
- armnn::GreaterQueueDescriptor,
- armnn::DataType::QuantisedAsymm8,
- armnn::DataType::Boolean>(
+ return ComparisonTestImpl<4, armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
+ armnn::ComparisonDescriptor(armnn::ComparisonOperation::Greater),
shape0,
input0,
shape1,