xref: /aosp_15_r20/external/armnn/src/armnnOnnxParser/test/Addition.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. 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 "armnnOnnxParser/IOnnxParser.hpp"
7*89c4ff92SAndroid Build Coastguard Worker #include  "ParserPrototxtFixture.hpp"
8*89c4ff92SAndroid Build Coastguard Worker 
9*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("OnnxParser_Addition")
10*89c4ff92SAndroid Build Coastguard Worker {
11*89c4ff92SAndroid Build Coastguard Worker struct AddMainFixture : public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser>
12*89c4ff92SAndroid Build Coastguard Worker {
AddMainFixtureAddMainFixture13*89c4ff92SAndroid Build Coastguard Worker     AddMainFixture(const std::string& dataType)
14*89c4ff92SAndroid Build Coastguard Worker     {
15*89c4ff92SAndroid Build Coastguard Worker         m_Prototext = R"(
16*89c4ff92SAndroid Build Coastguard Worker                    ir_version: 3
17*89c4ff92SAndroid Build Coastguard Worker                    producer_name:  "CNTK"
18*89c4ff92SAndroid Build Coastguard Worker                    producer_version:  "2.5.1"
19*89c4ff92SAndroid Build Coastguard Worker                    domain:  "ai.cntk"
20*89c4ff92SAndroid Build Coastguard Worker                    model_version: 1
21*89c4ff92SAndroid Build Coastguard Worker                    graph {
22*89c4ff92SAndroid Build Coastguard Worker                      name:  "CNTKGraph"
23*89c4ff92SAndroid Build Coastguard Worker                      input {
24*89c4ff92SAndroid Build Coastguard Worker                         name: "Input0"
25*89c4ff92SAndroid Build Coastguard Worker                         type {
26*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
27*89c4ff92SAndroid Build Coastguard Worker                             elem_type: )" + dataType + R"(
28*89c4ff92SAndroid Build Coastguard Worker                             shape {
29*89c4ff92SAndroid Build Coastguard Worker                               dim {
30*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
31*89c4ff92SAndroid Build Coastguard Worker                               }
32*89c4ff92SAndroid Build Coastguard Worker                               dim {
33*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
34*89c4ff92SAndroid Build Coastguard Worker                               }
35*89c4ff92SAndroid Build Coastguard Worker                               dim {
36*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
37*89c4ff92SAndroid Build Coastguard Worker                               }
38*89c4ff92SAndroid Build Coastguard Worker                               dim {
39*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
40*89c4ff92SAndroid Build Coastguard Worker                               }
41*89c4ff92SAndroid Build Coastguard Worker                             }
42*89c4ff92SAndroid Build Coastguard Worker                           }
43*89c4ff92SAndroid Build Coastguard Worker                         }
44*89c4ff92SAndroid Build Coastguard Worker                       }
45*89c4ff92SAndroid Build Coastguard Worker                       input {
46*89c4ff92SAndroid Build Coastguard Worker                          name: "Input1"
47*89c4ff92SAndroid Build Coastguard Worker                          type {
48*89c4ff92SAndroid Build Coastguard Worker                            tensor_type {
49*89c4ff92SAndroid Build Coastguard Worker                              elem_type: )" + dataType + R"(
50*89c4ff92SAndroid Build Coastguard Worker                              shape {
51*89c4ff92SAndroid Build Coastguard Worker                                dim {
52*89c4ff92SAndroid Build Coastguard Worker                                  dim_value: 1
53*89c4ff92SAndroid Build Coastguard Worker                                }
54*89c4ff92SAndroid Build Coastguard Worker                                dim {
55*89c4ff92SAndroid Build Coastguard Worker                                  dim_value: 1
56*89c4ff92SAndroid Build Coastguard Worker                                }
57*89c4ff92SAndroid Build Coastguard Worker                                dim {
58*89c4ff92SAndroid Build Coastguard Worker                                  dim_value: 2
59*89c4ff92SAndroid Build Coastguard Worker                                }
60*89c4ff92SAndroid Build Coastguard Worker                                dim {
61*89c4ff92SAndroid Build Coastguard Worker                                  dim_value: 2
62*89c4ff92SAndroid Build Coastguard Worker                                }
63*89c4ff92SAndroid Build Coastguard Worker                              }
64*89c4ff92SAndroid Build Coastguard Worker                            }
65*89c4ff92SAndroid Build Coastguard Worker                          }
66*89c4ff92SAndroid Build Coastguard Worker                        }
67*89c4ff92SAndroid Build Coastguard Worker                        node {
68*89c4ff92SAndroid Build Coastguard Worker                             input: "Input0"
69*89c4ff92SAndroid Build Coastguard Worker                             input: "Input1"
70*89c4ff92SAndroid Build Coastguard Worker                             output: "Output"
71*89c4ff92SAndroid Build Coastguard Worker                             name: "addition"
72*89c4ff92SAndroid Build Coastguard Worker                             op_type: "Add"
73*89c4ff92SAndroid Build Coastguard Worker                             doc_string: ""
74*89c4ff92SAndroid Build Coastguard Worker                             domain: ""
75*89c4ff92SAndroid Build Coastguard Worker                           }
76*89c4ff92SAndroid Build Coastguard Worker                           output {
77*89c4ff92SAndroid Build Coastguard Worker                               name: "Output"
78*89c4ff92SAndroid Build Coastguard Worker                               type {
79*89c4ff92SAndroid Build Coastguard Worker                                  tensor_type {
80*89c4ff92SAndroid Build Coastguard Worker                                    elem_type: 1
81*89c4ff92SAndroid Build Coastguard Worker                                    shape {
82*89c4ff92SAndroid Build Coastguard Worker                                        dim {
83*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
84*89c4ff92SAndroid Build Coastguard Worker                                        }
85*89c4ff92SAndroid Build Coastguard Worker                                        dim {
86*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
87*89c4ff92SAndroid Build Coastguard Worker                                        }
88*89c4ff92SAndroid Build Coastguard Worker                                        dim {
89*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 2
90*89c4ff92SAndroid Build Coastguard Worker                                        }
91*89c4ff92SAndroid Build Coastguard Worker                                        dim {
92*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 2
93*89c4ff92SAndroid Build Coastguard Worker                                        }
94*89c4ff92SAndroid Build Coastguard Worker                                    }
95*89c4ff92SAndroid Build Coastguard Worker                                 }
96*89c4ff92SAndroid Build Coastguard Worker                             }
97*89c4ff92SAndroid Build Coastguard Worker                         }
98*89c4ff92SAndroid Build Coastguard Worker                     }
99*89c4ff92SAndroid Build Coastguard Worker                    opset_import {
100*89c4ff92SAndroid Build Coastguard Worker                       version: 7
101*89c4ff92SAndroid Build Coastguard Worker                     })";
102*89c4ff92SAndroid Build Coastguard Worker     }
103*89c4ff92SAndroid Build Coastguard Worker };
104*89c4ff92SAndroid Build Coastguard Worker 
105*89c4ff92SAndroid Build Coastguard Worker struct AddValidFixture : AddMainFixture
106*89c4ff92SAndroid Build Coastguard Worker {
AddValidFixtureAddValidFixture107*89c4ff92SAndroid Build Coastguard Worker     AddValidFixture() : AddMainFixture("1") {
108*89c4ff92SAndroid Build Coastguard Worker         Setup();
109*89c4ff92SAndroid Build Coastguard Worker     }
110*89c4ff92SAndroid Build Coastguard Worker };
111*89c4ff92SAndroid Build Coastguard Worker 
112*89c4ff92SAndroid Build Coastguard Worker struct AddInvalidFixture : AddMainFixture
113*89c4ff92SAndroid Build Coastguard Worker {
AddInvalidFixtureAddInvalidFixture114*89c4ff92SAndroid Build Coastguard Worker     AddInvalidFixture() : AddMainFixture("6") { }
115*89c4ff92SAndroid Build Coastguard Worker };
116*89c4ff92SAndroid Build Coastguard Worker 
117*89c4ff92SAndroid Build Coastguard Worker struct AddValidBroadcastFixture : public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser>
118*89c4ff92SAndroid Build Coastguard Worker {
AddValidBroadcastFixtureAddValidBroadcastFixture119*89c4ff92SAndroid Build Coastguard Worker     AddValidBroadcastFixture() {
120*89c4ff92SAndroid Build Coastguard Worker 
121*89c4ff92SAndroid Build Coastguard Worker         m_Prototext = R"(
122*89c4ff92SAndroid Build Coastguard Worker                    ir_version: 3
123*89c4ff92SAndroid Build Coastguard Worker                    producer_name:  "CNTK"
124*89c4ff92SAndroid Build Coastguard Worker                    producer_version:  "2.5.1"
125*89c4ff92SAndroid Build Coastguard Worker                    domain:  "ai.cntk"
126*89c4ff92SAndroid Build Coastguard Worker                    model_version: 1
127*89c4ff92SAndroid Build Coastguard Worker                    graph {
128*89c4ff92SAndroid Build Coastguard Worker                      name:  "CNTKGraph"
129*89c4ff92SAndroid Build Coastguard Worker                      input {
130*89c4ff92SAndroid Build Coastguard Worker                         name: "Input0"
131*89c4ff92SAndroid Build Coastguard Worker                         type {
132*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
133*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
134*89c4ff92SAndroid Build Coastguard Worker                             shape {
135*89c4ff92SAndroid Build Coastguard Worker                               dim {
136*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
137*89c4ff92SAndroid Build Coastguard Worker                               }
138*89c4ff92SAndroid Build Coastguard Worker                               dim {
139*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
140*89c4ff92SAndroid Build Coastguard Worker                               }
141*89c4ff92SAndroid Build Coastguard Worker                               dim {
142*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
143*89c4ff92SAndroid Build Coastguard Worker                               }
144*89c4ff92SAndroid Build Coastguard Worker                               dim {
145*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 4
146*89c4ff92SAndroid Build Coastguard Worker                               }
147*89c4ff92SAndroid Build Coastguard Worker                             }
148*89c4ff92SAndroid Build Coastguard Worker                           }
149*89c4ff92SAndroid Build Coastguard Worker                         }
150*89c4ff92SAndroid Build Coastguard Worker                       }
151*89c4ff92SAndroid Build Coastguard Worker                       input {
152*89c4ff92SAndroid Build Coastguard Worker                          name: "Input1"
153*89c4ff92SAndroid Build Coastguard Worker                          type {
154*89c4ff92SAndroid Build Coastguard Worker                            tensor_type {
155*89c4ff92SAndroid Build Coastguard Worker                              elem_type: 1
156*89c4ff92SAndroid Build Coastguard Worker                              shape {
157*89c4ff92SAndroid Build Coastguard Worker                                  dim {
158*89c4ff92SAndroid Build Coastguard Worker                                    dim_value: 4
159*89c4ff92SAndroid Build Coastguard Worker                                  }
160*89c4ff92SAndroid Build Coastguard Worker                              }
161*89c4ff92SAndroid Build Coastguard Worker                            }
162*89c4ff92SAndroid Build Coastguard Worker                          }
163*89c4ff92SAndroid Build Coastguard Worker                        }
164*89c4ff92SAndroid Build Coastguard Worker                        node {
165*89c4ff92SAndroid Build Coastguard Worker                             input: "Input0"
166*89c4ff92SAndroid Build Coastguard Worker                             input: "Input1"
167*89c4ff92SAndroid Build Coastguard Worker                             output: "Output"
168*89c4ff92SAndroid Build Coastguard Worker                             name: "addition"
169*89c4ff92SAndroid Build Coastguard Worker                             op_type: "Add"
170*89c4ff92SAndroid Build Coastguard Worker                             doc_string: ""
171*89c4ff92SAndroid Build Coastguard Worker                             domain: ""
172*89c4ff92SAndroid Build Coastguard Worker                           }
173*89c4ff92SAndroid Build Coastguard Worker                           output {
174*89c4ff92SAndroid Build Coastguard Worker                               name: "Output"
175*89c4ff92SAndroid Build Coastguard Worker                               type {
176*89c4ff92SAndroid Build Coastguard Worker                                  tensor_type {
177*89c4ff92SAndroid Build Coastguard Worker                                    elem_type: 1
178*89c4ff92SAndroid Build Coastguard Worker                                    shape {
179*89c4ff92SAndroid Build Coastguard Worker                                        dim {
180*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
181*89c4ff92SAndroid Build Coastguard Worker                                        }
182*89c4ff92SAndroid Build Coastguard Worker                                        dim {
183*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
184*89c4ff92SAndroid Build Coastguard Worker                                        }
185*89c4ff92SAndroid Build Coastguard Worker                                        dim {
186*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
187*89c4ff92SAndroid Build Coastguard Worker                                        }
188*89c4ff92SAndroid Build Coastguard Worker                                        dim {
189*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 4
190*89c4ff92SAndroid Build Coastguard Worker                                        }
191*89c4ff92SAndroid Build Coastguard Worker                                    }
192*89c4ff92SAndroid Build Coastguard Worker                                 }
193*89c4ff92SAndroid Build Coastguard Worker                             }
194*89c4ff92SAndroid Build Coastguard Worker                         }
195*89c4ff92SAndroid Build Coastguard Worker                     }
196*89c4ff92SAndroid Build Coastguard Worker                    opset_import {
197*89c4ff92SAndroid Build Coastguard Worker                       version: 7
198*89c4ff92SAndroid Build Coastguard Worker                     })";
199*89c4ff92SAndroid Build Coastguard Worker         Setup();
200*89c4ff92SAndroid Build Coastguard Worker     }
201*89c4ff92SAndroid Build Coastguard Worker };
202*89c4ff92SAndroid Build Coastguard Worker 
203*89c4ff92SAndroid Build Coastguard Worker struct AddInvalidBroadcastFixture : public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser>
204*89c4ff92SAndroid Build Coastguard Worker {
AddInvalidBroadcastFixtureAddInvalidBroadcastFixture205*89c4ff92SAndroid Build Coastguard Worker     AddInvalidBroadcastFixture() {
206*89c4ff92SAndroid Build Coastguard Worker 
207*89c4ff92SAndroid Build Coastguard Worker         m_Prototext = R"(
208*89c4ff92SAndroid Build Coastguard Worker                    ir_version: 3
209*89c4ff92SAndroid Build Coastguard Worker                    producer_name:  "CNTK"
210*89c4ff92SAndroid Build Coastguard Worker                    producer_version:  "2.5.1"
211*89c4ff92SAndroid Build Coastguard Worker                    domain:  "ai.cntk"
212*89c4ff92SAndroid Build Coastguard Worker                    model_version: 1
213*89c4ff92SAndroid Build Coastguard Worker                    graph {
214*89c4ff92SAndroid Build Coastguard Worker                      name:  "CNTKGraph"
215*89c4ff92SAndroid Build Coastguard Worker                      input {
216*89c4ff92SAndroid Build Coastguard Worker                         name: "Input0"
217*89c4ff92SAndroid Build Coastguard Worker                         type {
218*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
219*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
220*89c4ff92SAndroid Build Coastguard Worker                             shape {
221*89c4ff92SAndroid Build Coastguard Worker                               dim {
222*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
223*89c4ff92SAndroid Build Coastguard Worker                               }
224*89c4ff92SAndroid Build Coastguard Worker                               dim {
225*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
226*89c4ff92SAndroid Build Coastguard Worker                               }
227*89c4ff92SAndroid Build Coastguard Worker                               dim {
228*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
229*89c4ff92SAndroid Build Coastguard Worker                               }
230*89c4ff92SAndroid Build Coastguard Worker                               dim {
231*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
232*89c4ff92SAndroid Build Coastguard Worker                               }
233*89c4ff92SAndroid Build Coastguard Worker                             }
234*89c4ff92SAndroid Build Coastguard Worker                           }
235*89c4ff92SAndroid Build Coastguard Worker                         }
236*89c4ff92SAndroid Build Coastguard Worker                       }
237*89c4ff92SAndroid Build Coastguard Worker                       input {
238*89c4ff92SAndroid Build Coastguard Worker                          name: "Input1"
239*89c4ff92SAndroid Build Coastguard Worker                          type {
240*89c4ff92SAndroid Build Coastguard Worker                            tensor_type {
241*89c4ff92SAndroid Build Coastguard Worker                              elem_type: 1
242*89c4ff92SAndroid Build Coastguard Worker                              shape {
243*89c4ff92SAndroid Build Coastguard Worker                                  dim {
244*89c4ff92SAndroid Build Coastguard Worker                                    dim_value: 4
245*89c4ff92SAndroid Build Coastguard Worker                                  }
246*89c4ff92SAndroid Build Coastguard Worker                              }
247*89c4ff92SAndroid Build Coastguard Worker                            }
248*89c4ff92SAndroid Build Coastguard Worker                          }
249*89c4ff92SAndroid Build Coastguard Worker                        }
250*89c4ff92SAndroid Build Coastguard Worker                        node {
251*89c4ff92SAndroid Build Coastguard Worker                             input: "Input0"
252*89c4ff92SAndroid Build Coastguard Worker                             input: "Input1"
253*89c4ff92SAndroid Build Coastguard Worker                             output: "Output"
254*89c4ff92SAndroid Build Coastguard Worker                             name: "addition"
255*89c4ff92SAndroid Build Coastguard Worker                             op_type: "Add"
256*89c4ff92SAndroid Build Coastguard Worker                             doc_string: ""
257*89c4ff92SAndroid Build Coastguard Worker                             domain: ""
258*89c4ff92SAndroid Build Coastguard Worker                           }
259*89c4ff92SAndroid Build Coastguard Worker                           output {
260*89c4ff92SAndroid Build Coastguard Worker                               name: "Output"
261*89c4ff92SAndroid Build Coastguard Worker                               type {
262*89c4ff92SAndroid Build Coastguard Worker                                  tensor_type {
263*89c4ff92SAndroid Build Coastguard Worker                                    elem_type: 1
264*89c4ff92SAndroid Build Coastguard Worker                                    shape {
265*89c4ff92SAndroid Build Coastguard Worker                                        dim {
266*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
267*89c4ff92SAndroid Build Coastguard Worker                                        }
268*89c4ff92SAndroid Build Coastguard Worker                                        dim {
269*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
270*89c4ff92SAndroid Build Coastguard Worker                                        }
271*89c4ff92SAndroid Build Coastguard Worker                                        dim {
272*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
273*89c4ff92SAndroid Build Coastguard Worker                                        }
274*89c4ff92SAndroid Build Coastguard Worker                                        dim {
275*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 4
276*89c4ff92SAndroid Build Coastguard Worker                                        }
277*89c4ff92SAndroid Build Coastguard Worker                                    }
278*89c4ff92SAndroid Build Coastguard Worker                                 }
279*89c4ff92SAndroid Build Coastguard Worker                             }
280*89c4ff92SAndroid Build Coastguard Worker                         }
281*89c4ff92SAndroid Build Coastguard Worker                     }
282*89c4ff92SAndroid Build Coastguard Worker                    opset_import {
283*89c4ff92SAndroid Build Coastguard Worker                       version: 7
284*89c4ff92SAndroid Build Coastguard Worker                     })";
285*89c4ff92SAndroid Build Coastguard Worker     }
286*89c4ff92SAndroid Build Coastguard Worker };
287*89c4ff92SAndroid Build Coastguard Worker 
288*89c4ff92SAndroid Build Coastguard Worker struct AddScalarFixture : public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser>
289*89c4ff92SAndroid Build Coastguard Worker {
AddScalarFixtureAddScalarFixture290*89c4ff92SAndroid Build Coastguard Worker     AddScalarFixture(const std::string& dataType)
291*89c4ff92SAndroid Build Coastguard Worker     {
292*89c4ff92SAndroid Build Coastguard Worker         m_Prototext = R"(
293*89c4ff92SAndroid Build Coastguard Worker                    ir_version: 3
294*89c4ff92SAndroid Build Coastguard Worker                    producer_name:  "CNTK"
295*89c4ff92SAndroid Build Coastguard Worker                    producer_version:  "2.5.1"
296*89c4ff92SAndroid Build Coastguard Worker                    domain:  "ai.cntk"
297*89c4ff92SAndroid Build Coastguard Worker                    model_version: 1
298*89c4ff92SAndroid Build Coastguard Worker                    graph {
299*89c4ff92SAndroid Build Coastguard Worker                      name:  "CNTKGraph"
300*89c4ff92SAndroid Build Coastguard Worker                      input {
301*89c4ff92SAndroid Build Coastguard Worker                         name: "Input0"
302*89c4ff92SAndroid Build Coastguard Worker                         type {
303*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
304*89c4ff92SAndroid Build Coastguard Worker                             elem_type: )" + dataType + R"(
305*89c4ff92SAndroid Build Coastguard Worker                             shape {
306*89c4ff92SAndroid Build Coastguard Worker                               dim {
307*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
308*89c4ff92SAndroid Build Coastguard Worker                               }
309*89c4ff92SAndroid Build Coastguard Worker                               dim {
310*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
311*89c4ff92SAndroid Build Coastguard Worker                               }
312*89c4ff92SAndroid Build Coastguard Worker                               dim {
313*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
314*89c4ff92SAndroid Build Coastguard Worker                               }
315*89c4ff92SAndroid Build Coastguard Worker                               dim {
316*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
317*89c4ff92SAndroid Build Coastguard Worker                               }
318*89c4ff92SAndroid Build Coastguard Worker                             }
319*89c4ff92SAndroid Build Coastguard Worker                           }
320*89c4ff92SAndroid Build Coastguard Worker                         }
321*89c4ff92SAndroid Build Coastguard Worker                       }
322*89c4ff92SAndroid Build Coastguard Worker                       input {
323*89c4ff92SAndroid Build Coastguard Worker                          name: "Input1"
324*89c4ff92SAndroid Build Coastguard Worker                          type {
325*89c4ff92SAndroid Build Coastguard Worker                            tensor_type {
326*89c4ff92SAndroid Build Coastguard Worker                              elem_type: )" + dataType + R"(
327*89c4ff92SAndroid Build Coastguard Worker                              shape {
328*89c4ff92SAndroid Build Coastguard Worker                                dim {
329*89c4ff92SAndroid Build Coastguard Worker                                  dim_value: 1
330*89c4ff92SAndroid Build Coastguard Worker                                }
331*89c4ff92SAndroid Build Coastguard Worker                              }
332*89c4ff92SAndroid Build Coastguard Worker                            }
333*89c4ff92SAndroid Build Coastguard Worker                          }
334*89c4ff92SAndroid Build Coastguard Worker                        }
335*89c4ff92SAndroid Build Coastguard Worker                        node {
336*89c4ff92SAndroid Build Coastguard Worker                             input: "Input0"
337*89c4ff92SAndroid Build Coastguard Worker                             input: "Input1"
338*89c4ff92SAndroid Build Coastguard Worker                             output: "Output"
339*89c4ff92SAndroid Build Coastguard Worker                             name: "addition"
340*89c4ff92SAndroid Build Coastguard Worker                             op_type: "Add"
341*89c4ff92SAndroid Build Coastguard Worker                             doc_string: ""
342*89c4ff92SAndroid Build Coastguard Worker                             domain: ""
343*89c4ff92SAndroid Build Coastguard Worker                           }
344*89c4ff92SAndroid Build Coastguard Worker                           output {
345*89c4ff92SAndroid Build Coastguard Worker                               name: "Output"
346*89c4ff92SAndroid Build Coastguard Worker                               type {
347*89c4ff92SAndroid Build Coastguard Worker                                  tensor_type {
348*89c4ff92SAndroid Build Coastguard Worker                                    elem_type: 1
349*89c4ff92SAndroid Build Coastguard Worker                                    shape {
350*89c4ff92SAndroid Build Coastguard Worker                                        dim {
351*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
352*89c4ff92SAndroid Build Coastguard Worker                                        }
353*89c4ff92SAndroid Build Coastguard Worker                                        dim {
354*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 1
355*89c4ff92SAndroid Build Coastguard Worker                                        }
356*89c4ff92SAndroid Build Coastguard Worker                                        dim {
357*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 2
358*89c4ff92SAndroid Build Coastguard Worker                                        }
359*89c4ff92SAndroid Build Coastguard Worker                                        dim {
360*89c4ff92SAndroid Build Coastguard Worker                                            dim_value: 2
361*89c4ff92SAndroid Build Coastguard Worker                                        }
362*89c4ff92SAndroid Build Coastguard Worker                                    }
363*89c4ff92SAndroid Build Coastguard Worker                                 }
364*89c4ff92SAndroid Build Coastguard Worker                             }
365*89c4ff92SAndroid Build Coastguard Worker                         }
366*89c4ff92SAndroid Build Coastguard Worker                     }
367*89c4ff92SAndroid Build Coastguard Worker                    opset_import {
368*89c4ff92SAndroid Build Coastguard Worker                       version: 7
369*89c4ff92SAndroid Build Coastguard Worker                     })";
370*89c4ff92SAndroid Build Coastguard Worker     }
371*89c4ff92SAndroid Build Coastguard Worker };
372*89c4ff92SAndroid Build Coastguard Worker 
373*89c4ff92SAndroid Build Coastguard Worker struct AddValidScalarFixture : AddScalarFixture
374*89c4ff92SAndroid Build Coastguard Worker {
AddValidScalarFixtureAddValidScalarFixture375*89c4ff92SAndroid Build Coastguard Worker     AddValidScalarFixture() : AddScalarFixture("1") {
376*89c4ff92SAndroid Build Coastguard Worker         Setup();
377*89c4ff92SAndroid Build Coastguard Worker     }
378*89c4ff92SAndroid Build Coastguard Worker };
379*89c4ff92SAndroid Build Coastguard Worker 
380*89c4ff92SAndroid Build Coastguard Worker struct AddInvalidScalarFixture : AddScalarFixture
381*89c4ff92SAndroid Build Coastguard Worker {
AddInvalidScalarFixtureAddInvalidScalarFixture382*89c4ff92SAndroid Build Coastguard Worker     AddInvalidScalarFixture() : AddScalarFixture("6") { }
383*89c4ff92SAndroid Build Coastguard Worker };
384*89c4ff92SAndroid Build Coastguard Worker 
385*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(AddValidFixture, "ValidAddTest")
386*89c4ff92SAndroid Build Coastguard Worker {
387*89c4ff92SAndroid Build Coastguard Worker     RunTest<4>({{"Input0", {1.0f, 2.0f, -3.0f, -4.0f}},
388*89c4ff92SAndroid Build Coastguard Worker                 {"Input1", {1.0f, 2.0f, 3.0, 4.0f}}}, {{"Output", {2.0, 4.0, 0, 0.0}}});
389*89c4ff92SAndroid Build Coastguard Worker }
390*89c4ff92SAndroid Build Coastguard Worker 
391*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(AddInvalidFixture, "IncorrectDataTypeAdd")
392*89c4ff92SAndroid Build Coastguard Worker {
393*89c4ff92SAndroid Build Coastguard Worker    CHECK_THROWS_AS(Setup(), armnn::ParseException);
394*89c4ff92SAndroid Build Coastguard Worker }
395*89c4ff92SAndroid Build Coastguard Worker 
396*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(AddInvalidBroadcastFixture, "InvalidBroadcastAdd")
397*89c4ff92SAndroid Build Coastguard Worker {
398*89c4ff92SAndroid Build Coastguard Worker    CHECK_THROWS_AS(Setup(), armnn::ParseException);
399*89c4ff92SAndroid Build Coastguard Worker }
400*89c4ff92SAndroid Build Coastguard Worker 
401*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(AddValidBroadcastFixture, "ValidBroadcastAdd")
402*89c4ff92SAndroid Build Coastguard Worker {
403*89c4ff92SAndroid Build Coastguard Worker     RunTest<4>({{"Input0", {1.0f, 2.0f, -3.0f, -4.0f}},
404*89c4ff92SAndroid Build Coastguard Worker                 {"Input1", {1.0f, 2.0f, 3.0, 4.0f}}}, {{"Output", {2.0, 4.0, 0, 0.0}}});
405*89c4ff92SAndroid Build Coastguard Worker }
406*89c4ff92SAndroid Build Coastguard Worker 
407*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(AddValidScalarFixture, "ValidAddScalarTest")
408*89c4ff92SAndroid Build Coastguard Worker {
409*89c4ff92SAndroid Build Coastguard Worker     RunTest<4>({{"Input0", {1.0f, 2.0f, -3.0f, -4.0f}},
410*89c4ff92SAndroid Build Coastguard Worker                 {"Input1", {-8.0f}}}, {{"Output", {-7.0, -6.0, -11.0, -12.0}}});
411*89c4ff92SAndroid Build Coastguard Worker }
412*89c4ff92SAndroid Build Coastguard Worker 
413*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(AddInvalidScalarFixture, "IncorrectDataTypeAddScalar")
414*89c4ff92SAndroid Build Coastguard Worker {
415*89c4ff92SAndroid Build Coastguard Worker     CHECK_THROWS_AS(Setup(), armnn::ParseException);
416*89c4ff92SAndroid Build Coastguard Worker }
417*89c4ff92SAndroid Build Coastguard Worker 
418*89c4ff92SAndroid Build Coastguard Worker }