// // Copyright © 2024 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "ScatterNdTestHelper.hpp" #include namespace armnnDelegate { template void ScatterNd1DimTest(tflite::TensorType tensorType, const std::vector& backends = {}) { // Set shapes std::vector indicesShape = { 3, 1 }; std::vector updatesShape = { 3 }; std::vector shapeShape = { 1 }; std::vector expectedOutputShape = { 5 }; // Set Values std::vector indicesValues = { 0, 1, 2 }; std::vector updatesValues = { 1, 2, 3 }; std::vector shapeValue = { 5 }; std::vector expectedOutputValues = { 1, 2, 3, 0, 0 }; ScatterNdTestImpl(tensorType, indicesShape, indicesValues, updatesShape, updatesValues, shapeShape, shapeValue, expectedOutputShape, expectedOutputValues, backends); } template void ScatterNd2DimTest(tflite::TensorType tensorType, const std::vector& backends = {}) { // Set shapes std::vector indicesShape = { 3, 2 }; std::vector updatesShape = { 3 }; std::vector shapeShape = { 2 }; std::vector expectedOutputShape = { 3, 3 }; // Set Values std::vector indicesValues = { 0, 0, 1, 1, 2, 2 }; std::vector updatesValues = { 1, 2, 3 }; std::vector shapeValue = { 3, 3 }; std::vector expectedOutputValues = { 1, 0, 0, 0, 2, 0, 0, 0, 3 }; ScatterNdTestImpl(tensorType, indicesShape, indicesValues, updatesShape, updatesValues, shapeShape, shapeValue, expectedOutputShape, expectedOutputValues, backends); } template void ScatterNd2Dim1Outter1InnerTest(tflite::TensorType tensorType, const std::vector& backends = {}) { // Set shapes std::vector indicesShape = { 2, 1 }; std::vector updatesShape = { 2, 3 }; std::vector shapeShape = { 2 }; std::vector expectedOutputShape = { 3, 3 }; // Set Values std::vector indicesValues = { 0, 1 }; std::vector updatesValues = { 1, 1, 1, 1, 1, 1 }; std::vector shapeValue = { 3, 3 }; std::vector expectedOutputValues = { 1, 1, 1, 1, 1, 1, 0, 0, 0 }; ScatterNdTestImpl(tensorType, indicesShape, indicesValues, updatesShape, updatesValues, shapeShape, shapeValue, expectedOutputShape, expectedOutputValues, backends); } template void ScatterNd3DimTest(tflite::TensorType tensorType, const std::vector& backends = {}) { // Set shapes std::vector indicesShape = { 3, 3 }; std::vector updatesShape = { 3 }; std::vector shapeShape = { 3 }; std::vector expectedOutputShape = { 3, 3, 3 }; // Set Values std::vector indicesValues = { 0, 0, 0, 1, 1, 1, 2, 2, 2 }; std::vector updatesValues = { 1, 2, 3 }; std::vector shapeValue = { 3, 3, 3 }; std::vector expectedOutputValues = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 }; ScatterNdTestImpl(tensorType, indicesShape, indicesValues, updatesShape, updatesValues, shapeShape, shapeValue, expectedOutputShape, expectedOutputValues, backends); } template void ScatterNd3Dim1Outter2InnerTest(tflite::TensorType tensorType, const std::vector& backends = {}) { // Set shapes std::vector indicesShape = { 2, 1 }; std::vector updatesShape = { 2, 3, 3 }; std::vector shapeShape = { 3 }; std::vector expectedOutputShape = { 3, 3, 3 }; // Set Values std::vector indicesValues = { 0, 1 }; std::vector updatesValues = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2 }; std::vector shapeValue = { 3, 3, 3 }; std::vector expectedOutputValues = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; ScatterNdTestImpl(tensorType, indicesShape, indicesValues, updatesShape, updatesValues, shapeShape, shapeValue, expectedOutputShape, expectedOutputValues, backends); } template void ScatterNd3Dim2Outter1InnerTest(tflite::TensorType tensorType, const std::vector& backends = {}) { // Set shapes std::vector indicesShape = { 2, 2 }; std::vector updatesShape = { 2, 3 }; std::vector shapeShape = { 3 }; std::vector expectedOutputShape = { 3, 3, 3 }; // Set Values std::vector indicesValues = { 0, 0, 1, 1 }; std::vector updatesValues = { 1, 1, 1, 2, 2, 2 }; std::vector shapeValue = { 3, 3, 3 }; std::vector expectedOutputValues = { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; ScatterNdTestImpl(tensorType, indicesShape, indicesValues, updatesShape, updatesValues, shapeShape, shapeValue, expectedOutputShape, expectedOutputValues, backends); } template void ScatterNdDim4(tflite::TensorType tensorType, const std::vector& backends = {}) { // Set shapes std::vector indicesShape = { 3, 4 }; std::vector updatesShape = { 3 }; std::vector shapeShape = { 4 }; std::vector expectedOutputShape = { 2, 3, 3, 3 }; // Set Values std::vector indicesValues = { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 }; std::vector updatesValues = { 1, 2, 3 }; std::vector shapeValue = { 2, 3, 3, 3 }; std::vector expectedOutputValues = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; ScatterNdTestImpl(tensorType, indicesShape, indicesValues, updatesShape, updatesValues, shapeShape, shapeValue, expectedOutputShape, expectedOutputValues, backends); } TEST_SUITE("ScatterNdDelegateTests") { TEST_CASE ("ScatterNd_1Dim_FP32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd1DimTest(tflite::TensorType_FLOAT32, backends); } TEST_CASE ("ScatterNd_1Dim_INT32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd1DimTest(tflite::TensorType_INT32, backends); } TEST_CASE ("ScatterNd_1Dim_INT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd1DimTest(tflite::TensorType_INT8, backends); } TEST_CASE ("ScatterNd_1Dim_UINT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd1DimTest(tflite::TensorType_UINT8, backends); } TEST_CASE ("ScatterNd_2Dim_FP32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd2DimTest(tflite::TensorType_FLOAT32, backends); } TEST_CASE ("ScatterNd_2Dim_INT32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd2DimTest(tflite::TensorType_INT32, backends); } TEST_CASE ("ScatterNd_2Dim_INT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd2DimTest(tflite::TensorType_INT8, backends); } TEST_CASE ("ScatterNd_2Dim_UINT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd2DimTest(tflite::TensorType_UINT8, backends); } TEST_CASE ("ScatterNd_2Dim_1Outter_1Inner_FP32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd2Dim1Outter1InnerTest(tflite::TensorType_FLOAT32, backends); } TEST_CASE ("ScatterNd_2Dim_1Outter_1Inner_INT32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd2Dim1Outter1InnerTest(tflite::TensorType_INT32, backends); } TEST_CASE ("ScatterNd_2Dim_1Outter_1Inner_INT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd2Dim1Outter1InnerTest(tflite::TensorType_INT8, backends); } TEST_CASE ("ScatterNd_2Dim_1Outter_1Inner_UINT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd2Dim1Outter1InnerTest(tflite::TensorType_UINT8, backends); } TEST_CASE ("ScatterNd_3Dim_FP32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3DimTest(tflite::TensorType_FLOAT32, backends); } TEST_CASE ("ScatterNd_3Dim_INT32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3DimTest(tflite::TensorType_INT32, backends); } TEST_CASE ("ScatterNd_3Dim_INT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3DimTest(tflite::TensorType_INT8, backends); } TEST_CASE ("ScatterNd_3Dim_UINT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3DimTest(tflite::TensorType_UINT8, backends); } TEST_CASE ("ScatterNd_3Dim_1Outter_2Inner_FP32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3Dim1Outter2InnerTest(tflite::TensorType_FLOAT32, backends); } TEST_CASE ("ScatterNd_3Dim_1Outter_2Inner_INT32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3Dim1Outter2InnerTest(tflite::TensorType_INT32, backends); } TEST_CASE ("ScatterNd_3Dim_1Outter_2Inner_INT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3Dim1Outter2InnerTest(tflite::TensorType_INT8, backends); } TEST_CASE ("ScatterNd_3Dim_1Outter_2Inner_UINT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3Dim1Outter2InnerTest(tflite::TensorType_UINT8, backends); } TEST_CASE ("ScatterNd_3Dim_2Outter_1Inner_FP32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3Dim2Outter1InnerTest(tflite::TensorType_FLOAT32, backends); } TEST_CASE ("ScatterNd_3Dim_2Outter_1Inner_INT32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3Dim2Outter1InnerTest(tflite::TensorType_INT32, backends); } TEST_CASE ("ScatterNd_3Dim_2Outter_1Inner_INT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3Dim2Outter1InnerTest(tflite::TensorType_INT8, backends); } TEST_CASE ("ScatterNd_3Dim_2Outter_1Inner_UINT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNd3Dim2Outter1InnerTest(tflite::TensorType_UINT8, backends); } TEST_CASE ("ScatterNd_4Dim_FP32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNdDim4(tflite::TensorType_FLOAT32, backends); } TEST_CASE ("ScatterNd_4Dim_INT32_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNdDim4(tflite::TensorType_INT32, backends); } TEST_CASE ("ScatterNd_4Dim_INT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNdDim4(tflite::TensorType_INT8, backends); } TEST_CASE ("ScatterNd_4Dim_UINT8_Test") { std::vector backends = { armnn::Compute::CpuRef }; ScatterNdDim4(tflite::TensorType_UINT8, backends); } } // TEST_SUITE("ScatterNdDelegateTests") } // namespace armnnDelegate