blob: c8272f47f0f05aa34c83242e7fefdd76ba540e6c [file] [log] [blame]
//
// Copyright © 2019 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "ComparisonTestImpl.hpp"
#include <armnn/ArmNN.hpp>
#include <Half.hpp>
#include <QuantizeHelper.hpp>
#include <ResolveType.hpp>
#include <backendsCommon/Workload.hpp>
#include <backendsCommon/WorkloadData.hpp>
#include <backendsCommon/test/TensorCopyUtils.hpp>
#include <backendsCommon/test/WorkloadTestUtils.hpp>
#include <test/TensorHelpers.hpp>
#include <boost/assert.hpp>
namespace
{
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 armnn::TensorShape& shape0,
std::vector<InType> values0,
float quantScale0,
int quantOffset0,
const armnn::TensorShape& shape1,
std::vector<InType> values1,
float quantScale1,
int quantOffset1,
const armnn::TensorShape& outShape,
std::vector<uint8_t> outValues,
float outQuantScale,
int outQuantOffset)
{
boost::ignore_unused(memoryManager);
BOOST_ASSERT(shape0.GetNumDimensions() == NumDims);
armnn::TensorInfo inputTensorInfo0(shape0, ArmnnInType, quantScale0, quantOffset0);
BOOST_ASSERT(shape1.GetNumDimensions() == NumDims);
armnn::TensorInfo inputTensorInfo1(shape1, ArmnnInType, quantScale1, quantOffset1);
BOOST_ASSERT(outShape.GetNumDimensions() == NumDims);
armnn::TensorInfo outputTensorInfo(outShape, armnn::DataType::Boolean, outQuantScale, outQuantOffset);
auto input0 = MakeTensor<InType, NumDims>(inputTensorInfo0, values0);
auto input1 = MakeTensor<InType, NumDims>(inputTensorInfo1, values1);
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 armnn::TensorShape& shape0,
std::vector<InType> values0,
const armnn::TensorShape& shape1,
std::vector<InType> values1,
const armnn::TensorShape outShape,
std::vector<uint8_t> outValues,
float quantScale = 1.f,
int quantOffset = 0)
{
return ComparisonTestImpl<NumDims, ArmnnInType>(
workloadFactory,
memoryManager,
descriptor,
shape0,
values0,
quantScale,
quantOffset,
shape1,
values1,
quantScale,
quantOffset,
outShape,
outValues,
quantScale,
quantOffset);
}
template<typename TestData>
std::vector<uint8_t> 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<armnn::DataType ArmnnInType, typename TestData>
LayerTestResult<uint8_t, 4> ComparisonTestImpl(armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
const TestData& testData,
armnn::ComparisonOperation operation,
float quantScale = 1.f,
int quantOffset = 0)
{
using T = armnn::ResolveType<ArmnnInType>;
std::vector<T> inputData0 = armnnUtils::QuantizedVector<T>(testData.m_InputData0, quantScale, quantOffset);
std::vector<T> inputData1 = armnnUtils::QuantizedVector<T>(testData.m_InputData1, quantScale, quantOffset);
return ComparisonTestImpl<4, ArmnnInType>(
workloadFactory,
memoryManager,
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<float> m_InputData0;
std::vector<float> m_InputData1;
std::vector<uint8_t> m_OutputEqual;
std::vector<uint8_t> m_OutputGreater;
std::vector<uint8_t> m_OutputGreaterOrEqual;
std::vector<uint8_t> m_OutputLess;
std::vector<uint8_t> m_OutputLessOrEqual;
std::vector<uint8_t> 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<uint8_t, 4> EqualSimpleTest(armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Equal);
}
LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Equal);
}
LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Equal);
}
LayerTestResult<uint8_t, 4> EqualSimpleFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Equal);
}
LayerTestResult<uint8_t, 4> EqualBroadcast1ElementFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Equal);
}
LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Equal);
}
LayerTestResult<uint8_t, 4> EqualSimpleUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Equal);
}
LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Equal);
}
LayerTestResult<uint8_t, 4> EqualBroadcast1dVectorUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Equal);
}
// Greater
LayerTestResult<uint8_t, 4> GreaterSimpleTest(armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Greater);
}
LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Greater);
}
LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Greater);
}
LayerTestResult<uint8_t, 4> GreaterSimpleFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Greater);
}
LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Greater);
}
LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Greater);
}
LayerTestResult<uint8_t, 4> GreaterSimpleUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Greater);
}
LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Greater);
}
LayerTestResult<uint8_t, 4> GreaterBroadcast1dVectorUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Greater);
}
// GreaterOrEqual
LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
LayerTestResult<uint8_t, 4> GreaterOrEqualSimpleUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1ElementUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
LayerTestResult<uint8_t, 4> GreaterOrEqualBroadcast1dVectorUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::GreaterOrEqual);
}
// Less
LayerTestResult<uint8_t, 4> LessSimpleTest(armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Less);
}
LayerTestResult<uint8_t, 4> LessBroadcast1ElementTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Less);
}
LayerTestResult<uint8_t, 4> LessBroadcast1dVectorTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Less);
}
LayerTestResult<uint8_t, 4> LessSimpleFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Less);
}
LayerTestResult<uint8_t, 4> LessBroadcast1ElementFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Less);
}
LayerTestResult<uint8_t, 4> LessBroadcast1dVectorFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Less);
}
LayerTestResult<uint8_t, 4> LessSimpleUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::Less);
}
LayerTestResult<uint8_t, 4> LessBroadcast1ElementUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::Less);
}
LayerTestResult<uint8_t, 4> LessBroadcast1dVectorUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::Less);
}
// LessOrEqual
LayerTestResult<uint8_t, 4> LessOrEqualSimpleTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::LessOrEqual);
}
LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::LessOrEqual);
}
LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::LessOrEqual);
}
LayerTestResult<uint8_t, 4> LessOrEqualSimpleFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::LessOrEqual);
}
LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::LessOrEqual);
}
LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::LessOrEqual);
}
LayerTestResult<uint8_t, 4> LessOrEqualSimpleUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::LessOrEqual);
}
LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1ElementUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::LessOrEqual);
}
LayerTestResult<uint8_t, 4> LessOrEqualBroadcast1dVectorUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::LessOrEqual);
}
// NotEqual
LayerTestResult<uint8_t, 4> NotEqualSimpleTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::NotEqual);
}
LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::NotEqual);
}
LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float32>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::NotEqual);
}
LayerTestResult<uint8_t, 4> NotEqualSimpleFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::NotEqual);
}
LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::NotEqual);
}
LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorFloat16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::Float16>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::NotEqual);
}
LayerTestResult<uint8_t, 4> NotEqualSimpleUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_SimpleTestData,
armnn::ComparisonOperation::NotEqual);
}
LayerTestResult<uint8_t, 4> NotEqualBroadcast1ElementUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1ElementTestData,
armnn::ComparisonOperation::NotEqual);
}
LayerTestResult<uint8_t, 4> NotEqualBroadcast1dVectorUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
{
return ComparisonTestImpl<armnn::DataType::QuantisedAsymm8>(
workloadFactory,
memoryManager,
s_Broadcast1dVectorTestData,
armnn::ComparisonOperation::NotEqual);
}