ArmNN
 21.02
Minimum.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <boost/test/unit_test.hpp>
8 #include "../TfLiteParser.hpp"
9 
10 #include <string>
11 #include <iostream>
12 
13 BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
14 
15 struct MinimumFixture : public ParserFlatbuffersFixture
16 {
17  explicit MinimumFixture(const std::string & inputShape1,
18  const std::string & inputShape2,
19  const std::string & outputShape)
20  {
21  m_JsonString = R"(
22  {
23  "version": 3,
24  "operator_codes": [ { "builtin_code": "MINIMUM" } ],
25  "subgraphs": [ {
26  "tensors": [
27  {
28  "shape": )" + inputShape1 + R"(,
29  "type": "FLOAT32",
30  "buffer": 0,
31  "name": "inputTensor1",
32  "quantization": {
33  "min": [ 0.0 ],
34  "max": [ 255.0 ],
35  "scale": [ 1.0 ],
36  "zero_point": [ 0 ],
37  }
38  },
39  {
40  "shape": )" + inputShape2 + R"(,
41  "type": "FLOAT32",
42  "buffer": 1,
43  "name": "inputTensor2",
44  "quantization": {
45  "min": [ 0.0 ],
46  "max": [ 255.0 ],
47  "scale": [ 1.0 ],
48  "zero_point": [ 0 ],
49  }
50  },
51  {
52  "shape": )" + outputShape + R"( ,
53  "type": "FLOAT32",
54  "buffer": 2,
55  "name": "outputTensor",
56  "quantization": {
57  "min": [ 0.0 ],
58  "max": [ 255.0 ],
59  "scale": [ 1.0 ],
60  "zero_point": [ 0 ],
61  }
62  }
63  ],
64  "inputs": [ 0, 1 ],
65  "outputs": [ 2 ],
66  "operators": [
67  {
68  "opcode_index": 0,
69  "inputs": [ 0, 1 ],
70  "outputs": [ 2 ],
71  "custom_options_format": "FLEXBUFFERS"
72  }
73  ],
74  } ],
75  "buffers" : [
76  { },
77  { }
78  ]
79  }
80  )";
81  Setup();
82  }
83 };
84 
85 
86 struct MinimumFixture4D : MinimumFixture
87 {
88  MinimumFixture4D() : MinimumFixture("[ 1, 2, 2, 3 ]",
89  "[ 1, 2, 2, 3 ]",
90  "[ 1, 2, 2, 3 ]") {}
91 };
92 
93 BOOST_FIXTURE_TEST_CASE(ParseMinimum4D, MinimumFixture4D)
94 {
95  RunTest<4, armnn::DataType::Float32>(
96  0,
97  {{"inputTensor1", { 0.0f, 1.0f, 2.0f,
98  3.0f, 4.0f, 5.0f,
99  6.0f, 7.0f, 8.0f,
100  9.0f, 10.0f, 11.0f }},
101  {"inputTensor2", { 0.0f, 0.0f, 0.0f,
102  5.0f, 5.0f, 5.0f,
103  7.0f, 7.0f, 7.0f,
104  9.0f, 9.0f, 9.0f }}},
105  {{"outputTensor", { 0.0f, 0.0f, 0.0f,
106  3.0f, 4.0f, 5.0f,
107  6.0f, 7.0f, 7.0f,
108  9.0f, 9.0f, 9.0f }}});
109 }
110 
111 struct MinimumBroadcastFixture4D : MinimumFixture
112 {
113  MinimumBroadcastFixture4D() : MinimumFixture("[ 1, 1, 2, 1 ]",
114  "[ 1, 2, 1, 3 ]",
115  "[ 1, 2, 2, 3 ]") {}
116 };
117 
118 BOOST_FIXTURE_TEST_CASE(ParseMinimumBroadcast4D, MinimumBroadcastFixture4D)
119 {
120  RunTest<4, armnn::DataType::Float32>(
121  0,
122  {{"inputTensor1", { 2.0f,
123  4.0f }},
124  {"inputTensor2", { 1.0f, 2.0f, 3.0f,
125  4.0f, 5.0f, 6.0f }}},
126  {{"outputTensor", { 1.0f, 2.0f, 2.0f,
127  1.0f, 2.0f, 3.0f,
128  2.0f, 2.0f, 2.0f,
129  4.0f, 4.0f, 4.0f }}});
130 }
131 
132 struct MinimumBroadcastFixture4D1D : MinimumFixture
133 {
134  MinimumBroadcastFixture4D1D() : MinimumFixture("[ 1, 2, 2, 3 ]",
135  "[ 1 ]",
136  "[ 1, 2, 2, 3 ]") {}
137 };
138 
139 BOOST_FIXTURE_TEST_CASE(ParseMinimumBroadcast4D1D, MinimumBroadcastFixture4D1D)
140 {
141  RunTest<4, armnn::DataType::Float32>(
142  0,
143  {{"inputTensor1", { 0.0f, 1.0f, 2.0f,
144  3.0f, 4.0f, 5.0f,
145  6.0f, 7.0f, 8.0f,
146  9.0f, 10.0f, 11.0f }},
147  {"inputTensor2", { 5.0f }}},
148  {{"outputTensor", { 0.0f, 1.0f, 2.0f,
149  3.0f, 4.0f, 5.0f,
150  5.0f, 5.0f, 5.0f,
151  5.0f, 5.0f, 5.0f }}});
152 }
153 
154 struct MinimumBroadcastFixture1D4D : MinimumFixture
155 {
156  MinimumBroadcastFixture1D4D() : MinimumFixture("[ 3 ]",
157  "[ 1, 2, 2, 3 ]",
158  "[ 1, 2, 2, 3 ]") {}
159 };
160 
161 BOOST_FIXTURE_TEST_CASE(ParseMinimumBroadcast1D4D, MinimumBroadcastFixture1D4D)
162 {
163  RunTest<4, armnn::DataType::Float32>(
164  0,
165  {{"inputTensor1", { 5.0f, 6.0f, 7.0f }},
166  {"inputTensor2", { 0.0f, 1.0f, 2.0f,
167  3.0f, 4.0f, 5.0f,
168  6.0f, 7.0f, 8.0f,
169  9.0f, 10.0f, 11.0f }}},
170  {{"outputTensor", { 0.0f, 1.0f, 2.0f,
171  3.0f, 4.0f, 5.0f,
172  5.0f, 6.0f, 7.0f,
173  5.0f, 6.0f, 7.0f }}});
174 }
175 
176 struct MinimumBroadcastFixture2D0D : public ParserFlatbuffersFixture
177 {
178  explicit MinimumBroadcastFixture2D0D()
179  {
180  m_JsonString = R"(
181  {
182  "version": 3,
183  "operator_codes": [ { "builtin_code": "MINIMUM" } ],
184  "subgraphs": [ {
185  "tensors": [
186  {
187  "shape": [ 1, 2 ],
188  "type": "FLOAT32",
189  "buffer": 0,
190  "name": "input0",
191  "quantization": {
192  "min": [ 0.0 ],
193  "max": [ 255.0 ],
194  "scale": [ 1.0 ],
195  "zero_point": [ 0 ],
196  }
197  },
198  {
199  "shape": [ ],
200  "type": "FLOAT32",
201  "buffer": 2,
202  "name": "input1",
203  "quantization": {
204  "min": [ 0.0 ],
205  "max": [ 255.0 ],
206  "scale": [ 1.0 ],
207  "zero_point": [ 0 ],
208  }
209  },
210  {
211  "shape": [ 1, 2 ] ,
212  "type": "FLOAT32",
213  "buffer": 1,
214  "name": "output",
215  "quantization": {
216  "min": [ 0.0 ],
217  "max": [ 255.0 ],
218  "scale": [ 1.0 ],
219  "zero_point": [ 0 ],
220  }
221  }
222  ],
223  "inputs": [ 0 ],
224  "outputs": [ 2 ],
225  "operators": [
226  {
227  "opcode_index": 0,
228  "inputs": [ 0, 1 ],
229  "outputs": [ 2 ],
230  "custom_options_format": "FLEXBUFFERS"
231  }
232  ],
233  } ],
234  "buffers" : [
235  { },
236  { },
237  { "data": [ 0, 0, 0, 64 ] }
238  ]
239  }
240  )";
241  Setup();
242  }
243 };
244 
245 BOOST_FIXTURE_TEST_CASE(ParseMinimumBroadcast2D0D, MinimumBroadcastFixture2D0D)
246 {
247  RunTest<2, armnn::DataType::Float32>(
248  0,
249  {{"input0", { 1.0f, 5.0f }}},
250  {{"output", { 1.0f, 2.0f }}});
251 }
252 
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
BOOST_FIXTURE_TEST_CASE(ParseMinimum4D, MinimumFixture4D)
Definition: Minimum.cpp:93
BOOST_AUTO_TEST_SUITE_END()