IVGCVSW-5128 Add EndToEnd test for REDUCE_SUM

* Call Reshape EndToEnd test from 3 backends
* Tidy up some naming of tests.



Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com>
Change-Id: I5546af35e89d352d3f1529368518aecc0a4a534b
diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt
index d251bd2..509157a 100644
--- a/src/backends/backendsCommon/test/CMakeLists.txt
+++ b/src/backends/backendsCommon/test/CMakeLists.txt
@@ -1,5 +1,5 @@
 #
-# Copyright © 2017-2022 Arm Ltd and Contributors. All rights reserved.
+# Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
 # SPDX-License-Identifier: MIT
 #
 
@@ -50,6 +50,7 @@
     QuantizedLstmEndToEndTestImpl.cpp
     QuantizedLstmEndToEndTestImpl.hpp
     RankEndToEndTestImpl.hpp
+    ReduceEndToEndTestImpl.hpp
     ReshapeEndToEndTestImpl.hpp
     ResizeEndToEndTestImpl.hpp
     RuntimeTestImpl.hpp
diff --git a/src/backends/backendsCommon/test/ReduceEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/ReduceEndToEndTestImpl.hpp
new file mode 100644
index 0000000..83c59f5
--- /dev/null
+++ b/src/backends/backendsCommon/test/ReduceEndToEndTestImpl.hpp
@@ -0,0 +1,70 @@
+//
+// Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/INetwork.hpp>
+
+#include <CommonTestUtils.hpp>
+#include <ResolveType.hpp>
+
+#include <doctest/doctest.h>
+
+namespace
+{
+
+template<typename armnn::DataType DataType>
+armnn::INetworkPtr CreateReduceNetwork(const armnn::TensorShape& inputShape,
+                                        const armnn::TensorShape& outputShape,
+                                        const armnn::ReduceDescriptor& descriptor,
+                                        const float qScale = 1.0f,
+                                        const int32_t qOffset = 0)
+{
+    using namespace armnn;
+
+    INetworkPtr network(INetwork::Create());
+
+    TensorInfo inputTensorInfo(inputShape, DataType, qScale, qOffset, true);
+    TensorInfo outputTensorInfo(outputShape, DataType, qScale, qOffset);
+
+
+    IConnectableLayer* reduce = network->AddReduceLayer(descriptor, "reduce");
+    IConnectableLayer* input   = network->AddInputLayer(0, "input");
+    IConnectableLayer* output  = network->AddOutputLayer(0, "output");
+
+    Connect(input, reduce, inputTensorInfo, 0, 0);
+    Connect(reduce, output, outputTensorInfo, 0, 0);
+
+    return network;
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+void ReduceEndToEnd(const std::vector<armnn::BackendId>& backends)
+{
+    using namespace armnn;
+
+    const TensorShape& inputShape = { 1, 1, 1, 5 };
+    const TensorShape& outputShape = { 1, 1, 1 };
+
+    ReduceDescriptor descriptor;
+    descriptor.m_KeepDims = false;
+    descriptor.m_vAxis = { 3 };
+    descriptor.m_ReduceOperation = ReduceOperation::Sum;
+
+    INetworkPtr network = CreateReduceNetwork<ArmnnType>(inputShape, outputShape, descriptor);
+
+    CHECK(network);
+
+    std::vector<float> floatInputData({ 5.0f, 2.0f, 8.0f, 10.0f, 9.0f });
+    std::vector<float> floatOutputData({ 34.0f });
+
+    std::vector<T> inputData = armnnUtils::QuantizedVector<T>(floatInputData);
+    std::vector<T> outputData = armnnUtils::QuantizedVector<T>(floatOutputData);
+
+    std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } };
+    std::map<int, std::vector<T>> expectedOutputData = { { 0, outputData } };
+
+    EndToEndLayerTestImpl<ArmnnType, ArmnnType>(std::move(network), inputTensorData, expectedOutputData, backends);
+}
+} // anonymous namespace
diff --git a/src/backends/cl/test/ClEndToEndTests.cpp b/src/backends/cl/test/ClEndToEndTests.cpp
index b354481..d5ac8b1 100644
--- a/src/backends/cl/test/ClEndToEndTests.cpp
+++ b/src/backends/cl/test/ClEndToEndTests.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright © 2017,2022 Arm Ltd. All rights reserved.
+// Copyright © 2017-2023 Arm Ltd. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
@@ -18,6 +18,8 @@
 #include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
 #include <backendsCommon/test/QLstmEndToEndTestImpl.hpp>
 #include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
