xref: /aosp_15_r20/external/armnn/src/armnnTfLiteParser/test/ReshapeDynamic.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "ParserFlatbuffersFixture.hpp"
7 
8 
9 TEST_SUITE("TensorflowLiteParser_Reshape_Dynamic")
10 {
11 struct ReshapeDynamicFixture1 : public ParserFlatbuffersFixture
12 {
ReshapeDynamicFixture1ReshapeDynamicFixture113     explicit ReshapeDynamicFixture1()
14     {
15         m_JsonString = R"(
16 {
17   "version": 3,
18   "operator_codes": [
19     {
20       "deprecated_builtin_code": 77,
21       "version": 1,
22       "builtin_code": "ADD"
23     },
24     {
25       "deprecated_builtin_code": 22,
26       "version": 1,
27       "builtin_code": "ADD"
28     }
29   ],
30   "subgraphs": [
31     {
32       "tensors": [
33         {
34           "shape": [
35             2,
36             5
37           ],
38           "type": "FLOAT32",
39           "buffer": 1,
40           "name": "input_33",
41           "quantization": {
42             "details_type": "NONE",
43             "quantized_dimension": 0
44           },
45           "is_variable": false,
46           "shape_signature": [
47             -1,
48             10
49           ]
50         },
51         {
52           "shape": [
53             2
54           ],
55           "type": "INT32",
56           "buffer": 2,
57           "name": "functional_15/tf_op_layer_Shape_9/Shape_9",
58           "quantization": {
59             "details_type": "NONE",
60             "quantized_dimension": 0
61           },
62           "is_variable": false
63         },
64         {
65           "shape": [
66             2,
67             5
68           ],
69           "type": "FLOAT32",
70           "buffer": 3,
71           "name": "Identity",
72           "quantization": {
73             "details_type": "NONE",
74             "quantized_dimension": 0
75           },
76           "is_variable": false,
77           "shape_signature": [
78             -1,
79             5
80           ]
81         }
82       ],
83       "inputs": [
84         0
85       ],
86       "outputs": [
87         2
88       ],
89       "operators": [
90         {
91           "opcode_index": 0,
92           "inputs": [
93             0
94           ],
95           "outputs": [
96             1
97           ],
98           "builtin_options_type": "ShapeOptions",
99           "builtin_options": {
100             "out_type": "INT32"
101           },
102           "custom_options_format": "FLEXBUFFERS"
103         },
104         {
105           "opcode_index": 1,
106           "inputs": [
107             0,
108             1
109           ],
110           "outputs": [
111             2
112           ],
113           "builtin_options_type": "NONE",
114           "custom_options_format": "FLEXBUFFERS"
115         }
116       ],
117       "name": "main"
118     }
119   ],
120   "description": "MLIR Converted.",
121   "buffers": [
122     {
123     },
124     {
125     },
126     {
127     },
128     {
129     },
130     {
131       "data": [
132         49,
133         46,
134         49,
135         48,
136         46,
137         48,
138         0,
139         0,
140         0,
141         0,
142         0,
143         0,
144         0,
145         0,
146         0,
147         0
148       ]
149     }
150   ],
151   "metadata": [
152     {
153       "name": "min_runtime_version",
154       "buffer": 4
155     }
156   ]
157 }
158 )";
159 
160     }
161 };
162 
163 // ParseReshape test case: reshapeShapes[0] == 2
164 TEST_CASE_FIXTURE(ReshapeDynamicFixture1, "ParseReshapeDynamic1")
165 {
166     SetupSingleInputSingleOutput("input_33", "Identity");
167     RunTest<2, armnn::DataType::Float32>(0,
168                                          { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
169                                          { 1, 2, 3, 4, 5,
170                                            6, 7, 8, 9, 10 });
171 
172     CHECK((m_Parser->GetNetworkOutputBindingInfo(0, "Identity").second.GetShape()
173         == armnn::TensorShape({2,5})));
174 }
175 
176 struct ReshapeDynamicFixture2 : public ParserFlatbuffersFixture
177 {
ReshapeDynamicFixture2ReshapeDynamicFixture2178     explicit ReshapeDynamicFixture2()
179     {
180         m_JsonString = R"(
181 {
182   "version": 3,
183   "operator_codes": [
184     {
185       "deprecated_builtin_code": 77,
186       "version": 1,
187       "builtin_code": "ADD"
188     },
189     {
190       "deprecated_builtin_code": 22,
191       "version": 1,
192       "builtin_code": "ADD"
193     }
194   ],
195   "subgraphs": [
196     {
197       "tensors": [
198         {
199           "shape": [
200             -1,
201             10
202           ],
203           "type": "FLOAT32",
204           "buffer": 1,
205           "name": "input_33",
206           "quantization": {
207             "details_type": "NONE",
208             "quantized_dimension": 0
209           },
210           "is_variable": false,
211           "shape_signature": [
212             2,
213             5
214           ]
215         },
216         {
217           "shape": [
218             1
219           ],
220           "type": "INT32",
221           "buffer": 2,
222           "name": "functional_15/tf_op_layer_Shape_9/Shape_9",
223           "quantization": {
224             "details_type": "NONE",
225             "quantized_dimension": 0
226           },
227           "is_variable": false
228         },
229         {
230           "shape": [
231             10
232           ],
233           "type": "FLOAT32",
234           "buffer": 3,
235           "name": "Identity",
236           "quantization": {
237             "details_type": "NONE",
238             "quantized_dimension": 0
239           },
240           "is_variable": false,
241           "shape_signature": [
242             -1,
243             10
244           ]
245         }
246       ],
247       "inputs": [
248         0
249       ],
250       "outputs": [
251         2
252       ],
253       "operators": [
254         {
255           "opcode_index": 0,
256           "inputs": [
257             0
258           ],
259           "outputs": [
260             1
261           ],
262           "builtin_options_type": "ShapeOptions",
263           "builtin_options": {
264             "out_type": "INT32"
265           },
266           "custom_options_format": "FLEXBUFFERS"
267         },
268         {
269           "opcode_index": 1,
270           "inputs": [
271             0,
272             1
273           ],
274           "outputs": [
275             2
276           ],
277           "builtin_options_type": "NONE",
278           "custom_options_format": "FLEXBUFFERS"
279         }
280       ],
281       "name": "main"
282     }
283   ],
284   "description": "MLIR Converted.",
285   "buffers": [
286     {
287     },
288     {
289     },
290     {
291     },
292     {
293     },
294     {
295       "data": [
296         49,
297         46,
298         49,
299         48,
300         46,
301         48,
302         0,
303         0,
304         0,
305         0,
306         0,
307         0,
308         0,
309         0,
310         0,
311         0
312       ]
313     }
314   ],
315   "metadata": [
316     {
317       "name": "min_runtime_version",
318       "buffer": 4
319     }
320   ]
321 }
322 )";
323 
324     }
325 };
326 
327 // ParseReshape test case: reshapeShapes[0] == 1
328 TEST_CASE_FIXTURE(ReshapeDynamicFixture2, "ParseReshapeDynamic2")
329 {
330     SetupSingleInputSingleOutput("input_33", "Identity");
331     RunTest<1, armnn::DataType::Float32>(0,
332                                          { 1, 2, 3, 4, 5,
333                                            6, 7, 8, 9, 10 },
334                                          { 1, 2, 3, 4, 5, 6, 7, 8 ,9, 10 });
335     CHECK((m_Parser->GetNetworkOutputBindingInfo(0, "Identity").second.GetShape()
336         == armnn::TensorShape({10})));
337 }
338 
339 struct ReshapeDynamicFixture3 : public ParserFlatbuffersFixture
340 {
ReshapeDynamicFixture3ReshapeDynamicFixture3341     explicit ReshapeDynamicFixture3()
342     {
343         m_JsonString = R"(
344 {
345   "version": 3,
346   "operator_codes": [
347     {
348       "deprecated_builtin_code": 77,
349       "version": 1,
350       "builtin_code": "ADD"
351     },
352     {
353       "deprecated_builtin_code": 22,
354       "version": 1,
355       "builtin_code": "ADD"
356     }
357   ],
358   "subgraphs": [
359     {
360       "tensors": [
361         {
362           "shape": [
363             1,
364             9
365           ],
366           "type": "FLOAT32",
367           "buffer": 1,
368           "name": "input_33",
369           "quantization": {
370             "details_type": "NONE",
371             "quantized_dimension": 0
372           },
373           "is_variable": false,
374           "shape_signature": [
375             -1,
376             9
377           ]
378         },
379         {
380           "shape": [
381             3
382           ],
383           "type": "INT32",
384           "buffer": 2,
385           "name": "functional_15/tf_op_layer_Shape_9/Shape_9",
386           "quantization": {
387             "details_type": "NONE",
388             "quantized_dimension": 0
389           },
390           "is_variable": false
391         },
392         {
393           "shape": [
394             1,
395             9
396           ],
397           "type": "FLOAT32",
398           "buffer": 3,
399           "name": "Identity",
400           "quantization": {
401             "details_type": "NONE",
402             "quantized_dimension": 0
403           },
404           "is_variable": false,
405           "shape_signature": [
406             -1,
407             9
408           ]
409         }
410       ],
411       "inputs": [
412         0
413       ],
414       "outputs": [
415         2
416       ],
417       "operators": [
418         {
419           "opcode_index": 0,
420           "inputs": [
421             0
422           ],
423           "outputs": [
424             1
425           ],
426           "builtin_options_type": "ShapeOptions",
427           "builtin_options": {
428             "out_type": "INT32"
429           },
430           "custom_options_format": "FLEXBUFFERS"
431         },
432         {
433           "opcode_index": 1,
434           "inputs": [
435             0,
436             1
437           ],
438           "outputs": [
439             2
440           ],
441           "builtin_options_type": "NONE",
442           "custom_options_format": "FLEXBUFFERS"
443         }
444       ],
445       "name": "main"
446     }
447   ],
448   "description": "MLIR Converted.",
449   "buffers": [
450     {
451     },
452     {
453     },
454     {
455     },
456     {
457     },
458     {
459       "data": [
460         49,
461         46,
462         49,
463         48,
464         46,
465         48,
466         0,
467         0,
468         0,
469         0,
470         0,
471         0,
472         0,
473         0,
474         0,
475         0
476       ]
477     }
478   ],
479   "metadata": [
480     {
481       "name": "min_runtime_version",
482       "buffer": 4
483     }
484   ]
485 }
486 )";
487 
488     }
489 };
490 
491 // ParseReshape test case: reshapeShapes[0] > 2
492 TEST_CASE_FIXTURE(ReshapeDynamicFixture3, "ParseReshapeDynamic3")
493 {
494     CHECK_THROWS_AS(SetupSingleInputSingleOutput("input_33", "Identity"), armnn::ParseException);
495 }
496 
497 }
498