• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <boost/test/unit_test.hpp>
7 #include "ParserFlatbuffersFixture.hpp"
8 #include "../TfLiteParser.hpp"
9 
10 #include <string>
11 #include <iostream>
12 
13 BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
14 
15 struct ConcatenationFixture : public ParserFlatbuffersFixture
16 {
ConcatenationFixtureConcatenationFixture17     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")
22     {
23         m_JsonString = R"(
24             {
25                 "version": 3,
26                 "operator_codes": [ { "builtin_code": "CONCATENATION" } ],
27                 "subgraphs": [ {
28                     "tensors": [
29                         {
30                             "shape": )" + inputShape1 + R"(,
31                             "type": "UINT8",
32                             "buffer": 0,
33                             "name": "inputTensor1",
34                             "quantization": {
35                                 "min": [ 0.0 ],
36                                 "max": [ 255.0 ],
37                                 "scale": [ 1.0 ],
38                                 "zero_point": [ 0 ],
39                             }
40                         },
41                         {
42                             "shape": )" + inputShape2 + R"(,
43                             "type": "UINT8",
44                             "buffer": 1,
45                             "name": "inputTensor2",
46                             "quantization": {
47                                 "min": [ 0.0 ],
48                                 "max": [ 255.0 ],
49                                 "scale": [ 1.0 ],
50                                 "zero_point": [ 0 ],
51                             }
52                         },
53                         {
54                             "shape": )" + outputShape + R"( ,
55                             "type": "UINT8",
56                             "buffer": 2,
57                             "name": "outputTensor",
58                             "quantization": {
59                                 "min": [ 0.0 ],
60                                 "max": [ 255.0 ],
61                                 "scale": [ 1.0 ],
62                                 "zero_point": [ 0 ],
63                             }
64                         }
65                     ],
66                     "inputs": [ 0, 1 ],
67                     "outputs": [ 2 ],
68                     "operators": [
69                         {
70                             "opcode_index": 0,
71                             "inputs": [ 0, 1 ],
72                             "outputs": [ 2 ],
73                             "builtin_options_type": "ConcatenationOptions",
74                             "builtin_options": {
75                                 "axis": )" + axis + R"(,
76                                 "fused_activation_function": )" + activation + R"(
77                             },
78                             "custom_options_format": "FLEXBUFFERS"
79                         }
80                     ],
81                 } ],
82                 "buffers" : [
83                     { },
84                     { }
85                 ]
86             }
87         )";
88         Setup();
89     }
90 };
91 
92 
93 struct ConcatenationFixtureNegativeDim : ConcatenationFixture
94 {
ConcatenationFixtureNegativeDimConcatenationFixtureNegativeDim95     ConcatenationFixtureNegativeDim() : ConcatenationFixture("[ 1, 1, 2, 2 ]",
96                                                              "[ 1, 1, 2, 2 ]",
97                                                              "[ 1, 2, 2, 2 ]",
98                                                              "-3" ) {}
99 };
100 
BOOST_FIXTURE_TEST_CASE(ParseConcatenationNegativeDim,ConcatenationFixtureNegativeDim)101 BOOST_FIXTURE_TEST_CASE(ParseConcatenationNegativeDim, ConcatenationFixtureNegativeDim)
102 {
103     RunTest<4, armnn::DataType::QAsymmU8>(
104         0,
105         {{"inputTensor1", { 0, 1, 2, 3 }},
106         {"inputTensor2", { 4, 5, 6, 7 }}},
107         {{"outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7 }}});
108 }
109 
110 struct ConcatenationFixtureNCHW : ConcatenationFixture
111 {
ConcatenationFixtureNCHWConcatenationFixtureNCHW112     ConcatenationFixtureNCHW() : ConcatenationFixture("[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 2 ]", "[ 1, 2, 2, 2 ]", "1" ) {}
113 };
114 
BOOST_FIXTURE_TEST_CASE(ParseConcatenationNCHW,ConcatenationFixtureNCHW)115 BOOST_FIXTURE_TEST_CASE(ParseConcatenationNCHW, ConcatenationFixtureNCHW)
116 {
117     RunTest<4, armnn::DataType::QAsymmU8>(
118         0,
119         {{"inputTensor1", { 0, 1, 2, 3 }},
120         {"inputTensor2", { 4, 5, 6, 7 }}},
121         {{"outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7 }}});
122 }
123 
124 struct ConcatenationFixtureNHWC : ConcatenationFixture
125 {
ConcatenationFixtureNHWCConcatenationFixtureNHWC126     ConcatenationFixtureNHWC() : ConcatenationFixture("[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 4 ]", "3" ) {}
127 };
128 
BOOST_FIXTURE_TEST_CASE(ParseConcatenationNHWC,ConcatenationFixtureNHWC)129 BOOST_FIXTURE_TEST_CASE(ParseConcatenationNHWC, ConcatenationFixtureNHWC)
130 {
131     RunTest<4, armnn::DataType::QAsymmU8>(
132         0,
133         {{"inputTensor1", { 0, 1, 2, 3 }},
134         {"inputTensor2", { 4, 5, 6, 7 }}},
135         {{"outputTensor", { 0, 1, 4, 5, 2, 3, 6, 7 }}});
136 }
137 
138 struct ConcatenationFixtureDim1 : ConcatenationFixture
139 {
ConcatenationFixtureDim1ConcatenationFixtureDim1140     ConcatenationFixtureDim1() : ConcatenationFixture("[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 4 ]", "[ 1, 4, 3, 4 ]", "1" ) {}
141 };
142 
BOOST_FIXTURE_TEST_CASE(ParseConcatenationDim1,ConcatenationFixtureDim1)143 BOOST_FIXTURE_TEST_CASE(ParseConcatenationDim1, ConcatenationFixtureDim1)
144 {
145     RunTest<4, armnn::DataType::QAsymmU8>(
146         0,
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 } } });
155 }
156 
157 struct ConcatenationFixtureDim3 : ConcatenationFixture
158 {
ConcatenationFixtureDim3ConcatenationFixtureDim3159     ConcatenationFixtureDim3() : ConcatenationFixture("[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 8 ]", "3" ) {}
160 };
161 
BOOST_FIXTURE_TEST_CASE(ParseConcatenationDim3,ConcatenationFixtureDim3)162 BOOST_FIXTURE_TEST_CASE(ParseConcatenationDim3, ConcatenationFixtureDim3)
163 {
164     RunTest<4, armnn::DataType::QAsymmU8>(
165         0,
166         { { "inputTensor1", {  0,  1,  2,  3,
167                                4,  5,  6,  7,
168                                8,  9, 10, 11,
169                                12, 13, 14, 15,
170                                16, 17, 18, 19,
171                                20, 21, 22, 23 } },
172         { "inputTensor2", {  50, 51, 52, 53,
173                              54, 55, 56, 57,
174                              58, 59, 60, 61,
175                              62, 63, 64, 65,
176                              66, 67, 68, 69,
177                              70, 71, 72, 73 } } },
178         { { "outputTensor", {  0,  1,  2,  3,
179                                50, 51, 52, 53,
180                                4,  5,  6,  7,
181                                54, 55, 56, 57,
182                                8,  9,  10, 11,
183                                58, 59, 60, 61,
184                                12, 13, 14, 15,
185                                62, 63, 64, 65,
186                                16, 17, 18, 19,
187                                66, 67, 68, 69,
188                                20, 21, 22, 23,
189                                70, 71, 72, 73 } } });
190 }
191 
192 struct ConcatenationFixture3DDim0 : ConcatenationFixture
193 {
ConcatenationFixture3DDim0ConcatenationFixture3DDim0194     ConcatenationFixture3DDim0() : ConcatenationFixture("[ 1, 2, 3]", "[ 2, 2, 3]", "[ 3, 2, 3]", "0" ) {}
195 };
196 
BOOST_FIXTURE_TEST_CASE(ParseConcatenation3DDim0,ConcatenationFixture3DDim0)197 BOOST_FIXTURE_TEST_CASE(ParseConcatenation3DDim0, ConcatenationFixture3DDim0)
198 {
199     RunTest<3, armnn::DataType::QAsymmU8>(
200         0,
201         { { "inputTensor1", { 0,  1,  2,  3,  4,  5 } },
202           { "inputTensor2", { 6,  7,  8,  9, 10, 11,
203                              12, 13, 14, 15, 16, 17 } } },
204         { { "outputTensor", { 0,  1,  2,  3,  4,  5,
205                               6,  7,  8,  9, 10, 11,
206                              12, 13, 14, 15, 16, 17 } } });
207 }
208 
209 struct ConcatenationFixture3DDim1 : ConcatenationFixture
210 {
ConcatenationFixture3DDim1ConcatenationFixture3DDim1211     ConcatenationFixture3DDim1() : ConcatenationFixture("[ 1, 2, 3]", "[ 1, 4, 3]", "[ 1, 6, 3]", "1" ) {}
212 };
213 
BOOST_FIXTURE_TEST_CASE(ParseConcatenation3DDim1,ConcatenationFixture3DDim1)214 BOOST_FIXTURE_TEST_CASE(ParseConcatenation3DDim1, ConcatenationFixture3DDim1)
215 {
216     RunTest<3, armnn::DataType::QAsymmU8>(
217         0,
218         { { "inputTensor1", { 0,  1,  2,  3,  4,  5 } },
219           { "inputTensor2", { 6,  7,  8,  9, 10, 11,
220                              12, 13, 14, 15, 16, 17 } } },
221         { { "outputTensor", { 0,  1,  2,  3,  4,  5,
222                               6,  7,  8,  9, 10, 11,
223                              12, 13, 14, 15, 16, 17 } } });
224 }
225 
226 struct ConcatenationFixture3DDim2 : ConcatenationFixture
227 {
ConcatenationFixture3DDim2ConcatenationFixture3DDim2228     ConcatenationFixture3DDim2() : ConcatenationFixture("[ 1, 2, 3]", "[ 1, 2, 6]", "[ 1, 2, 9]", "2" ) {}
229 };
230 
BOOST_FIXTURE_TEST_CASE(ParseConcatenation3DDim2,ConcatenationFixture3DDim2)231 BOOST_FIXTURE_TEST_CASE(ParseConcatenation3DDim2, ConcatenationFixture3DDim2)
232 {
233     RunTest<3, armnn::DataType::QAsymmU8>(
234         0,
235         { { "inputTensor1", { 0,  1,  2,
236                               3,  4,  5 } },
237           { "inputTensor2", { 6,  7,  8,  9, 10, 11,
238                              12, 13, 14, 15, 16, 17 } } },
239         { { "outputTensor", { 0,  1,  2,  6,  7,  8,  9, 10, 11,
240                               3,  4,  5, 12, 13, 14, 15, 16, 17 } } });
241 }
242 
243 BOOST_AUTO_TEST_SUITE_END()
244