IVGCVSW-2548 Add the TestLayerVisitor class

 * Add abstract base class TestLayerVisitor

Change-Id: Id453f3ad9721f3680166a41b75a1880cf20032f7
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6b893f2..a12d6b4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -392,6 +392,8 @@
         src/armnn/test/SubGraphTests.cpp
         src/armnn/test/TensorHelpers.hpp
         src/armnn/test/TensorTest.cpp
+        src/armnn/test/TestLayerVisitor.cpp
+        src/armnn/test/TestLayerVisitor.hpp
         src/armnn/test/UnitTests.cpp
         src/armnn/test/UnitTests.hpp
         src/armnn/test/UtilsTests.cpp
diff --git a/src/armnn/test/TestLayerVisitor.cpp b/src/armnn/test/TestLayerVisitor.cpp
new file mode 100644
index 0000000..24d3c0b
--- /dev/null
+++ b/src/armnn/test/TestLayerVisitor.cpp
@@ -0,0 +1,28 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <boost/test/unit_test.hpp>
+#include "TestLayerVisitor.hpp"
+
+namespace armnn
+{
+
+void TestLayerVisitor::CheckLayerName(const char* name)
+{
+    if (name == nullptr)
+    {
+        BOOST_CHECK(m_LayerName == nullptr);
+    }
+    else if (m_LayerName == nullptr)
+    {
+        BOOST_CHECK(name == nullptr);
+    }
+    else
+    {
+        BOOST_CHECK_EQUAL(m_LayerName, name);
+    }
+};
+
+} //namespace armnn
\ No newline at end of file
diff --git a/src/armnn/test/TestLayerVisitor.hpp b/src/armnn/test/TestLayerVisitor.hpp
new file mode 100644
index 0000000..16227fb
--- /dev/null
+++ b/src/armnn/test/TestLayerVisitor.hpp
@@ -0,0 +1,181 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/ILayerVisitor.hpp>
+
+namespace armnn
+{
+// Abstract base class with do nothing implementations for all layer visit methods
+class TestLayerVisitor : public ILayerVisitor
+{
+protected:
+    virtual ~TestLayerVisitor() {};
+
+    void CheckLayerName(const char* name);
+
+private:
+    const char* m_LayerName;
+
+public:
+    explicit TestLayerVisitor(const char* name) : m_LayerName(name) {};
+
+    virtual void VisitInputLayer(const IConnectableLayer* layer,
+                                 LayerBindingId id,
+                                 const char* name = nullptr) {};
+
+    virtual void VisitConvolution2dLayer(const IConnectableLayer* layer,
+                                         const Convolution2dDescriptor& convolution2dDescriptor,
+                                         const ConstTensor& weights,
+                                         const char* name = nullptr) {};
+
+    virtual void VisitConvolution2dLayer(const IConnectableLayer* layer,
+                                         const Convolution2dDescriptor& convolution2dDescriptor,
+                                         const ConstTensor& weights,
+                                         const ConstTensor& biases,
+                                         const char* name = nullptr) {};
+
+    virtual void VisitDepthwiseConvolution2dLayer(const IConnectableLayer* layer,
+                                                  const DepthwiseConvolution2dDescriptor& convolution2dDescriptor,
+                                                  const ConstTensor& weights,
+                                                  const char* name = nullptr) {};
+
+    virtual void VisitDepthwiseConvolution2dLayer(const IConnectableLayer* layer,
+                                                  const DepthwiseConvolution2dDescriptor& convolution2dDescriptor,
+                                                  const ConstTensor& weights,
+                                                  const ConstTensor& biases,
+                                                  const char* name = nullptr) {};
+
+    virtual void VisitDetectionPostProcessLayer(const IConnectableLayer* layer,
+                                                const DetectionPostProcessDescriptor& descriptor,
+                                                const char* name = nullptr) {};
+
+    virtual void VisitFullyConnectedLayer(const IConnectableLayer* layer,
+                                          const FullyConnectedDescriptor& fullyConnectedDescriptor,
+                                          const ConstTensor& weights,
+                                          const char* name = nullptr) {};
+
+    virtual void VisitFullyConnectedLayer(const IConnectableLayer* layer,
+                                          const FullyConnectedDescriptor& fullyConnectedDescriptor,
+                                          const ConstTensor& weights,
+                                          const ConstTensor& biases,
+                                          const char* name = nullptr) {};
+
+    virtual void VisitPermuteLayer(const IConnectableLayer* layer,
+                                   const PermuteDescriptor& permuteDescriptor,
+                                   const char* name = nullptr) {};
+
+    virtual void VisitBatchToSpaceNdLayer(const IConnectableLayer* layer,
+                                          const BatchToSpaceNdDescriptor& batchToSpaceNdDescriptor,
+                                          const char* name = nullptr) {};
+
+    virtual void VisitPooling2dLayer(const IConnectableLayer* layer,
+                                     const Pooling2dDescriptor& pooling2dDescriptor,
+                                     const char* name = nullptr) {};
+
+    virtual void VisitActivationLayer(const IConnectableLayer* layer,
+                                      const ActivationDescriptor& activationDescriptor,
+                                      const char* name = nullptr) {};
+
+    virtual void VisitNormalizationLayer(const IConnectableLayer* layer,
+                                         const NormalizationDescriptor& normalizationDescriptor,
+                                         const char* name = nullptr) {};
+
+    virtual void VisitSoftmaxLayer(const IConnectableLayer* layer,
+                                   const SoftmaxDescriptor& softmaxDescriptor,
+                                   const char* name = nullptr) {};
+
+    virtual void VisitSplitterLayer(const IConnectableLayer* layer,
+                                    const ViewsDescriptor& splitterDescriptor,
+                                    const char* name = nullptr) {};
+
+    virtual void VisitMergerLayer(const IConnectableLayer* layer,
+                                  const OriginsDescriptor& mergerDescriptor,
+                                  const char* name = nullptr) {};
+
+    virtual void VisitAdditionLayer(const IConnectableLayer* layer,
+                                    const char* name = nullptr) {};
+
+    virtual void VisitMultiplicationLayer(const IConnectableLayer* layer,
+                                          const char* name = nullptr) {};
+
+    virtual void VisitBatchNormalizationLayer(const IConnectableLayer* layer,
+                                              const BatchNormalizationDescriptor& desc,
+                                              const ConstTensor& mean,
+                                              const ConstTensor& variance,
+                                              const ConstTensor& beta,
+                                              const ConstTensor& gamma,
+                                              const char* name = nullptr) {};
+
+    virtual void VisitResizeBilinearLayer(const IConnectableLayer* layer,
+                                          const ResizeBilinearDescriptor& resizeDesc,
+                                          const char* name = nullptr) {};
+
+    virtual void VisitL2NormalizationLayer(const IConnectableLayer* layer,
+                                           const L2NormalizationDescriptor& desc,
+                                           const char* name = nullptr) {};
+
+    virtual void VisitConstantLayer(const IConnectableLayer* layer,
+                                    const ConstTensor& input,
+                                    const char* name = nullptr) {};
+
+    virtual void VisitReshapeLayer(const IConnectableLayer* layer,
+                                   const ReshapeDescriptor& reshapeDescriptor,
+                                   const char* name = nullptr) {};
+
+    virtual void VisitSpaceToBatchNdLayer(const IConnectableLayer* layer,
+                                          const SpaceToBatchNdDescriptor& spaceToBatchNdDescriptor,
+                                          const char* name = nullptr) {};
+
+    virtual void VisitFloorLayer(const IConnectableLayer* layer,
+                                 const char* name = nullptr) {};
+
+    virtual void VisitOutputLayer(const IConnectableLayer* layer,
+                                  LayerBindingId id,
+                                  const char* name = nullptr) {};
+
+    virtual void VisitLstmLayer(const IConnectableLayer* layer,
+                                const LstmDescriptor& descriptor,
+                                const LstmInputParams& params,
+                                const char* name = nullptr) {};
+
+    virtual void VisitDivisionLayer(const IConnectableLayer* layer,
+                                    const char* name = nullptr) {};
+
+    virtual void VisitSubtractionLayer(const IConnectableLayer* layer,
+                                       const char* name = nullptr) {};
+
+    virtual void VisitMaximumLayer(const IConnectableLayer* layer,
+                                   const char* name = nullptr) {};
+
+    virtual void VisitMeanLayer(const IConnectableLayer* layer,
+                                const MeanDescriptor& meanDescriptor,
+                                const char* name = nullptr) {};
+
+    virtual void VisitPadLayer(const IConnectableLayer* layer,
+                               const PadDescriptor& padDescriptor,
+                               const char* name = nullptr) {};
+
+    virtual void VisitStridedSliceLayer(const IConnectableLayer* layer,
+                                        const StridedSliceDescriptor& stridedSliceDescriptor,
+                                        const char* name = nullptr) {};
+
+    virtual void VisitMinimumLayer(const IConnectableLayer* layer,
+                                   const char* name = nullptr) {};
+
+    virtual void VisitGreaterLayer(const IConnectableLayer* layer,
+                                   const char* name = nullptr) {};
+
+    virtual void VisitEqualLayer(const IConnectableLayer* layer,
+                                 const char* name = nullptr) {};
+
+    virtual void VisitRsqrtLayer(const IConnectableLayer* layer,
+                                 const char* name = nullptr) {};
+
+    virtual void VisitGatherLayer(const IConnectableLayer* layer,
+                                  const char* name = nullptr) {};
+};
+
+} //namespace armnn