diff --git a/src/backends/backendsCommon/test/AdditionEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/AdditionEndToEndTestImpl.hpp
new file mode 100644
index 0000000..f1a93c7
--- /dev/null
+++ b/src/backends/backendsCommon/test/AdditionEndToEndTestImpl.hpp
@@ -0,0 +1,81 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <ResolveType.hpp>
+
+#include <armnn/INetwork.hpp>
+
+#include <doctest/doctest.h>
+#include <CommonTestUtils.hpp>
+
+namespace
+{
+
+template<typename armnn::DataType DataType>
+armnn::INetworkPtr CreateAdditionNetwork(const armnn::TensorShape& inputXShape,
+                                            const armnn::TensorShape& inputYShape,
+                                            const armnn::TensorShape& outputShape,
+                                            const float qScale = 1.0f,
+                                            const int32_t qOffset = 0)
+{
+    using namespace armnn;
+
+    INetworkPtr network(INetwork::Create());
+
+    TensorInfo inputXTensorInfo(inputXShape, DataType, qScale, qOffset, true);
+    TensorInfo inputYTensorInfo(inputYShape, DataType, qScale, qOffset, true);
+
+    TensorInfo outputTensorInfo(outputShape, DataType, qScale, qOffset);
+
+
+    IConnectableLayer* addition = network->AddAdditionLayer("addition");
+    IConnectableLayer* inputX = network->AddInputLayer(0, "inputX");
+    IConnectableLayer* inputY = network->AddInputLayer(1, "inputY");
+    IConnectableLayer* output = network->AddOutputLayer(0, "output");
+
+    Connect(inputX, addition, inputXTensorInfo, 0, 0);
+    Connect(inputY, addition, inputYTensorInfo, 0, 1);
+    Connect(addition, output, outputTensorInfo, 0, 0);
+
+    return network;
+}
+
+template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
+void AdditionEndToEnd(const std::vector<armnn::BackendId>& backends)
+{
+    using namespace armnn;
+
+    const TensorShape& inputXShape = { 2, 2, 2 };
+    const TensorShape& inputYShape = { 2, 2, 2 };
+    const TensorShape& outputShape = { 2, 2, 2 };
+
+    INetworkPtr network = CreateAdditionNetwork<ArmnnType>(inputXShape, inputYShape, outputShape);
+
+    CHECK(network);
+
+    std::vector<T> inputXData{ 1, 2,
+                               3, 4,
+
+                               9, 10,
+                               11, 12 };
+    std::vector<T> inputYData{ 5, 7,
+                               6, 8,
+
+                               13, 15,
+                               14, 16 };
+    std::vector<T> expectedOutput{ 6, 9,
+                                   9, 12,
+
+                                   22, 25,
+                                   25, 28 };
+
+    std::map<int, std::vector<T>> inputTensorData = {{ 0, inputXData }, {1, inputYData}};
+    std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput } };
+
+    EndToEndLayerTestImpl<ArmnnType, ArmnnType>(std::move(network), inputTensorData, expectedOutputData, backends);
+}
+
+} // anonymous namespaceS
\ No newline at end of file
diff --git a/src/backends/cl/test/ClEndToEndTests.cpp b/src/backends/cl/test/ClEndToEndTests.cpp
index f28679c..74307e4 100644
--- a/src/backends/cl/test/ClEndToEndTests.cpp
+++ b/src/backends/cl/test/ClEndToEndTests.cpp
@@ -1,11 +1,12 @@
 //
-// Copyright © 2017 Arm Ltd. All rights reserved.
+// Copyright © 2022 Arm Ltd. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
 #include <backendsCommon/test/EndToEndTestImpl.hpp>
 
 #include <backendsCommon/test/ActivationEndToEndTestImpl.hpp>
+#include <backendsCommon/test/AdditionEndToEndTestImpl.hpp>
 #include <backendsCommon/test/ArgMinMaxEndToEndTestImpl.hpp>
 #include <backendsCommon/test/ComparisonEndToEndTestImpl.hpp>
 #include <backendsCommon/test/ConcatEndToEndTestImpl.hpp>
@@ -41,6 +42,17 @@
                                                              expectedOutput);
 }
 