+#include <backendsCommon/test/ReduceEndToEndTestImpl.hpp>
+#include <backendsCommon/test/ReshapeEndToEndTestImpl.hpp>
 #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
 #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
 #include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
@@ -271,6 +273,29 @@
     PreluEndToEndPositiveTest<armnn::DataType::QAsymmU8>(clDefaultBackends);
 }
 
+// Reduce
+TEST_CASE("ClReduceEndToEndTest")
+{
+    ReduceEndToEnd<armnn::DataType::Float32>(clDefaultBackends);
+}
+
+TEST_CASE("ClReduceEndToEndTestFloat16")
+{
+    ReduceEndToEnd<armnn::DataType::Float16>(clDefaultBackends);
+}
+
+// Reshape
+TEST_CASE("ClReshapeEndToEndTest")
+{
+    ReshapeEndToEnd<armnn::DataType::Float32>(clDefaultBackends);
+}
+
+TEST_CASE("ClReshapeEndToEndTestFloat16")
+{
+    ReshapeEndToEndFloat16<armnn::DataType::Float16>(clDefaultBackends);
+}
+
+// Space to depth
 TEST_CASE("ClSpaceToDepthNhwcEndToEndTest1")
 {
     SpaceToDepthNhwcEndToEndTest1(clDefaultBackends);
@@ -291,6 +316,7 @@
     SpaceToDepthNchwEndToEndTest2(clDefaultBackends);
 }
 
+// Split
 TEST_CASE("ClSplitter1dEndToEndTest")
 {
     Splitter1dEndToEnd<armnn::DataType::Float32>(clDefaultBackends);
diff --git a/src/backends/neon/test/NeonEndToEndTests.cpp b/src/backends/neon/test/NeonEndToEndTests.cpp
index a64e426..d74c501 100644
--- a/src/backends/neon/test/NeonEndToEndTests.cpp
+++ b/src/backends/neon/test/NeonEndToEndTests.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright © 2017,2022 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
@@ -20,6 +20,8 @@
 #include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
 #include <backendsCommon/test/QLstmEndToEndTestImpl.hpp>
 #include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
+#include <backendsCommon/test/ReduceEndToEndTestImpl.hpp>
+#include <backendsCommon/test/ReshapeEndToEndTestImpl.hpp>
 #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
 #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
 #include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
@@ -177,42 +179,42 @@
 }
 
 // DepthToSpace
-TEST_CASE("DephtToSpaceEndToEndNchwFloat32")
+TEST_CASE("NeonDephtToSpaceEndToEndNchwFloat32")
 {
     DepthToSpaceEndToEnd<armnn::DataType::Float32>(neonDefaultBackends, armnn::DataLayout::NCHW);
 }
 
-TEST_CASE("DephtToSpaceEndToEndNchwFloat16")
+TEST_CASE("NeonDephtToSpaceEndToEndNchwFloat16")
 {
     DepthToSpaceEndToEnd<armnn::DataType::Float16>(neonDefaultBackends, armnn::DataLayout::NCHW);
 }
 
-TEST_CASE("DephtToSpaceEndToEndNchwUint8")
+TEST_CASE("NeonDephtToSpaceEndToEndNchwUint8")
 {
     DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(neonDefaultBackends, armnn::DataLayout::NCHW);
 }
 
-TEST_CASE("DephtToSpaceEndToEndNchwInt16")
+TEST_CASE("NeonDephtToSpaceEndToEndNchwInt16")
 {
     DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(neonDefaultBackends, armnn::DataLayout::NCHW);
 }
 
-TEST_CASE("DephtToSpaceEndToEndNhwcFloat32")
+TEST_CASE("NeonDephtToSpaceEndToEndNhwcFloat32")
 {
     DepthToSpaceEndToEnd<armnn::DataType::Float32>(neonDefaultBackends, armnn::DataLayout::NHWC);
 }
 
