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/PadTestImpl.cpp77
-rw-r--r--src/backends/backendsCommon/test/layerTests/PadTestImpl.hpp16
-rw-r--r--src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.cpp865
-rw-r--r--src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.hpp137
4 files changed, 1091 insertions, 4 deletions
diff --git a/src/backends/backendsCommon/test/layerTests/PadTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/PadTestImpl.cpp
index 8b024e5a35..6ae540382a 100644
--- a/src/backends/backendsCommon/test/layerTests/PadTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/PadTestImpl.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017,2024 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -422,6 +422,73 @@ LayerTestResult<T, 4> Pad4dTestCommon(
}
template<armnn::DataType ArmnnType, typename T>
+LayerTestResult<T, 5> Pad5dTestCommon(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory,
+ float qScale,
+ int32_t qOffset,
+ const float customPaddingValue)
+{
+ IgnoreUnused(memoryManager);
+ const armnn::TensorShape inputShape{ 1, 1, 2, 1, 1 };
+ const armnn::TensorShape outputShape{ 2, 1, 4, 1, 2 };
+
+ const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
+ const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
+
+ std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
+ {
+ 3, 3
+ },
+ qScale, qOffset);
+
+ auto p = customPaddingValue;
+ std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
+ {p, p, 3, p, 3, p, p, p, p, p, p, p, p, p, p, p}
+ );
+
+ std::vector<T> actualOutput(outputTensorInfo.GetNumElements());
+
+ std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
+ std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
+
+ armnn::PadQueueDescriptor descriptor;
+
+ std::vector<std::pair<unsigned int, unsigned int>> PadList;
+ PadList.push_back(std::pair<unsigned int, unsigned int>(0,1));
+ PadList.push_back(std::pair<unsigned int, unsigned int>(0,0));
+ PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
+ PadList.push_back(std::pair<unsigned int, unsigned int>(0,0));
+ PadList.push_back(std::pair<unsigned int, unsigned int>(0,1));
+
+ descriptor.m_Parameters.m_PadList = PadList;
+ armnn::WorkloadInfo info;
+
+ AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
+ AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
+
+ std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateWorkload(armnn::LayerType::Pad,
+ descriptor,
+ info);
+
+ inputHandle->Allocate();
+ outputHandle->Allocate();
+
+ CopyDataToITensorHandle(inputHandle.get(), inputValues.data());
+
+ workload->PostAllocationConfigure();
+ workload->Execute();
+
+ CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
+
+ return LayerTestResult<T, 5>(actualOutput,
+ expectedOutputValues,
+ outputHandle->GetShape(),
+ outputTensorInfo.GetShape());
+}
+
+template<armnn::DataType ArmnnType, typename T>
LayerTestResult<T, 2> PadQAsymmTestCommon(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
@@ -613,6 +680,14 @@ LayerTestResult<float, 4> PadFloat324dTest(
return Pad4dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0);
}
+LayerTestResult<float, 5> PadFloat325dTest(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return Pad5dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0);
+}
+
LayerTestResult<armnn::BFloat16, 2> PadBFloat162dTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
diff --git a/src/backends/backendsCommon/test/layerTests/PadTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/PadTestImpl.hpp
index b62fc78ba3..c25ac5ce8e 100644
--- a/src/backends/backendsCommon/test/layerTests/PadTestImpl.hpp
+++ b/src/backends/backendsCommon/test/layerTests/PadTestImpl.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2017 Arm Ltd. All rights reserved.
+// Copyright © 2017,2024 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -40,6 +40,15 @@ LayerTestResult<T, 4> Pad4dTestCommon(
int32_t qOffset);
template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 5> Pad5dTestCommon(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory,
+ float qScale,
+ int32_t qOffset,
+ const float customPaddingValue = 0.0f);
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
LayerTestResult<T, 2> PadQAsymmTestCommon(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
@@ -88,6 +97,11 @@ LayerTestResult<float, 4> PadFloat324dTest(
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
const armnn::ITensorHandleFactory& tensorHandleFactory);
+LayerTestResult<float, 5> PadFloat325dTest(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
LayerTestResult<armnn::BFloat16, 2> PadBFloat162dTest(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
diff --git a/src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.cpp
index 10edd85a5b..97df42559e 100644
--- a/src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017, 2024 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -860,6 +860,599 @@ LayerTestResult<T, 2> StridedSlice2dReverseTest(
inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
}
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask1Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 1, 2, 4};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {2, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 1;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask2Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {2, 1, 2, 4};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {2, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 2;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask4Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {2, 1, 1, 4};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {2, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 4;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 3> StridedSlice3dEllipsisMask1Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {2, 1, 2};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_EllipsisMask = 1;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 2.0f, 3.0f,
+
+ 20.0f, 30.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 3>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 3> StridedSlice3dEllipsisMask2Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 3, 2};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_EllipsisMask = 2;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 2.0f, 3.0f, 6.0f, 7.0f, 10.0f, 11.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 3>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 3> StridedSlice3dEllipsisMask4Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 1, 4};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_EllipsisMask = 4;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 3>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 3> StridedSlice3dNewAxisMask1EllipsisMask1Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {2, 1, 2};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 1;
+ desc.m_Parameters.m_EllipsisMask = 1;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 2.0f, 3.0f,
+
+ 20.0f, 30.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 3>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask1EllipsisMask2Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 2, 3, 2};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 1;
+ desc.m_Parameters.m_EllipsisMask = 2;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 2.0f, 3.0f, 6.0f, 7.0f, 10.0f, 11.0f,
+
+ 20.0f, 30.0f, 60.0f, 70.0f, 100.0f, 110.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask1EllipsisMask4Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 1, 3, 4};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 1;
+ desc.m_Parameters.m_EllipsisMask = 4;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask2EllipsisMask1Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {2, 3, 1, 2};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 2;
+ desc.m_Parameters.m_EllipsisMask = 1;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 2.0f, 3.0f, 6.0f, 7.0f, 10.0f, 11.0f,
+
+ 20.0f, 30.0f, 60.0f, 70.0f, 100.0f, 110.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 3> StridedSlice3dNewAxisMask2EllipsisMask2Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 3, 2};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 2;
+ desc.m_Parameters.m_EllipsisMask = 2;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 2.0f, 3.0f, 6.0f, 7.0f, 10.0f, 11.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 3>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask2EllipsisMask4Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 1, 3, 4};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 2;
+ desc.m_Parameters.m_EllipsisMask = 4;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask4EllipsisMask1Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {2, 3, 1, 1};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 4;
+ desc.m_Parameters.m_EllipsisMask = 1;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 1.0f, 5.0f, 9.0f,
+
+ 10.0f, 50.0f, 90.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 4> StridedSlice3dNewAxisMask4EllipsisMask2Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 3, 4, 1};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 4;
+ desc.m_Parameters.m_EllipsisMask = 2;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 4>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+LayerTestResult<T, 3> StridedSlice3dNewAxisMask4EllipsisMask4Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ armnn::TensorInfo inputTensorInfo;
+ armnn::TensorInfo outputTensorInfo;
+
+ unsigned int inputShape[] = {2, 3, 4};
+ unsigned int outputShape[] = {1, 1, 4};
+
+ armnn::StridedSliceQueueDescriptor desc;
+ desc.m_Parameters.m_Begin = {0, 0, 1};
+ desc.m_Parameters.m_End = {1, 1, 3};
+ desc.m_Parameters.m_Stride = {1, 1, 1};
+ desc.m_Parameters.m_NewAxisMask = 4;
+ desc.m_Parameters.m_EllipsisMask = 4;
+
+ inputTensorInfo = armnn::TensorInfo(3, inputShape, ArmnnType);
+ outputTensorInfo = armnn::TensorInfo(3, outputShape, ArmnnType);
+
+ std::vector<float> input = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
+
+ 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.0f, 110.0f, 120.0f
+ });
+
+ std::vector<float> outputExpected = std::vector<float>(
+ {
+ 1.0f, 2.0f, 3.0f, 4.0f
+ });
+
+ return StridedSliceTestImpl<T, 3, 3>(
+ workloadFactory, memoryManager, tensorHandleFactory,
+ inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
+}
+
} // anonymous namespace
LayerTestResult<float, 4> StridedSlice4dFloat32Test(
@@ -1052,6 +1645,156 @@ LayerTestResult<float, 2> StridedSlice2dReverseFloat32Test(
tensorHandleFactory);
}
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask1Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask2Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask4Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 3> StridedSlice3dEllipsisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask1Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 3> StridedSlice3dEllipsisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask2Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 3> StridedSlice3dEllipsisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask4Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 3> StridedSlice3dNewAxisMask1EllipsisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask1EllipsisMask1Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask1EllipsisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask1EllipsisMask2Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask1EllipsisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask1EllipsisMask4Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask2EllipsisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask2EllipsisMask1Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 3> StridedSlice3dNewAxisMask2EllipsisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask2EllipsisMask2Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask2EllipsisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask2EllipsisMask4Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask4EllipsisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask4EllipsisMask1Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask4EllipsisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask4EllipsisMask2Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<float, 3> StridedSlice3dNewAxisMask4EllipsisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask4EllipsisMask4Test<armnn::DataType::Float32>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
LayerTestResult<uint8_t, 4> StridedSlice4dUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
@@ -1224,6 +1967,66 @@ LayerTestResult<uint8_t, 2> StridedSlice2dReverseUint8Test(
return StridedSlice2dReverseTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, tensorHandleFactory);
}
+LayerTestResult<uint8_t, 4> StridedSlice3dNewAxisMask1Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask1Test<armnn::DataType::QAsymmU8>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<uint8_t, 4> StridedSlice3dNewAxisMask2Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask2Test<armnn::DataType::QAsymmU8>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<uint8_t, 4> StridedSlice3dNewAxisMask4Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask4Test<armnn::DataType::QAsymmU8>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<uint8_t, 3> StridedSlice3dEllipsisMask1Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask1Test<armnn::DataType::QAsymmU8>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<uint8_t, 3> StridedSlice3dEllipsisMask2Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask2Test<armnn::DataType::QAsymmU8>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<uint8_t, 3> StridedSlice3dEllipsisMask4Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask4Test<armnn::DataType::QAsymmU8>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
LayerTestResult<int16_t, 4> StridedSlice4dInt16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
@@ -1301,3 +2104,63 @@ LayerTestResult<int16_t, 2> StridedSlice2dReverseInt16Test(
{
return StridedSlice2dReverseTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager, tensorHandleFactory);
}
+
+LayerTestResult<int16_t, 4> StridedSlice3dNewAxisMask1Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask1Test<armnn::DataType::QSymmS16>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<int16_t, 4> StridedSlice3dNewAxisMask2Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask2Test<armnn::DataType::QSymmS16>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<int16_t, 4> StridedSlice3dNewAxisMask4Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dNewAxisMask4Test<armnn::DataType::QSymmS16>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<int16_t, 3> StridedSlice3dEllipsisMask1Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask1Test<armnn::DataType::QSymmS16>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<int16_t, 3> StridedSlice3dEllipsisMask2Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask2Test<armnn::DataType::QSymmS16>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
+
+LayerTestResult<int16_t, 3> StridedSlice3dEllipsisMask4Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory)
+{
+ return StridedSlice3dEllipsisMask4Test<armnn::DataType::QSymmS16>(workloadFactory,
+ memoryManager,
+ tensorHandleFactory);
+}
diff --git a/src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.hpp
index e53f439da5..13a2288f77 100644
--- a/src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.hpp
+++ b/src/backends/backendsCommon/test/layerTests/StridedSliceTestImpl.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017, 2024 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -105,6 +105,81 @@ LayerTestResult<float, 2> StridedSlice2dReverseFloat32Test(
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
const armnn::ITensorHandleFactory& tensorHandleFactory);
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 3> StridedSlice3dEllipsisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 3> StridedSlice3dEllipsisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 3> StridedSlice3dEllipsisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 3> StridedSlice3dNewAxisMask1EllipsisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask1EllipsisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask1EllipsisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask2EllipsisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 3> StridedSlice3dNewAxisMask2EllipsisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask2EllipsisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask4EllipsisMask1Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 4> StridedSlice3dNewAxisMask4EllipsisMask2Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<float, 3> StridedSlice3dNewAxisMask4EllipsisMask4Float32Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
LayerTestResult<uint8_t, 4> StridedSlice4dUint8Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
@@ -195,6 +270,36 @@ LayerTestResult<uint8_t, 2> StridedSlice2dReverseUint8Test(
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
const armnn::ITensorHandleFactory& tensorHandleFactory);
+LayerTestResult<uint8_t, 4> StridedSlice3dNewAxisMask1Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<uint8_t, 4> StridedSlice3dNewAxisMask2Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<uint8_t, 4> StridedSlice3dNewAxisMask4Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<uint8_t, 3> StridedSlice3dEllipsisMask1Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<uint8_t, 3> StridedSlice3dEllipsisMask2Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<uint8_t, 3> StridedSlice3dEllipsisMask4Uint8Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
LayerTestResult<int16_t, 4> StridedSlice4dInt16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
@@ -239,3 +344,33 @@ LayerTestResult<int16_t, 2> StridedSlice2dReverseInt16Test(
armnn::IWorkloadFactory& workloadFactory,
const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<int16_t, 4> StridedSlice3dNewAxisMask1Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<int16_t, 4> StridedSlice3dNewAxisMask2Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<int16_t, 4> StridedSlice3dNewAxisMask4Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<int16_t, 3> StridedSlice3dEllipsisMask1Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<int16_t, 3> StridedSlice3dEllipsisMask2Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);
+
+LayerTestResult<int16_t, 3> StridedSlice3dEllipsisMask4Int16Test(
+ armnn::IWorkloadFactory& workloadFactory,
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+ const armnn::ITensorHandleFactory& tensorHandleFactory);