+// Addition
+TEST_CASE("ClAdditionEndToEndFloat32Test")
+{
+    AdditionEndToEnd<armnn::DataType::Float32>(clDefaultBackends);
+}
+
+TEST_CASE("ClAdditionEndToEndUint8Test")
+{
+    AdditionEndToEnd<armnn::DataType::QAsymmU8>(clDefaultBackends);
+}
+
 // Constant
 TEST_CASE("ConstantUsage_Cl_Float32")
 {
diff --git a/src/backends/neon/test/NeonEndToEndTests.cpp b/src/backends/neon/test/NeonEndToEndTests.cpp
index 4c7608f..faeb4da 100644
--- a/src/backends/neon/test/NeonEndToEndTests.cpp
+++ b/src/backends/neon/test/NeonEndToEndTests.cpp
@@ -6,6 +6,7 @@
 #include <backendsCommon/test/EndToEndTestImpl.hpp>
 
 #include <backendsCommon/test/ActivationEndToEndTestImpl.hpp>
+#include <backendsCommon/test/AdditionEndToEndTestImpl.hpp>
 #include <backendsCommon/test/ArgMinMaxEndToEndTestImpl.hpp>
 #include <backendsCommon/test/BatchMatMulEndToEndTestImpl.hpp>
 #include <backendsCommon/test/ComparisonEndToEndTestImpl.hpp>
@@ -129,6 +130,16 @@
                                                                   expectedOutput);
 }
 
+TEST_CASE("NeonAdditionEndToEndFloat32Test")
+{
+    AdditionEndToEnd<armnn::DataType::Float32>(neonDefaultBackends);
+}
+
+TEST_CASE("NeonAdditionEndToEndUint8Test")
+{
+    AdditionEndToEnd<armnn::DataType::QAsymmU8>(neonDefaultBackends);
+}
+
 TEST_CASE("NeonBatchMatMulEndToEndFloat32Test")
 {
     BatchMatMulEndToEnd<armnn::DataType::Float32>(neonDefaultBackends);
diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp
index 7c196ba..369e98a 100644
--- a/src/backends/reference/test/RefEndToEndTests.cpp
+++ b/src/backends/reference/test/RefEndToEndTests.cpp
@@ -1,11 +1,12 @@
 //
-// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
 #include <backendsCommon/test/EndToEndTestImpl.hpp>
 
 #include <backendsCommon/test/ActivationEndToEndTestImpl.hpp>
+#include <backendsCommon/test/AdditionEndToEndTestImpl.hpp>
 #include <backendsCommon/test/ArgMinMaxEndToEndTestImpl.hpp>
 #include <backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp>
 #include <backendsCommon/test/BatchMatMulEndToEndTestImpl.hpp>
@@ -80,6 +81,17 @@
                                                                      expectedOutput);
 }
 
+// Addition
+TEST_CASE("RefAdditionEndtoEndFloat32")
+{
+    AdditionEndToEnd<armnn::DataType::Float32>(defaultBackends);
+}
+
+TEST_CASE("RefAdditionEndtoEndUint8")
+{
+    AdditionEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
+}
+
 // Constant
 TEST_CASE("ConstantUsage_Ref_Float32")
 {
diff --git a/src/backends/tosaReference/test/CMakeLists.txt b/src/backends/tosaReference/test/CMakeLists.txt
index 627a183..06fbbe1 100644
--- a/src/backends/tosaReference/test/CMakeLists.txt
+++ b/src/backends/tosaReference/test/CMakeLists.txt
@@ -4,6 +4,7 @@
 #
 
 list(APPEND armnnTosaRefBackendUnitTests_sources
+        TosaRefEndToEndTests.cpp
         TosaRefLayerTests.cpp
         TosaRefLayerSupportTests.cpp
         TosaRefOptimizedNetworkTests.cpp
diff --git a/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp b/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
new file mode 100644
index 0000000..ce4cde2
--- /dev/null
+++ b/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
@@ -0,0 +1,22 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "backendsCommon/test/EndToEndTestImpl.hpp"
+
+#include "backendsCommon/test/AdditionEndToEndTestImpl.hpp"
+
+#include <doctest/doctest.h>
+
+TEST_SUITE("TosaRefEndToEnd")
+{
+std::vector<armnn::BackendId> tosaDefaultBackends = { "TosaRef" };
+
+// Addition
+TEST_CASE("TosaRefEndtoEndTestFloat32")
+{
+    AdditionEndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
+}
+
+}
\ No newline at end of file
