IVGCVSW-6635 Move MemCopyTestImpl from acl to armnnTestUtils.

* Move MemCopyTestImpl.hpp from src/backends/aclCommon/test/ to
  include/armnnTestutils.
* Refactor MemCopyTests in aclCommon, cl and Neon.
* Introduce RefMemCopyTests to exercise this utility in x86 builds.

Signed-off-by: Colm Donelan <colm.donelan@arm.com>
Change-Id: I8824f013d3656658ed0a2904bb79384e3af68641
diff --git a/src/backends/neon/test/NeonMemCopyTests.cpp b/src/backends/neon/test/NeonMemCopyTests.cpp
index 0485092..de4195d 100644
--- a/src/backends/neon/test/NeonMemCopyTests.cpp
+++ b/src/backends/neon/test/NeonMemCopyTests.cpp
@@ -3,23 +3,43 @@
 // SPDX-License-Identifier: MIT
 //
 
-#include "NeonWorkloadFactoryHelper.hpp"
-
-#include <aclCommon/test/MemCopyTestImpl.hpp>
-
-#include <neon/NeonWorkloadFactory.hpp>
-
-#include <reference/RefWorkloadFactory.hpp>
-#include <reference/test/RefWorkloadFactoryHelper.hpp>
-
+#include "../NeonWorkloadFactory.hpp"
+#include <neon/NeonBackend.hpp>
+#include <armnnTestUtils/LayerTestResult.hpp>
+#include <armnnTestUtils/MemCopyTestImpl.hpp>
+#include <armnnTestUtils/MockBackend.hpp>
 #include <doctest/doctest.h>
 
+namespace
+{
+
+template <>
+struct MemCopyTestHelper<armnn::NeonWorkloadFactory>
+{
+    static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager()
+    {
+        armnn::NeonBackend backend;
+        return backend.CreateMemoryManager();
+    }
+
+    static armnn::NeonWorkloadFactory GetFactory(
+        const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
+        const armnn::ModelOptions& modelOptions = {})
+    {
+        armnn::NeonBackend backend;
+        return armnn::NeonWorkloadFactory(armnn::PolymorphicPointerDowncast<armnn::NeonMemoryManager>(memoryManager),
+                                          backend.CreateBackendSpecificModelContext(modelOptions));
+    }
+};
+}    // namespace
+
+
 TEST_SUITE("NeonMemCopy")
 {
 TEST_CASE("CopyBetweenCpuAndNeon")
 {
     LayerTestResult<float, 4> result =
-        MemCopyTest<armnn::RefWorkloadFactory, armnn::NeonWorkloadFactory, armnn::DataType::Float32>(false);
+        MemCopyTest<armnn::MockWorkloadFactory, armnn::NeonWorkloadFactory, armnn::DataType::Float32>(false);
     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
                                      result.m_ActualShape, result.m_ExpectedShape);
     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
@@ -28,7 +48,7 @@
 TEST_CASE("CopyBetweenNeonAndCpu")
 {
     LayerTestResult<float, 4> result =
-        MemCopyTest<armnn::NeonWorkloadFactory, armnn::RefWorkloadFactory, armnn::DataType::Float32>(false);
+        MemCopyTest<armnn::NeonWorkloadFactory, armnn::MockWorkloadFactory, armnn::DataType::Float32>(false);
     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
                                      result.m_ActualShape, result.m_ExpectedShape);
     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
@@ -37,7 +57,7 @@
 TEST_CASE("CopyBetweenCpuAndNeonWithSubtensors")
 {
     LayerTestResult<float, 4> result =
-        MemCopyTest<armnn::RefWorkloadFactory, armnn::NeonWorkloadFactory, armnn::DataType::Float32>(true);
+        MemCopyTest<armnn::MockWorkloadFactory, armnn::NeonWorkloadFactory, armnn::DataType::Float32>(true);
     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
                                      result.m_ActualShape, result.m_ExpectedShape);
     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());
@@ -46,7 +66,7 @@
 TEST_CASE("CopyBetweenNeonAndCpuWithSubtensors")
 {
     LayerTestResult<float, 4> result =
-        MemCopyTest<armnn::NeonWorkloadFactory, armnn::RefWorkloadFactory, armnn::DataType::Float32>(true);
+        MemCopyTest<armnn::NeonWorkloadFactory, armnn::MockWorkloadFactory, armnn::DataType::Float32>(true);
     auto predResult = CompareTensors(result.m_ActualData,  result.m_ExpectedData,
                                      result.m_ActualShape, result.m_ExpectedShape);
     CHECK_MESSAGE(predResult.m_Result, predResult.m_Message.str());