From 10e0786f15bdb60e1d632c9a368fce2737852ae4 Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Mon, 16 Sep 2019 16:30:59 +0100 Subject: IVGCVSW-3877 Reduce code duplication in TestNameOnlyLayerVisitor * Defined macros for common class structure and near-identical test cases Signed-off-by: Aron Virginas-Tar Change-Id: I47a2ece3e1797496c196f63c7fcd71e5748295c6 --- src/armnn/test/TestNameOnlyLayerVisitor.cpp | 263 +++++----------------------- src/armnn/test/TestNameOnlyLayerVisitor.hpp | 201 ++++++--------------- 2 files changed, 92 insertions(+), 372 deletions(-) diff --git a/src/armnn/test/TestNameOnlyLayerVisitor.cpp b/src/armnn/test/TestNameOnlyLayerVisitor.cpp index c4c4a479eb..c738caeb1f 100644 --- a/src/armnn/test/TestNameOnlyLayerVisitor.cpp +++ b/src/armnn/test/TestNameOnlyLayerVisitor.cpp @@ -2,242 +2,63 @@ // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // -#include -#include "TestNameOnlyLayerVisitor.hpp" -#include "Network.hpp" - -namespace armnn { - -BOOST_AUTO_TEST_SUITE(TestNameOnlyLayerVisitor) - -// Addition -BOOST_AUTO_TEST_CASE(CheckAdditionLayerVisitorName) -{ - TestAdditionLayerVisitor visitor("AdditionLayer"); - Network net; - - IConnectableLayer *const layer = net.AddAdditionLayer("AdditionLayer"); - layer->Accept(visitor); -} - -BOOST_AUTO_TEST_CASE(CheckAdditionLayerVisitorNameNullptr) -{ - TestAdditionLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddAdditionLayer(); - layer->Accept(visitor); -} - -// Division -BOOST_AUTO_TEST_CASE(CheckDivisionLayerVisitorName) -{ - TestDivisionLayerVisitor visitor("DivisionLayer"); - Network net; - - IConnectableLayer *const layer = net.AddAdditionLayer("DivisionLayer"); - layer->Accept(visitor); -} - -BOOST_AUTO_TEST_CASE(CheckDivisionLayerVisitorNameNullptr) -{ - TestDivisionLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddDivisionLayer(); - layer->Accept(visitor); -} - -// Equal -BOOST_AUTO_TEST_CASE(CheckEqualLayerVisitorName) -{ - TestEqualLayerVisitor visitor("EqualLayer"); - Network net; - - IConnectableLayer *const layer = net.AddEqualLayer("EqualLayer"); - layer->Accept(visitor); -} - -BOOST_AUTO_TEST_CASE(CheckEqualLayerVisitorNameNullptr) -{ - TestEqualLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddEqualLayer(); - layer->Accept(visitor); -} - -// Floor -BOOST_AUTO_TEST_CASE(CheckFloorLayerVisitorName) -{ - TestFloorLayerVisitor visitor("FloorLayer"); - Network net; - - IConnectableLayer *const layer = net.AddFloorLayer("FloorLayer"); - layer->Accept(visitor); -} - -BOOST_AUTO_TEST_CASE(CheckFloorLayerVisitorNameNullptr) -{ - TestFloorLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddFloorLayer(); - layer->Accept(visitor); -} - -// Gather -BOOST_AUTO_TEST_CASE(CheckGatherLayerVisitorName) -{ - TestGatherLayerVisitor visitor("GatherLayer"); - Network net; - - IConnectableLayer *const layer = net.AddGatherLayer("GatherLayer"); - layer->Accept(visitor); -} - -BOOST_AUTO_TEST_CASE(CheckGatherLayerVisitorNameNullptr) -{ - TestGatherLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddGatherLayer(); - layer->Accept(visitor); -} -// Greater -BOOST_AUTO_TEST_CASE(CheckGreaterLayerVisitorName) -{ - TestGreaterLayerVisitor visitor("GreaterLayer"); - Network net; - - IConnectableLayer *const layer = net.AddGreaterLayer("GreaterLayer"); - layer->Accept(visitor); -} - -BOOST_AUTO_TEST_CASE(CheckGreaterLayerVisitorNameNullptr) -{ - TestGreaterLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddGreaterLayer(); - layer->Accept(visitor); -} - -// Maximum -BOOST_AUTO_TEST_CASE(CheckMaximumLayerVisitorName) -{ - TestMaximumLayerVisitor visitor("MaximumLayer"); - Network net; - - IConnectableLayer *const layer = net.AddMaximumLayer("MaximumLayer"); - layer->Accept(visitor); -} - -BOOST_AUTO_TEST_CASE(CheckMaximumLayerVisitorNameNullptr) -{ - TestMaximumLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddMaximumLayer(); - layer->Accept(visitor); -} - -// Minimum -BOOST_AUTO_TEST_CASE(CheckMinimumLayerVisitorName) -{ - TestMinimumLayerVisitor visitor("MinimumLayer"); - Network net; - - IConnectableLayer *const layer = net.AddMinimumLayer("MinimumLayer"); - layer->Accept(visitor); -} - -BOOST_AUTO_TEST_CASE(CheckMinimumLayerVisitorNameNullptr) -{ - TestMinimumLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddMinimumLayer(); - layer->Accept(visitor); -} - -// Multiplication -BOOST_AUTO_TEST_CASE(CheckMultiplicationLayerVisitorName) -{ - TestMultiplicationLayerVisitor visitor("MultiplicationLayer"); - Network net; +#include "TestNameOnlyLayerVisitor.hpp" - IConnectableLayer *const layer = net.AddMultiplicationLayer("MultiplicationLayer"); - layer->Accept(visitor); -} +#include -BOOST_AUTO_TEST_CASE(CheckMultiplicationLayerVisitorNameNullptr) -{ - TestMultiplicationLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddMultiplicationLayer(); - layer->Accept(visitor); -} +#include -// Rsqrt -BOOST_AUTO_TEST_CASE(CheckRsqrtLayerVisitorName) +namespace { - TestRsqrtLayerVisitor visitor("RsqrtLayer"); - Network net; - - IConnectableLayer *const layer = net.AddRsqrtLayer("RsqrtLayer"); - layer->Accept(visitor); -} -BOOST_AUTO_TEST_CASE(CheckRsqrtLayerVisitorNameNullptr) -{ - TestRsqrtLayerVisitor visitor; - Network net; +#define ADD_LAYER_METHOD_1_PARAM(name) net.Add##name##Layer("name##Layer") +#define ADD_LAYER_METHOD_2_PARAM(name) net.Add##name##Layer(armnn::name##Descriptor(), "name##Layer") - IConnectableLayer *const layer = net.AddRsqrtLayer(); - layer->Accept(visitor); +#define TEST_CASE_CHECK_LAYER_VISITOR_NAME(name, numParams) \ +BOOST_AUTO_TEST_CASE(Check##name##LayerVisitorName) \ +{ \ + Test##name##LayerVisitor visitor("name##Layer"); \ + armnn::Network net; \ + armnn::IConnectableLayer *const layer = ADD_LAYER_METHOD_##numParams##_PARAM(name); \ + layer->Accept(visitor); \ } -// Slice -BOOST_AUTO_TEST_CASE(CheckSliceLayerVisitorName) -{ - TestSliceLayerVisitor visitor("SliceLayer"); - Network net; +#define ADD_LAYER_METHOD_NULLPTR_1_PARAM(name) net.Add##name##Layer() +#define ADD_LAYER_METHOD_NULLPTR_2_PARAM(name) net.Add##name##Layer(armnn::name##Descriptor()) - IConnectableLayer *const layer = net.AddSliceLayer(SliceDescriptor(), "SliceLayer"); - layer->Accept(visitor); +#define TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR(name, numParams) \ +BOOST_AUTO_TEST_CASE(Check##name##LayerVisitorNameNullptr) \ +{ \ + Test##name##LayerVisitor visitor; \ + armnn::Network net; \ + armnn::IConnectableLayer *const layer = ADD_LAYER_METHOD_NULLPTR_##numParams##_PARAM(name); \ + layer->Accept(visitor); \ } -BOOST_AUTO_TEST_CASE(CheckSliceLayerVisitorNameNullptr) -{ - TestSliceLayerVisitor visitor; - Network net; +#define TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(name) \ +TEST_CASE_CHECK_LAYER_VISITOR_NAME(name, 1) \ +TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR(name, 1) - IConnectableLayer *const layer = net.AddSliceLayer(SliceDescriptor()); - layer->Accept(visitor); -} +#define TEST_SUITE_NAME_ONLY_LAYER_VISITOR_2_PARAM(name) \ +TEST_CASE_CHECK_LAYER_VISITOR_NAME(name, 2) \ +TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR(name, 2) -// Subtraction -BOOST_AUTO_TEST_CASE(CheckSubtractionLayerVisitorName) -{ - TestSubtractionLayerVisitor visitor("SubtractionLayer"); - Network net; +} // anonymous namespace - IConnectableLayer *const layer = net.AddSubtractionLayer("SubtractionLayer"); - layer->Accept(visitor); -} +BOOST_AUTO_TEST_SUITE(TestNameOnlyLayerVisitor) -BOOST_AUTO_TEST_CASE(CheckSubtractionLayerVisitorNameNullptr) -{ - TestSubtractionLayerVisitor visitor; - Network net; - - IConnectableLayer *const layer = net.AddSubtractionLayer(); - layer->Accept(visitor); -} +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Addition) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Division) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Equal) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Floor) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Gather) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Greater) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Maximum) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Minimum) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Multiplication) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Rsqrt) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_2_PARAM(Slice) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR_1_PARAM(Subtraction) BOOST_AUTO_TEST_SUITE_END() - -} // namespace armnn diff --git a/src/armnn/test/TestNameOnlyLayerVisitor.hpp b/src/armnn/test/TestNameOnlyLayerVisitor.hpp index dec0d15a96..1c5ede0802 100644 --- a/src/armnn/test/TestNameOnlyLayerVisitor.hpp +++ b/src/armnn/test/TestNameOnlyLayerVisitor.hpp @@ -6,154 +6,53 @@ #include "TestLayerVisitor.hpp" -namespace armnn -{ - -// Concrete TestLayerVisitor subclasses for layers taking Name argument with overridden VisitLayer methods -class TestAdditionLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestAdditionLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitAdditionLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestDivisionLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestDivisionLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitDivisionLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestEqualLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestEqualLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitEqualLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestFloorLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestFloorLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitFloorLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestGatherLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestGatherLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitGatherLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestGreaterLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestGreaterLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitGreaterLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestMultiplicationLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestMultiplicationLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitMultiplicationLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestMaximumLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestMaximumLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitMaximumLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestMinimumLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestMinimumLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitMinimumLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestRsqrtLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestRsqrtLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitRsqrtLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestSliceLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestSliceLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitSliceLayer(const IConnectableLayer* layer, - const SliceDescriptor& sliceDescriptor, - const char* name = nullptr) override - { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -class TestSubtractionLayerVisitor : public TestLayerVisitor -{ -public: - explicit TestSubtractionLayerVisitor(const char* name = nullptr) : TestLayerVisitor(name) {}; - - void VisitSubtractionLayer(const IConnectableLayer* layer, - const char* name = nullptr) override { - CheckLayerPointer(layer); - CheckLayerName(name); - }; -}; - -} // namespace armnn +namespace +{ + +// Defines a visitor function with 1 required parameter to be used +// with layers that do not have a descriptor +#define VISIT_METHOD_1_PARAM(name) \ +void Visit##name##Layer(const armnn::IConnectableLayer* layer, const char* layerName = nullptr) override + +// Defines a visitor function with 2 required parameters to be used +// with layers that have a descriptor +#define VISIT_METHOD_2_PARAM(name) \ +void Visit##name##Layer(const armnn::IConnectableLayer* layer, \ + const armnn::name##Descriptor&, \ + const char* layerName = nullptr) override + +#define TEST_LAYER_VISITOR(name, numVisitorParams) \ +class Test##name##LayerVisitor : public armnn::TestLayerVisitor \ +{ \ +public: \ + explicit Test##name##LayerVisitor(const char* layerName = nullptr) : armnn::TestLayerVisitor(layerName) {}; \ + \ + VISIT_METHOD_##numVisitorParams##_PARAM(name) \ + { \ + CheckLayerPointer(layer); \ + CheckLayerName(layerName); \ + } \ +}; + +// Defines a test layer visitor class for a layer, of a given name, +// that does not require a descriptor +#define TEST_LAYER_VISITOR_1_PARAM(name) TEST_LAYER_VISITOR(name, 1) + +// Defines a test layer visitor class for a layer, of a given name, +// that requires a descriptor +#define TEST_LAYER_VISITOR_2_PARAM(name) TEST_LAYER_VISITOR(name, 2) + +} // anonymous namespace + +TEST_LAYER_VISITOR_1_PARAM(Addition) +TEST_LAYER_VISITOR_1_PARAM(Division) +TEST_LAYER_VISITOR_1_PARAM(Equal) +TEST_LAYER_VISITOR_1_PARAM(Floor) +TEST_LAYER_VISITOR_1_PARAM(Gather) +TEST_LAYER_VISITOR_1_PARAM(Greater) +TEST_LAYER_VISITOR_1_PARAM(Maximum) +TEST_LAYER_VISITOR_1_PARAM(Minimum) +TEST_LAYER_VISITOR_1_PARAM(Multiplication) +TEST_LAYER_VISITOR_1_PARAM(Rsqrt) +TEST_LAYER_VISITOR_2_PARAM(Slice) +TEST_LAYER_VISITOR_1_PARAM(Subtraction) -- cgit v1.2.1