diff options
Diffstat (limited to 'delegate/src/test/SliceTest.cpp')
-rw-r--r-- | delegate/src/test/SliceTest.cpp | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/delegate/src/test/SliceTest.cpp b/delegate/src/test/SliceTest.cpp new file mode 100644 index 0000000000..bd0584936e --- /dev/null +++ b/delegate/src/test/SliceTest.cpp @@ -0,0 +1,243 @@ +// +// Copyright © 2021 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "SliceTestHelper.hpp" + +#include <armnn_delegate.hpp> + +#include <flatbuffers/flatbuffers.h> +#include <tensorflow/lite/schema/schema_generated.h> + +#include <doctest/doctest.h> + +namespace armnnDelegate +{ + +void StridedSlice4DTest(std::vector<armnn::BackendId>& backends) +{ + std::vector<int32_t> inputShape { 3, 2, 3, 1 }; + std::vector<int32_t> outputShape { 1, 2, 3, 1 }; + std::vector<int32_t> beginShape { 4 }; + std::vector<int32_t> endShape { 4 }; + std::vector<int32_t> strideShape { 4 }; + + std::vector<int32_t> beginData { 1, 0, 0, 0 }; + std::vector<int32_t> endData { 2, 2, 3, 1 }; + std::vector<int32_t> strideData { 1, 1, 1, 1 }; + std::vector<float> inputData { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, + 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f, + 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }; + std::vector<float> outputData { 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f }; + + StridedSliceTestImpl<float>( + backends, + inputData, + outputData, + beginData, + endData, + strideData, + inputShape, + beginShape, + endShape, + strideShape, + outputShape + ); +} + +void StridedSlice4DReverseTest(std::vector<armnn::BackendId>& backends) +{ + std::vector<int32_t> inputShape { 3, 2, 3, 1 }; + std::vector<int32_t> outputShape { 1, 2, 3, 1 }; + std::vector<int32_t> beginShape { 4 }; + std::vector<int32_t> endShape { 4 }; + std::vector<int32_t> strideShape { 4 }; + + std::vector<int32_t> beginData { 1, -1, 0, 0 }; + std::vector<int32_t> endData { 2, -3, 3, 1 }; + std::vector<int32_t> strideData { 1, -1, 1, 1 }; + std::vector<float> inputData { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, + 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f, + 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }; + std::vector<float> outputData { 4.0f, 4.0f, 4.0f, 3.0f, 3.0f, 3.0f }; + + StridedSliceTestImpl<float>( + backends, + inputData, + outputData, + beginData, + endData, + strideData, + inputShape, + beginShape, + endShape, + strideShape, + outputShape + ); +} + +void StridedSliceSimpleStrideTest(std::vector<armnn::BackendId>& backends) +{ + std::vector<int32_t> inputShape { 3, 2, 3, 1 }; + std::vector<int32_t> outputShape { 2, 1, 2, 1 }; + std::vector<int32_t> beginShape { 4 }; + std::vector<int32_t> endShape { 4 }; + std::vector<int32_t> strideShape { 4 }; + + std::vector<int32_t> beginData { 0, 0, 0, 0 }; + std::vector<int32_t> endData { 3, 2, 3, 1 }; + std::vector<int32_t> strideData { 2, 2, 2, 1 }; + std::vector<float> inputData { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, + 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f, + 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }; + std::vector<float> outputData { 1.0f, 1.0f, + 5.0f, 5.0f }; + + StridedSliceTestImpl<float>( + backends, + inputData, + outputData, + beginData, + endData, + strideData, + inputShape, + beginShape, + endShape, + strideShape, + outputShape + ); +} + +void StridedSliceSimpleRangeMaskTest(std::vector<armnn::BackendId>& backends) +{ + std::vector<int32_t> inputShape { 3, 2, 3, 1 }; + std::vector<int32_t> outputShape { 3, 2, 3, 1 }; + std::vector<int32_t> beginShape { 4 }; + std::vector<int32_t> endShape { 4 }; + std::vector<int32_t> strideShape { 4 }; + + std::vector<int32_t> beginData { 1, 1, 1, 1 }; + std::vector<int32_t> endData { 1, 1, 1, 1 }; + std::vector<int32_t> strideData { 1, 1, 1, 1 }; + + int beginMask = -1; + int endMask = -1; + + std::vector<float> inputData { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, + 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f, + 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }; + std::vector<float> outputData { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f, + 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f, + 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }; + + StridedSliceTestImpl<float>( + backends, + inputData, + outputData, + beginData, + endData, + strideData, + inputShape, + beginShape, + endShape, + strideShape, + outputShape, + beginMask, + endMask + ); +} + + +TEST_SUITE("StridedSlice_CpuRefTests") +{ + +TEST_CASE ("StridedSlice_4D_CpuRef_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::CpuRef}; + StridedSlice4DTest(backends); +} + +TEST_CASE ("StridedSlice_4D_Reverse_CpuRef_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::CpuRef}; + StridedSlice4DReverseTest(backends); +} + +TEST_CASE ("StridedSlice_SimpleStride_CpuRef_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::CpuRef}; + StridedSliceSimpleStrideTest(backends); +} + +TEST_CASE ("StridedSlice_SimpleRange_CpuRef_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::CpuRef}; + StridedSliceSimpleRangeMaskTest(backends); +} + +} // StridedSlice_CpuRefTests TestSuite + + + +TEST_SUITE("StridedSlice_CpuAccTests") +{ + +TEST_CASE ("StridedSlice_4D_CpuAcc_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::CpuAcc}; + StridedSlice4DTest(backends); +} + +TEST_CASE ("StridedSlice_4D_Reverse_CpuAcc_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::CpuAcc}; + StridedSlice4DReverseTest(backends); +} + +TEST_CASE ("StridedSlice_SimpleStride_CpuAcc_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::CpuAcc}; + StridedSliceSimpleStrideTest(backends); +} + +TEST_CASE ("StridedSlice_SimpleRange_CpuAcc_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::CpuAcc}; + StridedSliceSimpleRangeMaskTest(backends); +} + +} // StridedSlice_CpuAccTests TestSuite + + + +TEST_SUITE("StridedSlice_GpuAccTests") +{ + +TEST_CASE ("StridedSlice_4D_GpuAcc_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::GpuAcc}; + StridedSlice4DTest(backends); +} + +TEST_CASE ("StridedSlice_4D_Reverse_GpuAcc_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::GpuAcc}; + StridedSlice4DReverseTest(backends); +} + +TEST_CASE ("StridedSlice_SimpleStride_GpuAcc_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::GpuAcc}; + StridedSliceSimpleStrideTest(backends); +} + +TEST_CASE ("StridedSlice_SimpleRange_GpuAcc_Test") +{ + std::vector<armnn::BackendId> backends = {armnn::Compute::GpuAcc}; + StridedSliceSimpleRangeMaskTest(backends); +} + +} // StridedSlice_GpuAccTests TestSuite + +} // namespace armnnDelegate
\ No newline at end of file |