-TEST_CASE("DephtToSpaceEndToEndNhwcFloat16")
+TEST_CASE("NeonDephtToSpaceEndToEndNhwcFloat16")
 {
     DepthToSpaceEndToEnd<armnn::DataType::Float16>(neonDefaultBackends, armnn::DataLayout::NHWC);
 }
 
-TEST_CASE("DephtToSpaceEndToEndNhwcUint8")
+TEST_CASE("NeonDephtToSpaceEndToEndNhwcUint8")
 {
     DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(neonDefaultBackends, armnn::DataLayout::NHWC);
 }
 
-TEST_CASE("DephtToSpaceEndToEndNhwcInt16")
+TEST_CASE("NeonDephtToSpaceEndToEndNhwcInt16")
 {
     DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(neonDefaultBackends, armnn::DataLayout::NHWC);
 }
@@ -476,7 +478,7 @@
     FillEndToEnd<armnn::DataType::Float32>(neonDefaultBackends);
 }
 
-TEST_CASE("RefFillEndToEndTestFloat16")
+TEST_CASE("NeonFillEndToEndTestFloat16")
 {
     FillEndToEnd<armnn::DataType::Float16>(neonDefaultBackends);
 }
@@ -587,6 +589,28 @@
     ArgMinAxis3EndToEnd<armnn::DataType::QAsymmU8>(neonDefaultBackends);
 }
 
+// Reduce
+TEST_CASE("NeonReduceEndToEndTest")
+{
+    ReduceEndToEnd<armnn::DataType::Float32>(neonDefaultBackends);
+}
+
+TEST_CASE("NeonReduceEndToEndTestFloat16")
+{
+    ReduceEndToEnd<armnn::DataType::Float16>(neonDefaultBackends);
+}
+
+// Reshape
+TEST_CASE("NeonReshapeEndToEndTest")
+{
+    ReshapeEndToEnd<armnn::DataType::Float32>(neonDefaultBackends);
+}
+
+TEST_CASE("NeonReshapeEndToEndTestFloat16")
+{
+    ReshapeEndToEndFloat16<armnn::DataType::Float16>(neonDefaultBackends);
+}
+
 TEST_CASE("NeonStridedSliceInvalidSliceEndToEndTest")
 {
     StridedSliceInvalidSliceEndToEndTest(neonDefaultBackends);
diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp
index 017330e..8fcb3d1 100644
--- a/src/backends/reference/test/RefEndToEndTests.cpp
+++ b/src/backends/reference/test/RefEndToEndTests.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright © 2017,2022 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
@@ -28,6 +28,8 @@
 #include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
 #include <backendsCommon/test/QLstmEndToEndTestImpl.hpp>
 #include <backendsCommon/test/RankEndToEndTestImpl.hpp>
+#include <backendsCommon/test/ReduceEndToEndTestImpl.hpp>
+#include <backendsCommon/test/ReshapeEndToEndTestImpl.hpp>
 #include <backendsCommon/test/ResizeEndToEndTestImpl.hpp>
 #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
 #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
@@ -1440,6 +1442,28 @@
     RankEndToEnd<armnn::DataType::QSymmS8>(defaultBackends);
 }
 
+// Reduce
+TEST_CASE("RefReduceEndToEndTest")
+{
+    ReduceEndToEnd<armnn::DataType::Float32>(defaultBackends);
+}
+
+TEST_CASE("RefReduceEndToEndTestFloat16")
+{
+    ReduceEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
+
+// Reshape
+TEST_CASE("RefReshapeEndToEndTest")
+{
+    ReshapeEndToEnd<armnn::DataType::Float32>(defaultBackends);
+}
+
+TEST_CASE("RefReshapeEndToEndTestFloat16")
+{
+    ReshapeEndToEndFloat16<armnn::DataType::Float16>(defaultBackends);
+}
+
 TEST_CASE("RefForceImportWithAlignedBuffersEndToEndTest")
 {
     ForceImportWithAlignedBuffersEndToEndTest(defaultBackends);