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