2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
6 #include <boost/test/unit_test.hpp>
7 #include "ParserFlatbuffersFixture.hpp"
8 #include "../TfLiteParser.hpp"
13 BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
15 struct ConcatenationFixture : public ParserFlatbuffersFixture
17 explicit ConcatenationFixture(const std::string & inputShape1,
18 const std::string & inputShape2,
19 const std::string & outputShape,
20 const std::string & axis,
21 const std::string & activation="NONE")
26 "operator_codes": [ { "builtin_code": "CONCATENATION" } ],
30 "shape": )" + inputShape1 + R"(,
33 "name": "inputTensor1",
42 "shape": )" + inputShape2 + R"(,
45 "name": "inputTensor2",
54 "shape": )" + outputShape + R"( ,
57 "name": "outputTensor",
73 "builtin_options_type": "ConcatenationOptions",
75 "axis": )" + axis + R"(,
76 "fused_activation_function": )" + activation + R"(
78 "custom_options_format": "FLEXBUFFERS"
93 struct ConcatenationFixtureNegativeDim : ConcatenationFixture
95 ConcatenationFixtureNegativeDim() : ConcatenationFixture("[ 1, 1, 2, 2 ]",
101 BOOST_FIXTURE_TEST_CASE(ParseConcatenationNegativeDim, ConcatenationFixtureNegativeDim)
103 RunTest<4, armnn::DataType::QuantisedAsymm8>(
105 {{"inputTensor1", { 0, 1, 2, 3 }},
106 {"inputTensor2", { 4, 5, 6, 7 }}},
107 {{"outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7 }}});
110 struct ConcatenationFixtureNCHW : ConcatenationFixture
112 ConcatenationFixtureNCHW() : ConcatenationFixture("[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 2 ]", "[ 1, 2, 2, 2 ]", "1" ) {}
115 BOOST_FIXTURE_TEST_CASE(ParseConcatenationNCHW, ConcatenationFixtureNCHW)
117 RunTest<4, armnn::DataType::QuantisedAsymm8>(
119 {{"inputTensor1", { 0, 1, 2, 3 }},
120 {"inputTensor2", { 4, 5, 6, 7 }}},
121 {{"outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7 }}});
124 struct ConcatenationFixtureNHWC : ConcatenationFixture
126 ConcatenationFixtureNHWC() : ConcatenationFixture("[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 4 ]", "3" ) {}
129 BOOST_FIXTURE_TEST_CASE(ParseConcatenationNHWC, ConcatenationFixtureNHWC)
131 RunTest<4, armnn::DataType::QuantisedAsymm8>(
133 {{"inputTensor1", { 0, 1, 2, 3 }},
134 {"inputTensor2", { 4, 5, 6, 7 }}},
135 {{"outputTensor", { 0, 1, 4, 5, 2, 3, 6, 7 }}});
138 struct ConcatenationFixtureDim1 : ConcatenationFixture
140 ConcatenationFixtureDim1() : ConcatenationFixture("[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 4 ]", "[ 1, 4, 3, 4 ]", "1" ) {}
143 BOOST_FIXTURE_TEST_CASE(ParseConcatenationDim1, ConcatenationFixtureDim1)
145 RunTest<4, armnn::DataType::QuantisedAsymm8>(
147 { { "inputTensor1", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
148 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 } },
149 { "inputTensor2", { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
150 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 } } },
151 { { "outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
152 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
153 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
154 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 } } });
157 struct ConcatenationFixtureDim3 : ConcatenationFixture
159 ConcatenationFixtureDim3() : ConcatenationFixture("[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 8 ]", "3" ) {}
162 BOOST_FIXTURE_TEST_CASE(ParseConcatenationDim3, ConcatenationFixtureDim3)
164 RunTest<4, armnn::DataType::QuantisedAsymm8>(
166 { { "inputTensor1", { 0, 1, 2, 3,
172 { "inputTensor2", { 50, 51, 52, 53,
177 70, 71, 72, 73 } } },
178 { { "outputTensor", { 0, 1, 2, 3,
189 70, 71, 72, 73 } } });
192 BOOST_AUTO_TEST_SUITE_END()