blob: 8629efe3d763c27fc6b1e6bf2916dea375d4f740 [file] [log] [blame]
Sadik Armagan479045b2018-10-01 11:51:37 +01001//
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
13BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
14
15struct ConcatenationFixture : public ParserFlatbuffersFixture
16{
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")
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
93struct ConcatenationFixtureNegativeDim : ConcatenationFixture
94{
95 ConcatenationFixtureNegativeDim() : ConcatenationFixture("[ 1, 1, 2, 2 ]",
96 "[ 1, 1, 2, 2 ]",
97 "[ 1, 2, 2, 2 ]",
98 "-3" ) {}
99};
100
101BOOST_FIXTURE_TEST_CASE(ParseConcatenationNegativeDim, ConcatenationFixtureNegativeDim)
102{
103 RunTest<4, uint8_t>(0,
104 {{"inputTensor1", { 0, 1, 2, 3 }},
105 {"inputTensor2", { 4, 5, 6, 7 }}},
106 {{"outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7 }}});
107}
108
109struct ConcatenationFixtureNCHW : ConcatenationFixture
110{
111 ConcatenationFixtureNCHW() : ConcatenationFixture("[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 2 ]", "[ 1, 2, 2, 2 ]", "1" ) {}
112};
113
114BOOST_FIXTURE_TEST_CASE(ParseConcatenationNCHW, ConcatenationFixtureNCHW)
115{
116 RunTest<4, uint8_t>(0,
117 {{"inputTensor1", { 0, 1, 2, 3 }},
118 {"inputTensor2", { 4, 5, 6, 7 }}},
119 {{"outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7 }}});
120}
121
122struct ConcatenationFixtureNHWC : ConcatenationFixture
123{
124 ConcatenationFixtureNHWC() : ConcatenationFixture("[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 4 ]", "3" ) {}
125};
126
127BOOST_FIXTURE_TEST_CASE(ParseConcatenationNHWC, ConcatenationFixtureNHWC)
128{
129 RunTest<4, uint8_t>(0,
130 {{"inputTensor1", { 0, 1, 2, 3 }},
131 {"inputTensor2", { 4, 5, 6, 7 }}},
132 {{"outputTensor", { 0, 1, 4, 5, 2, 3, 6, 7 }}});
133}
134
135struct ConcatenationFixtureDim1 : ConcatenationFixture
136{
137 ConcatenationFixtureDim1() : ConcatenationFixture("[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 4 ]", "[ 1, 4, 3, 4 ]", "1" ) {}
138};
139
140BOOST_FIXTURE_TEST_CASE(ParseConcatenationDim1, ConcatenationFixtureDim1)
141{
142 RunTest<4, uint8_t>(0,
143 { { "inputTensor1", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
144 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 } },
145 { "inputTensor2", { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
146 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 } } },
147 { { "outputTensor", { 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 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}
152
153struct ConcatenationFixtureDim3 : ConcatenationFixture
154{
155 ConcatenationFixtureDim3() : ConcatenationFixture("[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 8 ]", "3" ) {}
156};
157
158BOOST_FIXTURE_TEST_CASE(ParseConcatenationDim3, ConcatenationFixtureDim3)
159{
160 RunTest<4, uint8_t>(0,
161 { { "inputTensor1", { 0, 1, 2, 3,
162 4, 5, 6, 7,
163 8, 9, 10, 11,
164 12, 13, 14, 15,
165 16, 17, 18, 19,
166 20, 21, 22, 23 } },
167 { "inputTensor2", { 50, 51, 52, 53,
168 54, 55, 56, 57,
169 58, 59, 60, 61,
170 62, 63, 64, 65,
171 66, 67, 68, 69,
172 70, 71, 72, 73 } } },
173 { { "outputTensor", { 0, 1, 2, 3,
174 50, 51, 52, 53,
175 4, 5, 6, 7,
176 54, 55, 56, 57,
177 8, 9, 10, 11,
178 58, 59, 60, 61,
179 12, 13, 14, 15,
180 62, 63, 64, 65,
181 16, 17, 18, 19,
182 66, 67, 68, 69,
183 20, 21, 22, 23,
184 70, 71, 72, 73 } } });
185}
186
187BOOST_AUTO_TEST_SUITE_END()