blob: 5f23799fd690f133645e23f593b1bf6e3b0ef23d [file] [log] [blame]
Nina Drozd0324f482019-04-08 10:52:10 +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 SplitFixture : public ParserFlatbuffersFixture
16{
Narumol Prangnawarat17660e62019-04-18 16:56:19 +010017 explicit SplitFixture(const std::string& inputShape,
18 const std::string& axisShape,
19 const std::string& numSplits,
20 const std::string& outputShape1,
21 const std::string& outputShape2,
Francis Murtagh98d6b3d2019-10-21 10:52:54 +010022 const std::string& axisData,
23 const std::string& dataType)
Nina Drozd0324f482019-04-08 10:52:10 +010024 {
25 m_JsonString = R"(
26 {
27 "version": 3,
28 "operator_codes": [ { "builtin_code": "SPLIT" } ],
29 "subgraphs": [ {
30 "tensors": [
31 {
32 "shape": )" + inputShape + R"(,
Francis Murtagh98d6b3d2019-10-21 10:52:54 +010033 "type": )" + dataType + R"(,
Nina Drozd0324f482019-04-08 10:52:10 +010034 "buffer": 0,
35 "name": "inputTensor",
36 "quantization": {
37 "min": [ 0.0 ],
38 "max": [ 255.0 ],
39 "scale": [ 1.0 ],
40 "zero_point": [ 0 ],
41 }
42 },
43 {
44 "shape": )" + axisShape + R"(,
45 "type": "INT32",
46 "buffer": 1,
47 "name": "axis",
48 "quantization": {
49 "min": [ 0.0 ],
50 "max": [ 255.0 ],
51 "scale": [ 1.0 ],
52 "zero_point": [ 0 ],
53 }
54 },
55 {
56 "shape": )" + outputShape1 + R"( ,
Francis Murtagh98d6b3d2019-10-21 10:52:54 +010057 "type":)" + dataType + R"(,
Nina Drozd0324f482019-04-08 10:52:10 +010058 "buffer": 2,
59 "name": "outputTensor1",
60 "quantization": {
61 "min": [ 0.0 ],
62 "max": [ 255.0 ],
63 "scale": [ 1.0 ],
64 "zero_point": [ 0 ],
65 }
66 },
67 {
68 "shape": )" + outputShape2 + R"( ,
Francis Murtagh98d6b3d2019-10-21 10:52:54 +010069 "type":)" + dataType + R"(,
Nina Drozd0324f482019-04-08 10:52:10 +010070 "buffer": 3,
71 "name": "outputTensor2",
72 "quantization": {
73 "min": [ 0.0 ],
74 "max": [ 255.0 ],
75 "scale": [ 1.0 ],
76 "zero_point": [ 0 ],
77 }
78 }
79 ],
Narumol Prangnawarat17660e62019-04-18 16:56:19 +010080 "inputs": [ 0 ],
Nina Drozd0324f482019-04-08 10:52:10 +010081 "outputs": [ 2, 3 ],
82 "operators": [
83 {
84 "opcode_index": 0,
Narumol Prangnawarat17660e62019-04-18 16:56:19 +010085 "inputs": [ 1, 0 ],
Nina Drozd0324f482019-04-08 10:52:10 +010086 "outputs": [ 2, 3 ],
87 "builtin_options_type": "SplitOptions",
88 "builtin_options": {
89 "num_splits": )" + numSplits + R"(
90 },
91 "custom_options_format": "FLEXBUFFERS"
92 }
93 ],
94 } ],
Narumol Prangnawarat17660e62019-04-18 16:56:19 +010095 "buffers" : [ {}, {"data": )" + axisData + R"( }, {}, {} ]
Nina Drozd0324f482019-04-08 10:52:10 +010096 }
97 )";
98
99 Setup();
100 }
101};
102
103
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100104struct SimpleSplitFixtureFloat32 : SplitFixture
Nina Drozd0324f482019-04-08 10:52:10 +0100105{
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100106 SimpleSplitFixtureFloat32()
107 : SplitFixture( "[ 2, 2, 2, 2 ]", "[ ]", "2", "[ 2, 1, 2, 2 ]", "[ 2, 1, 2, 2 ]", "[ 1, 0, 0, 0 ]", "FLOAT32")
108 {}
Nina Drozd0324f482019-04-08 10:52:10 +0100109};
110
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100111BOOST_FIXTURE_TEST_CASE(ParseAxisOneSplitTwoFloat32, SimpleSplitFixtureFloat32)
Nina Drozd0324f482019-04-08 10:52:10 +0100112{
113
114 RunTest<4, armnn::DataType::Float32>(
115 0,
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100116 { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
117 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f } } },
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100118 { {"outputTensor1", { 1.0f, 2.0f, 3.0f, 4.0f, 9.0f, 10.0f, 11.0f, 12.0f } },
119 {"outputTensor2", { 5.0f, 6.0f, 7.0f, 8.0f, 13.0f, 14.0f, 15.0f, 16.0f } } });
Nina Drozd0324f482019-04-08 10:52:10 +0100120}
121
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100122struct SimpleSplitAxisThreeFixtureFloat32 : SplitFixture
Nina Drozd0324f482019-04-08 10:52:10 +0100123{
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100124 SimpleSplitAxisThreeFixtureFloat32()
125 : SplitFixture( "[ 2, 2, 2, 2 ]", "[ ]", "2", "[ 2, 2, 2, 1 ]", "[ 2, 2, 2, 1 ]", "[ 3, 0, 0, 0 ]", "FLOAT32")
126 {}
Nina Drozd0324f482019-04-08 10:52:10 +0100127};
128
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100129BOOST_FIXTURE_TEST_CASE(ParseAxisThreeSplitTwoFloat32, SimpleSplitAxisThreeFixtureFloat32)
Nina Drozd0324f482019-04-08 10:52:10 +0100130{
131 RunTest<4, armnn::DataType::Float32>(
132 0,
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100133 { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
134 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f } } },
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100135 { {"outputTensor1", { 1.0f, 3.0f, 5.0f, 7.0f, 9.0f, 11.0f, 13.0f, 15.0f } },
Nina Drozd0324f482019-04-08 10:52:10 +0100136 {"outputTensor2", { 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 12.0f, 14.0f, 16.0f } } } );
137}
138
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100139struct SimpleSplit2DFixtureFloat32 : SplitFixture
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100140{
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100141 SimpleSplit2DFixtureFloat32()
142 : SplitFixture( "[ 1, 8 ]", "[ ]", "2", "[ 1, 4 ]", "[ 1, 4 ]", "[ 1, 0, 0, 0 ]", "FLOAT32")
143 {}
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100144};
145
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100146BOOST_FIXTURE_TEST_CASE(SimpleSplit2DFloat32, SimpleSplit2DFixtureFloat32)
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100147{
148 RunTest<2, armnn::DataType::Float32>(
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100149 0,
150 { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f } } },
151 { {"outputTensor1", { 1.0f, 2.0f, 3.0f, 4.0f } },
152 {"outputTensor2", { 5.0f, 6.0f, 7.0f, 8.0f } } } );
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100153}
154
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100155struct SimpleSplit3DFixtureFloat32 : SplitFixture
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100156{
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100157 SimpleSplit3DFixtureFloat32()
158 : SplitFixture( "[ 1, 8, 2 ]", "[ ]", "2", "[ 1, 4, 2 ]", "[ 1, 4, 2 ]", "[ 1, 0, 0, 0 ]", "FLOAT32")
159 {}
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100160};
161
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100162BOOST_FIXTURE_TEST_CASE(SimpleSplit3DFloat32, SimpleSplit3DFixtureFloat32)
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100163{
164 RunTest<3, armnn::DataType::Float32>(
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100165 0,
166 { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
167 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f } } },
168 { {"outputTensor1", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f } },
169 {"outputTensor2", { 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f } } } );
170}
171
172struct SimpleSplitFixtureUint8 : SplitFixture
173{
174 SimpleSplitFixtureUint8()
175 : SplitFixture( "[ 2, 2, 2, 2 ]", "[ ]", "2", "[ 2, 1, 2, 2 ]", "[ 2, 1, 2, 2 ]", "[ 1, 0, 0, 0 ]", "UINT8")
176 {}
177};
178
179BOOST_FIXTURE_TEST_CASE(ParseAxisOneSplitTwoUint8, SimpleSplitFixtureUint8)
180{
181
Derek Lambertif90c56d2020-01-10 17:14:08 +0000182 RunTest<4, armnn::DataType::QAsymmU8>(
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100183 0,
184 { {"inputTensor", { 1, 2, 3, 4, 5, 6, 7, 8,
185 9, 10, 11, 12, 13, 14, 15, 16 } } },
186 { {"outputTensor1", { 1, 2, 3, 4, 9, 10, 11, 12 } },
187 {"outputTensor2", { 5, 6, 7, 8, 13, 14, 15, 16 } } });
188}
189
190struct SimpleSplitAxisThreeFixtureUint8 : SplitFixture
191{
192 SimpleSplitAxisThreeFixtureUint8()
193 : SplitFixture( "[ 2, 2, 2, 2 ]", "[ ]", "2", "[ 2, 2, 2, 1 ]", "[ 2, 2, 2, 1 ]", "[ 3, 0, 0, 0 ]", "UINT8")
194 {}
195};
196
197BOOST_FIXTURE_TEST_CASE(ParseAxisThreeSplitTwoUint8, SimpleSplitAxisThreeFixtureUint8)
198{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000199 RunTest<4, armnn::DataType::QAsymmU8>(
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100200 0,
201 { {"inputTensor", { 1, 2, 3, 4, 5, 6, 7, 8,
202 9, 10, 11, 12, 13, 14, 15, 16 } } },
203 { {"outputTensor1", { 1, 3, 5, 7, 9, 11, 13, 15 } },
204 {"outputTensor2", { 2, 4, 6, 8, 10, 12, 14, 16 } } } );
205}
206
207struct SimpleSplit2DFixtureUint8 : SplitFixture
208{
209 SimpleSplit2DFixtureUint8()
210 : SplitFixture( "[ 1, 8 ]", "[ ]", "2", "[ 1, 4 ]", "[ 1, 4 ]", "[ 1, 0, 0, 0 ]", "UINT8")
211 {}
212};
213
214BOOST_FIXTURE_TEST_CASE(SimpleSplit2DUint8, SimpleSplit2DFixtureUint8)
215{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000216 RunTest<2, armnn::DataType::QAsymmU8>(
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100217 0,
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100218 { {"inputTensor", { 1, 2, 3, 4, 5, 6, 7, 8 } } },
219 { {"outputTensor1", { 1, 2, 3, 4 } },
220 {"outputTensor2", { 5, 6, 7, 8 } } } );
221}
222
223struct SimpleSplit3DFixtureUint8 : SplitFixture
224{
225 SimpleSplit3DFixtureUint8()
226 : SplitFixture( "[ 1, 8, 2 ]", "[ ]", "2", "[ 1, 4, 2 ]", "[ 1, 4, 2 ]", "[ 1, 0, 0, 0 ]", "UINT8")
227 {}
228};
229
230BOOST_FIXTURE_TEST_CASE(SimpleSplit3DUint8, SimpleSplit3DFixtureUint8)
231{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000232 RunTest<3, armnn::DataType::QAsymmU8>(
Francis Murtagh98d6b3d2019-10-21 10:52:54 +0100233 0,
234 { {"inputTensor", { 1, 2, 3, 4, 5, 6, 7, 8,
235 9, 10, 11, 12, 13, 14, 15, 16 } } },
236 { {"outputTensor1", { 1, 2, 3, 4, 5, 6, 7, 8 } },
237 {"outputTensor2", { 9, 10, 11, 12, 13, 14, 15, 16 } } } );
Narumol Prangnawarat17660e62019-04-18 16:56:19 +0100238}
239
Nina Drozd0324f482019-04-08 10:52:10 +0100240BOOST_AUTO_TEST_SUITE_END()