xref: /aosp_15_r20/external/armnn/src/armnnDeserializer/test/DeserializeAdd.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 "ParserFlatbuffersSerializeFixture.hpp"
7*89c4ff92SAndroid Build Coastguard Worker #include <armnnDeserializer/IDeserializer.hpp>
8*89c4ff92SAndroid Build Coastguard Worker 
9*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/IgnoreUnused.hpp>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h>
12*89c4ff92SAndroid Build Coastguard Worker 
13*89c4ff92SAndroid Build Coastguard Worker #include <string>
14*89c4ff92SAndroid Build Coastguard Worker 
15*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("Deserializer_Add")
16*89c4ff92SAndroid Build Coastguard Worker {
17*89c4ff92SAndroid Build Coastguard Worker struct AddFixture : public ParserFlatbuffersSerializeFixture
18*89c4ff92SAndroid Build Coastguard Worker {
AddFixtureAddFixture19*89c4ff92SAndroid Build Coastguard Worker     explicit AddFixture(const std::string & inputShape1,
20*89c4ff92SAndroid Build Coastguard Worker                         const std::string & inputShape2,
21*89c4ff92SAndroid Build Coastguard Worker                         const std::string & outputShape,
22*89c4ff92SAndroid Build Coastguard Worker                         const std::string & dataType,
23*89c4ff92SAndroid Build Coastguard Worker                         const std::string & activation="NONE")
24*89c4ff92SAndroid Build Coastguard Worker     {
25*89c4ff92SAndroid Build Coastguard Worker         armnn::IgnoreUnused(activation);
26*89c4ff92SAndroid Build Coastguard Worker         m_JsonString = R"(
27*89c4ff92SAndroid Build Coastguard Worker         {
28*89c4ff92SAndroid Build Coastguard Worker                 inputIds: [0, 1],
29*89c4ff92SAndroid Build Coastguard Worker                 outputIds: [3],
30*89c4ff92SAndroid Build Coastguard Worker                 layers: [
31*89c4ff92SAndroid Build Coastguard Worker                 {
32*89c4ff92SAndroid Build Coastguard Worker                     layer_type: "InputLayer",
33*89c4ff92SAndroid Build Coastguard Worker                     layer: {
34*89c4ff92SAndroid Build Coastguard Worker                           base: {
35*89c4ff92SAndroid Build Coastguard Worker                                 layerBindingId: 0,
36*89c4ff92SAndroid Build Coastguard Worker                                 base: {
37*89c4ff92SAndroid Build Coastguard Worker                                     index: 0,
38*89c4ff92SAndroid Build Coastguard Worker                                     layerName: "InputLayer1",
39*89c4ff92SAndroid Build Coastguard Worker                                     layerType: "Input",
40*89c4ff92SAndroid Build Coastguard Worker                                     inputSlots: [{
41*89c4ff92SAndroid Build Coastguard Worker                                         index: 0,
42*89c4ff92SAndroid Build Coastguard Worker                                         connection: {sourceLayerIndex:0, outputSlotIndex:0 },
43*89c4ff92SAndroid Build Coastguard Worker                                     }],
44*89c4ff92SAndroid Build Coastguard Worker                                     outputSlots: [ {
45*89c4ff92SAndroid Build Coastguard Worker                                         index: 0,
46*89c4ff92SAndroid Build Coastguard Worker                                         tensorInfo: {
47*89c4ff92SAndroid Build Coastguard Worker                                             dimensions: )" + inputShape1 + R"(,
48*89c4ff92SAndroid Build Coastguard Worker                                             dataType: )" + dataType + R"(
49*89c4ff92SAndroid Build Coastguard Worker                                         },
50*89c4ff92SAndroid Build Coastguard Worker                                     }],
51*89c4ff92SAndroid Build Coastguard Worker                                  },}},
52*89c4ff92SAndroid Build Coastguard Worker                 },
53*89c4ff92SAndroid Build Coastguard Worker                 {
54*89c4ff92SAndroid Build Coastguard Worker                 layer_type: "InputLayer",
55*89c4ff92SAndroid Build Coastguard Worker                 layer: {
56*89c4ff92SAndroid Build Coastguard Worker                        base: {
57*89c4ff92SAndroid Build Coastguard Worker                             layerBindingId: 1,
58*89c4ff92SAndroid Build Coastguard Worker                             base: {
59*89c4ff92SAndroid Build Coastguard Worker                                   index:1,
60*89c4ff92SAndroid Build Coastguard Worker                                   layerName: "InputLayer2",
61*89c4ff92SAndroid Build Coastguard Worker                                   layerType: "Input",
62*89c4ff92SAndroid Build Coastguard Worker                                   inputSlots: [{
63*89c4ff92SAndroid Build Coastguard Worker                                       index: 0,
64*89c4ff92SAndroid Build Coastguard Worker                                       connection: {sourceLayerIndex:0, outputSlotIndex:0 },
65*89c4ff92SAndroid Build Coastguard Worker                                   }],
66*89c4ff92SAndroid Build Coastguard Worker                                   outputSlots: [ {
67*89c4ff92SAndroid Build Coastguard Worker                                       index: 0,
68*89c4ff92SAndroid Build Coastguard Worker                                       tensorInfo: {
69*89c4ff92SAndroid Build Coastguard Worker                                           dimensions: )" + inputShape2 + R"(,
70*89c4ff92SAndroid Build Coastguard Worker                                           dataType: )" + dataType + R"(
71*89c4ff92SAndroid Build Coastguard Worker                                       },
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                 layer_type: "AdditionLayer",
77*89c4ff92SAndroid Build Coastguard Worker                 layer : {
78*89c4ff92SAndroid Build Coastguard Worker                         base: {
79*89c4ff92SAndroid Build Coastguard Worker                              index:2,
80*89c4ff92SAndroid Build Coastguard Worker                              layerName: "AdditionLayer",
81*89c4ff92SAndroid Build Coastguard Worker                              layerType: "Addition",
82*89c4ff92SAndroid Build Coastguard Worker                              inputSlots: [
83*89c4ff92SAndroid Build Coastguard Worker                                             {
84*89c4ff92SAndroid Build Coastguard Worker                                              index: 0,
85*89c4ff92SAndroid Build Coastguard Worker                                              connection: {sourceLayerIndex:0, outputSlotIndex:0 },
86*89c4ff92SAndroid Build Coastguard Worker                                             },
87*89c4ff92SAndroid Build Coastguard Worker                                             {
88*89c4ff92SAndroid Build Coastguard Worker                                              index: 1,
89*89c4ff92SAndroid Build Coastguard Worker                                              connection: {sourceLayerIndex:1, outputSlotIndex:0 },
90*89c4ff92SAndroid Build Coastguard Worker                                             }
91*89c4ff92SAndroid Build Coastguard Worker                              ],
92*89c4ff92SAndroid Build Coastguard Worker                              outputSlots: [ {
93*89c4ff92SAndroid Build Coastguard Worker                                  index: 0,
94*89c4ff92SAndroid Build Coastguard Worker                                  tensorInfo: {
95*89c4ff92SAndroid Build Coastguard Worker                                      dimensions: )" + outputShape + R"(,
96*89c4ff92SAndroid Build Coastguard Worker                                      dataType: )" + dataType + R"(
97*89c4ff92SAndroid Build Coastguard Worker                                  },
98*89c4ff92SAndroid Build Coastguard Worker                              }],
99*89c4ff92SAndroid Build Coastguard Worker                             }},
100*89c4ff92SAndroid Build Coastguard Worker                 },
101*89c4ff92SAndroid Build Coastguard Worker                 {
102*89c4ff92SAndroid Build Coastguard Worker                 layer_type: "OutputLayer",
103*89c4ff92SAndroid Build Coastguard Worker                 layer: {
104*89c4ff92SAndroid Build Coastguard Worker                         base:{
105*89c4ff92SAndroid Build Coastguard Worker                               layerBindingId: 0,
106*89c4ff92SAndroid Build Coastguard Worker                               base: {
107*89c4ff92SAndroid Build Coastguard Worker                                     index: 3,
108*89c4ff92SAndroid Build Coastguard Worker                                     layerName: "OutputLayer",
109*89c4ff92SAndroid Build Coastguard Worker                                     layerType: "Output",
110*89c4ff92SAndroid Build Coastguard Worker                                     inputSlots: [{
111*89c4ff92SAndroid Build Coastguard Worker                                         index: 0,
112*89c4ff92SAndroid Build Coastguard Worker                                         connection: {sourceLayerIndex:2, outputSlotIndex:0 },
113*89c4ff92SAndroid Build Coastguard Worker                                     }],
114*89c4ff92SAndroid Build Coastguard Worker                                     outputSlots: [ {
115*89c4ff92SAndroid Build Coastguard Worker                                         index: 0,
116*89c4ff92SAndroid Build Coastguard Worker                                         tensorInfo: {
117*89c4ff92SAndroid Build Coastguard Worker                                             dimensions: )" + outputShape + R"(,
118*89c4ff92SAndroid Build Coastguard Worker                                             dataType: )" + dataType + R"(
119*89c4ff92SAndroid Build Coastguard Worker                                         },
120*89c4ff92SAndroid Build Coastguard Worker                                 }],
121*89c4ff92SAndroid Build Coastguard Worker                             }}},
122*89c4ff92SAndroid Build Coastguard Worker                 }]
123*89c4ff92SAndroid Build Coastguard Worker          }
124*89c4ff92SAndroid Build Coastguard Worker         )";
125*89c4ff92SAndroid Build Coastguard Worker         Setup();
126*89c4ff92SAndroid Build Coastguard Worker     }
127*89c4ff92SAndroid Build Coastguard Worker };
128*89c4ff92SAndroid Build Coastguard Worker 
129*89c4ff92SAndroid Build Coastguard Worker 
130*89c4ff92SAndroid Build Coastguard Worker struct SimpleAddFixture : AddFixture
131*89c4ff92SAndroid Build Coastguard Worker {
SimpleAddFixtureSimpleAddFixture132*89c4ff92SAndroid Build Coastguard Worker     SimpleAddFixture() : AddFixture("[ 2, 2 ]",
133*89c4ff92SAndroid Build Coastguard Worker                                     "[ 2, 2 ]",
134*89c4ff92SAndroid Build Coastguard Worker                                     "[ 2, 2 ]",
135*89c4ff92SAndroid Build Coastguard Worker                                     "QuantisedAsymm8") {}
136*89c4ff92SAndroid Build Coastguard Worker };
137*89c4ff92SAndroid Build Coastguard Worker 
138*89c4ff92SAndroid Build Coastguard Worker struct SimpleAddFixture2 : AddFixture
139*89c4ff92SAndroid Build Coastguard Worker {
SimpleAddFixture2SimpleAddFixture2140*89c4ff92SAndroid Build Coastguard Worker     SimpleAddFixture2() : AddFixture("[ 2, 2, 1, 1 ]",
141*89c4ff92SAndroid Build Coastguard Worker                                      "[ 2, 2, 1, 1 ]",
142*89c4ff92SAndroid Build Coastguard Worker                                      "[ 2, 2, 1, 1 ]",
143*89c4ff92SAndroid Build Coastguard Worker                                      "Float32") {}
144*89c4ff92SAndroid Build Coastguard Worker };
145*89c4ff92SAndroid Build Coastguard Worker 
146*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleAddFixture, "AddQuantisedAsymm8")
147*89c4ff92SAndroid Build Coastguard Worker {
148*89c4ff92SAndroid Build Coastguard Worker   RunTest<2, armnn::DataType::QAsymmU8>(
149*89c4ff92SAndroid Build Coastguard Worker       0,
150*89c4ff92SAndroid Build Coastguard Worker       {{"InputLayer1", { 0, 1, 2, 3 }},
151*89c4ff92SAndroid Build Coastguard Worker       {"InputLayer2", { 4, 5, 6, 7 }}},
152*89c4ff92SAndroid Build Coastguard Worker       {{"OutputLayer", { 4, 6, 8, 10 }}});
153*89c4ff92SAndroid Build Coastguard Worker }
154*89c4ff92SAndroid Build Coastguard Worker 
155*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleAddFixture2, "AddFloat32")
156*89c4ff92SAndroid Build Coastguard Worker {
157*89c4ff92SAndroid Build Coastguard Worker     RunTest<4, armnn::DataType::Float32>(
158*89c4ff92SAndroid Build Coastguard Worker     0,
159*89c4ff92SAndroid Build Coastguard Worker     {{"InputLayer1", { 111, 85, 226, 3 }},
160*89c4ff92SAndroid Build Coastguard Worker     {"InputLayer2", {   5,   8,  10, 12 }}},
161*89c4ff92SAndroid Build Coastguard Worker     {{"OutputLayer", { 116, 93, 236, 15 }}});
162*89c4ff92SAndroid Build Coastguard Worker }
163*89c4ff92SAndroid Build Coastguard Worker 
164*89c4ff92SAndroid Build Coastguard Worker }
165