IVGCVSW-2232 Pack/Stack operator support in Tensorflow Parser

* Parser support and unit tests added for Stack opertor in TfParser


Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
Change-Id: I243b33fda2762180ef880458e760a54fde64f3d8
diff --git a/src/armnnTfParser/test/Stack.cpp b/src/armnnTfParser/test/Stack.cpp
new file mode 100644
index 0000000..b289917
--- /dev/null
+++ b/src/armnnTfParser/test/Stack.cpp
@@ -0,0 +1,174 @@
+//
+// Copyright © 2020 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "armnnTfParser/ITfParser.hpp"
+#include "ParserPrototxtFixture.hpp"
+
+#include <PrototxtConversions.hpp>
+
+#include <boost/test/unit_test.hpp>
+
+BOOST_AUTO_TEST_SUITE(TensorflowParser)
+
+struct StackFixture : public armnnUtils::ParserPrototxtFixture<armnnTfParser::ITfParser>
+{
+    explicit StackFixture(const armnn::TensorShape& inputShape0,
+                          const armnn::TensorShape& inputShape1,
+                          int axis = 0)
+    {
+        m_Prototext = R"(
+        node {
+          name: "input0"
+          op: "Placeholder"
+          attr {
+            key: "dtype"
+            value {
+              type: DT_FLOAT
+            }
+          }
+          attr {
+            key: "shape"
+            value {
+              shape {
+              }
+            }
+          }
+        }
+        node {
+          name: "input1"
+          op: "Placeholder"
+          attr {
+            key: "dtype"
+            value {
+              type: DT_FLOAT
+            }
+          }
+          attr {
+            key: "shape"
+            value {
+              shape {
+              }
+            }
+          }
+        }
+        node {
+          name: "output"
+          op: "Stack"
+          input: "input0"
+          input: "input1"
+          attr {
+            key: "axis"
+            value {
+              i: )";
+                m_Prototext += std::to_string(axis);
+                m_Prototext += R"(
+            }
+          }
+        })";
+
+        Setup({{"input0", inputShape0 },
+               {"input1", inputShape1 }}, {"output"});
+    }
+};
+
+struct Stack3DFixture : StackFixture
+{
+    Stack3DFixture() : StackFixture({ 3, 2, 3 }, { 3, 2, 3 }, 3 ) {}
+};
+
+BOOST_FIXTURE_TEST_CASE(Stack3D, Stack3DFixture)
+{
+
+    RunTest<4>({ { "input0", {  1, 2, 3,
+                                4, 5, 6,
+
+                                7, 8, 9,
+                                10, 11, 12,
+
+                                13, 14, 15,
+                                16, 17, 18 } },
+                 { "input1", {  19, 20, 21,
+                                22, 23, 24,
+
+                                25, 26, 27,
+                                28, 29, 30,
+
+                                31, 32, 33,
+                                34, 35, 36 } } },
+               { { "output", {  1, 19,
+                                2, 20,
+                                3, 21,
+
+                                4, 22,
+                                5, 23,
+                                6, 24,
+
+                                7, 25,
+                                8, 26,
+                                9, 27,
+
+                                10, 28,
+                                11, 29,
+                                12, 30,
+
+                                13, 31,
+                                14, 32,
+                                15, 33,
+
+                                16, 34,
+                                17, 35,
+                                18, 36 } } });
+}
+
+struct Stack3DNegativeAxisFixture : StackFixture
+{
+    Stack3DNegativeAxisFixture() : StackFixture({ 3, 2, 3 }, { 3, 2, 3 }, -1 ) {}
+};
+
+BOOST_FIXTURE_TEST_CASE(Stack3DNegativeAxis, Stack3DNegativeAxisFixture)
+{
+
+    RunTest<4>({ { "input0", {  1, 2, 3,
+                                4, 5, 6,
+
+                                7, 8, 9,
+                                10, 11, 12,
+
+                                13, 14, 15,
+                                16, 17, 18 } },
+                 { "input1", {  19, 20, 21,
+                                22, 23, 24,
+
+                                25, 26, 27,
+                                28, 29, 30,
+
+                                31, 32, 33,
+                                34, 35, 36 } } },
+               { { "output", {  1, 19,
+                                2, 20,
+                                3, 21,
+
+                                4, 22,
+                                5, 23,
+                                6, 24,
+
+                                7, 25,
+                                8, 26,
+                                9, 27,
+
+                                10, 28,
+                                11, 29,
+                                12, 30,
+
+                                13, 31,
+                                14, 32,
+                                15, 33,
+
+                                16, 34,
+                                17, 35,
+                                18, 36 } } });
+}
+
+BOOST_AUTO_TEST_SUITE_END()