xref: /aosp_15_r20/external/armnn/delegate/test/MirrorPadTest.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2021, 2023 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 "PadTestHelper.hpp"
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include <armnn_delegate.hpp>
9*89c4ff92SAndroid Build Coastguard Worker 
10*89c4ff92SAndroid Build Coastguard Worker #include <flatbuffers/flatbuffers.h>
11*89c4ff92SAndroid Build Coastguard Worker #include <schema_generated.h>
12*89c4ff92SAndroid Build Coastguard Worker 
13*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h>
14*89c4ff92SAndroid Build Coastguard Worker 
15*89c4ff92SAndroid Build Coastguard Worker namespace armnnDelegate
16*89c4ff92SAndroid Build Coastguard Worker {
17*89c4ff92SAndroid Build Coastguard Worker 
MirrorPadSymmetric2dTest(std::vector<armnn::BackendId> & backends)18*89c4ff92SAndroid Build Coastguard Worker void MirrorPadSymmetric2dTest(std::vector<armnn::BackendId>& backends)
19*89c4ff92SAndroid Build Coastguard Worker {
20*89c4ff92SAndroid Build Coastguard Worker     // Set input data
21*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> inputShape { 3, 3 };
22*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> outputShape { 7, 7 };
23*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingShape { 2, 2 };
24*89c4ff92SAndroid Build Coastguard Worker 
25*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues =
26*89c4ff92SAndroid Build Coastguard Worker     {
27*89c4ff92SAndroid Build Coastguard Worker         1.0f, 2.0f, 3.0f,
28*89c4ff92SAndroid Build Coastguard Worker         4.0f, 5.0f, 6.0f,
29*89c4ff92SAndroid Build Coastguard Worker         7.0f, 8.0f, 9.0f
30*89c4ff92SAndroid Build Coastguard Worker     };
31*89c4ff92SAndroid Build Coastguard Worker 
32*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues =
33*89c4ff92SAndroid Build Coastguard Worker     {
34*89c4ff92SAndroid Build Coastguard Worker         5.0f, 4.0f, 4.0f, 5.0f, 6.0f, 6.0f, 5.0f,
35*89c4ff92SAndroid Build Coastguard Worker         2.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 2.0f,
36*89c4ff92SAndroid Build Coastguard Worker         2.0f, 1.0f, 1.0f, 2.0f, 3.0f, 3.0f, 2.0f,
37*89c4ff92SAndroid Build Coastguard Worker         5.0f, 4.0f, 4.0f, 5.0f, 6.0f, 6.0f, 5.0f,
38*89c4ff92SAndroid Build Coastguard Worker         8.0f, 7.0f, 7.0f, 8.0f, 9.0f, 9.0f, 8.0f,
39*89c4ff92SAndroid Build Coastguard Worker         8.0f, 7.0f, 7.0f, 8.0f, 9.0f, 9.0f, 8.0f,
40*89c4ff92SAndroid Build Coastguard Worker         5.0f, 4.0f, 4.0f, 5.0f, 6.0f, 6.0f, 5.0f
41*89c4ff92SAndroid Build Coastguard Worker     };
42*89c4ff92SAndroid Build Coastguard Worker 
43*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingDim = { 2, 2, 2, 2 };
44*89c4ff92SAndroid Build Coastguard Worker 
45*89c4ff92SAndroid Build Coastguard Worker     PadTest<float>(tflite::BuiltinOperator_MIRROR_PAD,
46*89c4ff92SAndroid Build Coastguard Worker                    ::tflite::TensorType_FLOAT32,
47*89c4ff92SAndroid Build Coastguard Worker                    backends,
48*89c4ff92SAndroid Build Coastguard Worker                    inputShape,
49*89c4ff92SAndroid Build Coastguard Worker                    paddingShape,
50*89c4ff92SAndroid Build Coastguard Worker                    outputShape,
51*89c4ff92SAndroid Build Coastguard Worker                    inputValues,
52*89c4ff92SAndroid Build Coastguard Worker                    paddingDim,
53*89c4ff92SAndroid Build Coastguard Worker                    expectedOutputValues,
54*89c4ff92SAndroid Build Coastguard Worker                    0,    // Padding value - Not used in these tests.
55*89c4ff92SAndroid Build Coastguard Worker                    1.0f, // Scale
56*89c4ff92SAndroid Build Coastguard Worker                    0,    // Offset
57*89c4ff92SAndroid Build Coastguard Worker                    tflite::MirrorPadMode_SYMMETRIC);
58*89c4ff92SAndroid Build Coastguard Worker }
59*89c4ff92SAndroid Build Coastguard Worker 
MirrorPadReflect2dTest(std::vector<armnn::BackendId> & backends)60*89c4ff92SAndroid Build Coastguard Worker void MirrorPadReflect2dTest(std::vector<armnn::BackendId>& backends)
61*89c4ff92SAndroid Build Coastguard Worker {
62*89c4ff92SAndroid Build Coastguard Worker     // Set input data
63*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> inputShape { 3, 3 };
64*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> outputShape { 7, 7 };
65*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingShape { 2, 2 };
66*89c4ff92SAndroid Build Coastguard Worker 
67*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues =
68*89c4ff92SAndroid Build Coastguard Worker     {
69*89c4ff92SAndroid Build Coastguard Worker         1.0f, 2.0f, 3.0f,
70*89c4ff92SAndroid Build Coastguard Worker         4.0f, 5.0f, 6.0f,
71*89c4ff92SAndroid Build Coastguard Worker         7.0f, 8.0f, 9.0f
72*89c4ff92SAndroid Build Coastguard Worker     };
73*89c4ff92SAndroid Build Coastguard Worker 
74*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues =
75*89c4ff92SAndroid Build Coastguard Worker     {
76*89c4ff92SAndroid Build Coastguard Worker         9.0f, 8.0f, 7.0f, 8.0f, 9.0f, 8.0f, 7.0f,
77*89c4ff92SAndroid Build Coastguard Worker         6.0f, 5.0f, 4.0f, 5.0f, 6.0f, 5.0f, 4.0f,
78*89c4ff92SAndroid Build Coastguard Worker         3.0f, 2.0f, 1.0f, 2.0f, 3.0f, 2.0f, 1.0f,
79*89c4ff92SAndroid Build Coastguard Worker         6.0f, 5.0f, 4.0f, 5.0f, 6.0f, 5.0f, 4.0f,
80*89c4ff92SAndroid Build Coastguard Worker         9.0f, 8.0f, 7.0f, 8.0f, 9.0f, 8.0f, 7.0f,
81*89c4ff92SAndroid Build Coastguard Worker         6.0f, 5.0f, 4.0f, 5.0f, 6.0f, 5.0f, 4.0f,
82*89c4ff92SAndroid Build Coastguard Worker         3.0f, 2.0f, 1.0f, 2.0f, 3.0f, 2.0f, 1.0f
83*89c4ff92SAndroid Build Coastguard Worker     };
84*89c4ff92SAndroid Build Coastguard Worker 
85*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingDim = { 2, 2, 2, 2 };
86*89c4ff92SAndroid Build Coastguard Worker 
87*89c4ff92SAndroid Build Coastguard Worker     PadTest<float>(tflite::BuiltinOperator_MIRROR_PAD,
88*89c4ff92SAndroid Build Coastguard Worker                    ::tflite::TensorType_FLOAT32,
89*89c4ff92SAndroid Build Coastguard Worker                    backends,
90*89c4ff92SAndroid Build Coastguard Worker                    inputShape,
91*89c4ff92SAndroid Build Coastguard Worker                    paddingShape,
92*89c4ff92SAndroid Build Coastguard Worker                    outputShape,
93*89c4ff92SAndroid Build Coastguard Worker                    inputValues,
94*89c4ff92SAndroid Build Coastguard Worker                    paddingDim,
95*89c4ff92SAndroid Build Coastguard Worker                    expectedOutputValues,
96*89c4ff92SAndroid Build Coastguard Worker                    0,    // Padding value - Not used in these tests.
97*89c4ff92SAndroid Build Coastguard Worker                    1.0f, // Scale
98*89c4ff92SAndroid Build Coastguard Worker                    0,    // Offset
99*89c4ff92SAndroid Build Coastguard Worker                    tflite::MirrorPadMode_REFLECT);
100*89c4ff92SAndroid Build Coastguard Worker }
101*89c4ff92SAndroid Build Coastguard Worker 
MirrorPadSymmetric3dTest(std::vector<armnn::BackendId> & backends)102*89c4ff92SAndroid Build Coastguard Worker void MirrorPadSymmetric3dTest(std::vector<armnn::BackendId>& backends)
103*89c4ff92SAndroid Build Coastguard Worker {
104*89c4ff92SAndroid Build Coastguard Worker     // Set input data
105*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> inputShape { 2, 2, 2 };
106*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> outputShape { 4, 4, 4 };
107*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingShape { 3, 2 };
108*89c4ff92SAndroid Build Coastguard Worker 
109*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues =
110*89c4ff92SAndroid Build Coastguard Worker     {
111*89c4ff92SAndroid Build Coastguard Worker         // Channel 0, Height (2) x Width (2)
112*89c4ff92SAndroid Build Coastguard Worker         1.0f, 2.0f,
113*89c4ff92SAndroid Build Coastguard Worker         3.0f, 4.0f,
114*89c4ff92SAndroid Build Coastguard Worker 
115*89c4ff92SAndroid Build Coastguard Worker         // Channel 1, Height (2) x Width (2)
116*89c4ff92SAndroid Build Coastguard Worker         5.0f, 6.0f,
117*89c4ff92SAndroid Build Coastguard Worker         7.0f, 8.0f
118*89c4ff92SAndroid Build Coastguard Worker     };
119*89c4ff92SAndroid Build Coastguard Worker 
120*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues =
121*89c4ff92SAndroid Build Coastguard Worker     {
122*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.0f, 2.0f, 2.0f,
123*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.0f, 2.0f, 2.0f,
124*89c4ff92SAndroid Build Coastguard Worker         3.0f, 3.0f, 4.0f, 4.0f,
125*89c4ff92SAndroid Build Coastguard Worker         3.0f, 3.0f, 4.0f, 4.0f,
126*89c4ff92SAndroid Build Coastguard Worker 
127*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.0f, 2.0f, 2.0f,
128*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.0f, 2.0f, 2.0f,
129*89c4ff92SAndroid Build Coastguard Worker         3.0f, 3.0f, 4.0f, 4.0f,
130*89c4ff92SAndroid Build Coastguard Worker         3.0f, 3.0f, 4.0f, 4.0f,
131*89c4ff92SAndroid Build Coastguard Worker 
132*89c4ff92SAndroid Build Coastguard Worker         5.0f, 5.0f, 6.0f, 6.0f,
133*89c4ff92SAndroid Build Coastguard Worker         5.0f, 5.0f, 6.0f, 6.0f,
134*89c4ff92SAndroid Build Coastguard Worker         7.0f, 7.0f, 8.0f, 8.0f,
135*89c4ff92SAndroid Build Coastguard Worker         7.0f, 7.0f, 8.0f, 8.0f,
136*89c4ff92SAndroid Build Coastguard Worker 
137*89c4ff92SAndroid Build Coastguard Worker         5.0f, 5.0f, 6.0f, 6.0f,
138*89c4ff92SAndroid Build Coastguard Worker         5.0f, 5.0f, 6.0f, 6.0f,
139*89c4ff92SAndroid Build Coastguard Worker         7.0f, 7.0f, 8.0f, 8.0f,
140*89c4ff92SAndroid Build Coastguard Worker         7.0f, 7.0f, 8.0f, 8.0f
141*89c4ff92SAndroid Build Coastguard Worker     };
142*89c4ff92SAndroid Build Coastguard Worker 
143*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingDim = { 1, 1, 1, 1, 1, 1 };
144*89c4ff92SAndroid Build Coastguard Worker 
145*89c4ff92SAndroid Build Coastguard Worker     PadTest<float>(tflite::BuiltinOperator_MIRROR_PAD,
146*89c4ff92SAndroid Build Coastguard Worker                    ::tflite::TensorType_FLOAT32,
147*89c4ff92SAndroid Build Coastguard Worker                    backends,
148*89c4ff92SAndroid Build Coastguard Worker                    inputShape,
149*89c4ff92SAndroid Build Coastguard Worker                    paddingShape,
150*89c4ff92SAndroid Build Coastguard Worker                    outputShape,
151*89c4ff92SAndroid Build Coastguard Worker                    inputValues,
152*89c4ff92SAndroid Build Coastguard Worker                    paddingDim,
153*89c4ff92SAndroid Build Coastguard Worker                    expectedOutputValues,
154*89c4ff92SAndroid Build Coastguard Worker                    0,    // Padding value - Not used in these tests.
155*89c4ff92SAndroid Build Coastguard Worker                    1.0f, // Scale
156*89c4ff92SAndroid Build Coastguard Worker                    0,    // Offset
157*89c4ff92SAndroid Build Coastguard Worker                    tflite::MirrorPadMode_SYMMETRIC);
158*89c4ff92SAndroid Build Coastguard Worker }
159*89c4ff92SAndroid Build Coastguard Worker 
MirrorPadReflect3dTest(std::vector<armnn::BackendId> & backends)160*89c4ff92SAndroid Build Coastguard Worker void MirrorPadReflect3dTest(std::vector<armnn::BackendId>& backends)
161*89c4ff92SAndroid Build Coastguard Worker {
162*89c4ff92SAndroid Build Coastguard Worker     // Set input data
163*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> inputShape { 2, 2, 2 };
164*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> outputShape { 4, 4, 4 };
165*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingShape { 3, 2 };
166*89c4ff92SAndroid Build Coastguard Worker 
167*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues =
168*89c4ff92SAndroid Build Coastguard Worker     {
169*89c4ff92SAndroid Build Coastguard Worker         // Channel 0, Height (2) x Width (2)
170*89c4ff92SAndroid Build Coastguard Worker         1.0f, 2.0f,
171*89c4ff92SAndroid Build Coastguard Worker         3.0f, 4.0f,
172*89c4ff92SAndroid Build Coastguard Worker 
173*89c4ff92SAndroid Build Coastguard Worker         // Channel 1, Height (2) x Width (2)
174*89c4ff92SAndroid Build Coastguard Worker         5.0f, 6.0f,
175*89c4ff92SAndroid Build Coastguard Worker         7.0f, 8.0f
176*89c4ff92SAndroid Build Coastguard Worker     };
177*89c4ff92SAndroid Build Coastguard Worker 
178*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues =
179*89c4ff92SAndroid Build Coastguard Worker     {
180*89c4ff92SAndroid Build Coastguard Worker         8.0f, 7.0f, 8.0f, 7.0f,
181*89c4ff92SAndroid Build Coastguard Worker         6.0f, 5.0f, 6.0f, 5.0f,
182*89c4ff92SAndroid Build Coastguard Worker         8.0f, 7.0f, 8.0f, 7.0f,
183*89c4ff92SAndroid Build Coastguard Worker         6.0f, 5.0f, 6.0f, 5.0f,
184*89c4ff92SAndroid Build Coastguard Worker 
185*89c4ff92SAndroid Build Coastguard Worker         4.0f, 3.0f, 4.0f, 3.0f,
186*89c4ff92SAndroid Build Coastguard Worker         2.0f, 1.0f, 2.0f, 1.0f,
187*89c4ff92SAndroid Build Coastguard Worker         4.0f, 3.0f, 4.0f, 3.0f,
188*89c4ff92SAndroid Build Coastguard Worker         2.0f, 1.0f, 2.0f, 1.0f,
189*89c4ff92SAndroid Build Coastguard Worker 
190*89c4ff92SAndroid Build Coastguard Worker         8.0f, 7.0f, 8.0f, 7.0f,
191*89c4ff92SAndroid Build Coastguard Worker         6.0f, 5.0f, 6.0f, 5.0f,
192*89c4ff92SAndroid Build Coastguard Worker         8.0f, 7.0f, 8.0f, 7.0f,
193*89c4ff92SAndroid Build Coastguard Worker         6.0f, 5.0f, 6.0f, 5.0f,
194*89c4ff92SAndroid Build Coastguard Worker 
195*89c4ff92SAndroid Build Coastguard Worker         4.0f, 3.0f, 4.0f, 3.0f,
196*89c4ff92SAndroid Build Coastguard Worker         2.0f, 1.0f, 2.0f, 1.0f,
197*89c4ff92SAndroid Build Coastguard Worker         4.0f, 3.0f, 4.0f, 3.0f,
198*89c4ff92SAndroid Build Coastguard Worker         2.0f, 1.0f, 2.0f, 1.0f
199*89c4ff92SAndroid Build Coastguard Worker     };
200*89c4ff92SAndroid Build Coastguard Worker 
201*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingDim = { 1, 1, 1, 1, 1, 1 };
202*89c4ff92SAndroid Build Coastguard Worker 
203*89c4ff92SAndroid Build Coastguard Worker     PadTest<float>(tflite::BuiltinOperator_MIRROR_PAD,
204*89c4ff92SAndroid Build Coastguard Worker                    ::tflite::TensorType_FLOAT32,
205*89c4ff92SAndroid Build Coastguard Worker                    backends,
206*89c4ff92SAndroid Build Coastguard Worker                    inputShape,
207*89c4ff92SAndroid Build Coastguard Worker                    paddingShape,
208*89c4ff92SAndroid Build Coastguard Worker                    outputShape,
209*89c4ff92SAndroid Build Coastguard Worker                    inputValues,
210*89c4ff92SAndroid Build Coastguard Worker                    paddingDim,
211*89c4ff92SAndroid Build Coastguard Worker                    expectedOutputValues,
212*89c4ff92SAndroid Build Coastguard Worker                    0,    // Padding value - Not used in these tests.
213*89c4ff92SAndroid Build Coastguard Worker                    1.0f, // Scale
214*89c4ff92SAndroid Build Coastguard Worker                    0,    // Offset
215*89c4ff92SAndroid Build Coastguard Worker                    tflite::MirrorPadMode_REFLECT);
216*89c4ff92SAndroid Build Coastguard Worker }
217*89c4ff92SAndroid Build Coastguard Worker 
MirrorPadSymmetricUint8Test(std::vector<armnn::BackendId> & backends)218*89c4ff92SAndroid Build Coastguard Worker void MirrorPadSymmetricUint8Test(std::vector<armnn::BackendId>& backends)
219*89c4ff92SAndroid Build Coastguard Worker {
220*89c4ff92SAndroid Build Coastguard Worker     // Set input data
221*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> inputShape { 3, 3 };
222*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> outputShape { 5, 7 };
223*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingShape { 2, 2 };
224*89c4ff92SAndroid Build Coastguard Worker 
225*89c4ff92SAndroid Build Coastguard Worker     std::vector<uint8_t> inputValues =
226*89c4ff92SAndroid Build Coastguard Worker     {
227*89c4ff92SAndroid Build Coastguard Worker         1, 2, 3,
228*89c4ff92SAndroid Build Coastguard Worker         4, 5, 6,
229*89c4ff92SAndroid Build Coastguard Worker         7, 8, 9
230*89c4ff92SAndroid Build Coastguard Worker     };
231*89c4ff92SAndroid Build Coastguard Worker 
232*89c4ff92SAndroid Build Coastguard Worker     std::vector<uint8_t> expectedOutputValues =
233*89c4ff92SAndroid Build Coastguard Worker     {
234*89c4ff92SAndroid Build Coastguard Worker         2, 1, 1, 2, 3, 3, 2,
235*89c4ff92SAndroid Build Coastguard Worker         2, 1, 1, 2, 3, 3, 2,
236*89c4ff92SAndroid Build Coastguard Worker         5, 4, 4, 5, 6, 6, 5,
237*89c4ff92SAndroid Build Coastguard Worker         8, 7, 7, 8, 9, 9, 8,
238*89c4ff92SAndroid Build Coastguard Worker         8, 7, 7, 8, 9, 9, 8,
239*89c4ff92SAndroid Build Coastguard Worker     };
240*89c4ff92SAndroid Build Coastguard Worker 
241*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingDim = { 1, 1, 2, 2 };
242*89c4ff92SAndroid Build Coastguard Worker 
243*89c4ff92SAndroid Build Coastguard Worker     PadTest<uint8_t>(tflite::BuiltinOperator_MIRROR_PAD,
244*89c4ff92SAndroid Build Coastguard Worker                      ::tflite::TensorType_UINT8,
245*89c4ff92SAndroid Build Coastguard Worker                      backends,
246*89c4ff92SAndroid Build Coastguard Worker                      inputShape,
247*89c4ff92SAndroid Build Coastguard Worker                      paddingShape,
248*89c4ff92SAndroid Build Coastguard Worker                      outputShape,
249*89c4ff92SAndroid Build Coastguard Worker                      inputValues,
250*89c4ff92SAndroid Build Coastguard Worker                      paddingDim,
251*89c4ff92SAndroid Build Coastguard Worker                      expectedOutputValues,
252*89c4ff92SAndroid Build Coastguard Worker                      0,    // Padding value - Not used in these tests.
253*89c4ff92SAndroid Build Coastguard Worker                      1.0f, // Scale
254*89c4ff92SAndroid Build Coastguard Worker                      1,    // Offset
255*89c4ff92SAndroid Build Coastguard Worker                      tflite::MirrorPadMode_SYMMETRIC);
256*89c4ff92SAndroid Build Coastguard Worker }
257*89c4ff92SAndroid Build Coastguard Worker 
MirrorPadReflectInt8Test(std::vector<armnn::BackendId> & backends)258*89c4ff92SAndroid Build Coastguard Worker void MirrorPadReflectInt8Test(std::vector<armnn::BackendId>& backends)
259*89c4ff92SAndroid Build Coastguard Worker {
260*89c4ff92SAndroid Build Coastguard Worker     // Set input data
261*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> inputShape { 3, 3 };
262*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> outputShape { 7, 5 };
263*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingShape { 2, 2 };
264*89c4ff92SAndroid Build Coastguard Worker 
265*89c4ff92SAndroid Build Coastguard Worker     std::vector<int8_t> inputValues =
266*89c4ff92SAndroid Build Coastguard Worker     {
267*89c4ff92SAndroid Build Coastguard Worker         1, 2, 3,
268*89c4ff92SAndroid Build Coastguard Worker         4, 5, 6,
269*89c4ff92SAndroid Build Coastguard Worker         7, 8, 9
270*89c4ff92SAndroid Build Coastguard Worker     };
271*89c4ff92SAndroid Build Coastguard Worker 
272*89c4ff92SAndroid Build Coastguard Worker     std::vector<int8_t> expectedOutputValues =
273*89c4ff92SAndroid Build Coastguard Worker     {
274*89c4ff92SAndroid Build Coastguard Worker         8, 7, 8, 9, 8,
275*89c4ff92SAndroid Build Coastguard Worker         5, 4, 5, 6, 5,
276*89c4ff92SAndroid Build Coastguard Worker         2, 1, 2, 3, 2,
277*89c4ff92SAndroid Build Coastguard Worker         5, 4, 5, 6, 5,
278*89c4ff92SAndroid Build Coastguard Worker         8, 7, 8, 9, 8,
279*89c4ff92SAndroid Build Coastguard Worker         5, 4, 5, 6, 5,
280*89c4ff92SAndroid Build Coastguard Worker         2, 1, 2, 3, 2
281*89c4ff92SAndroid Build Coastguard Worker     };
282*89c4ff92SAndroid Build Coastguard Worker 
283*89c4ff92SAndroid Build Coastguard Worker     std::vector<int32_t> paddingDim = { 2, 2, 1, 1 };
284*89c4ff92SAndroid Build Coastguard Worker 
285*89c4ff92SAndroid Build Coastguard Worker     PadTest<int8_t>(tflite::BuiltinOperator_MIRROR_PAD,
286*89c4ff92SAndroid Build Coastguard Worker                     ::tflite::TensorType_INT8,
287*89c4ff92SAndroid Build Coastguard Worker                     backends,
288*89c4ff92SAndroid Build Coastguard Worker                     inputShape,
289*89c4ff92SAndroid Build Coastguard Worker                     paddingShape,
290*89c4ff92SAndroid Build Coastguard Worker                     outputShape,
291*89c4ff92SAndroid Build Coastguard Worker                     inputValues,
292*89c4ff92SAndroid Build Coastguard Worker                     paddingDim,
293*89c4ff92SAndroid Build Coastguard Worker                     expectedOutputValues,
294*89c4ff92SAndroid Build Coastguard Worker                     0,    // Padding value - Not used in these tests.
295*89c4ff92SAndroid Build Coastguard Worker                     1.0f, // Scale
296*89c4ff92SAndroid Build Coastguard Worker                     1,    // Offset
297*89c4ff92SAndroid Build Coastguard Worker                     tflite::MirrorPadMode_REFLECT);
298*89c4ff92SAndroid Build Coastguard Worker }
299*89c4ff92SAndroid Build Coastguard Worker 
300*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("MirrorPad_CpuRefTests")
301*89c4ff92SAndroid Build Coastguard Worker {
302*89c4ff92SAndroid Build Coastguard Worker 
303*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("MirrorPadSymmetric2d_CpuRef_Test")
304*89c4ff92SAndroid Build Coastguard Worker {
305*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
306*89c4ff92SAndroid Build Coastguard Worker     MirrorPadSymmetric2dTest(backends);
307*89c4ff92SAndroid Build Coastguard Worker }
308*89c4ff92SAndroid Build Coastguard Worker 
309*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("MirrorPadReflect2d_CpuRef_Test")
310*89c4ff92SAndroid Build Coastguard Worker {
311*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
312*89c4ff92SAndroid Build Coastguard Worker     MirrorPadReflect2dTest(backends);
313*89c4ff92SAndroid Build Coastguard Worker }
314*89c4ff92SAndroid Build Coastguard Worker 
315*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("MirrorPadSymmetric3d_CpuRef_Test")
316*89c4ff92SAndroid Build Coastguard Worker {
317*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
318*89c4ff92SAndroid Build Coastguard Worker     MirrorPadSymmetric3dTest(backends);
319*89c4ff92SAndroid Build Coastguard Worker }
320*89c4ff92SAndroid Build Coastguard Worker 
321*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("MirrorPadReflect3d_CpuRef_Test")
322*89c4ff92SAndroid Build Coastguard Worker {
323*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
324*89c4ff92SAndroid Build Coastguard Worker     MirrorPadReflect3dTest(backends);
325*89c4ff92SAndroid Build Coastguard Worker }
326*89c4ff92SAndroid Build Coastguard Worker 
327*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("MirrorPadSymmetricUint8_CpuRef_Test")
328*89c4ff92SAndroid Build Coastguard Worker {
329*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
330*89c4ff92SAndroid Build Coastguard Worker     MirrorPadSymmetricUint8Test(backends);
331*89c4ff92SAndroid Build Coastguard Worker }
332*89c4ff92SAndroid Build Coastguard Worker 
333*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("MirrorPadSymmetricInt8_CpuRef_Test")
334*89c4ff92SAndroid Build Coastguard Worker {
335*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
336*89c4ff92SAndroid Build Coastguard Worker     MirrorPadReflectInt8Test(backends);
337*89c4ff92SAndroid Build Coastguard Worker }
338*89c4ff92SAndroid Build Coastguard Worker 
339*89c4ff92SAndroid Build Coastguard Worker } // TEST_SUITE("MirrorPad_CpuRefTests")
340*89c4ff92SAndroid Build Coastguard Worker 
341*89c4ff92SAndroid Build Coastguard Worker } // namespace armnnDelegate