blob: f9af26bd430b551f262f7db87d8d0e582075f3ff [file] [log] [blame]
Narumol Prangnawarat958024b2020-12-17 12:17:58 +00001//
Colm Donelan7bcae3c2024-01-22 10:07:14 +00002// Copyright © 2020, 2023-2024 Arm Ltd and Contributors. All rights reserved.
Narumol Prangnawarat958024b2020-12-17 12:17:58 +00003// SPDX-License-Identifier: MIT
4//
5
6#include "PadTestHelper.hpp"
7
Narumol Prangnawarat958024b2020-12-17 12:17:58 +00008#include <doctest/doctest.h>
9
10namespace armnnDelegate
11{
12
Colm Donelan7bcae3c2024-01-22 10:07:14 +000013void Pad2dTest(tflite::BuiltinOperator padOperatorCode = tflite::BuiltinOperator_PAD,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +000014 float pad = 0.0f)
15{
16 // Set input data
17 std::vector<int32_t> inputShape { 2, 2, 2 };
18 std::vector<int32_t> outputShape { 3, 5, 6 };
19 std::vector<int32_t> paddingShape { 3, 2 };
20
21 std::vector<float> inputValues = { 0.0f, 4.0f,
22 2.0f, -5.0f,
23 6.0f, 1.0f,
24 5.0f, -2.0f };
25
26 std::vector<float> expectedOutputValues = { pad, pad, pad, pad, pad, pad,
27 pad, pad, pad, pad, pad, pad,
28 pad, pad, 0.0f, 4.0f, pad, pad,
29 pad, pad, 2.0f, -5.0f, pad, pad,
30 pad, pad, pad, pad, pad, pad,
31
32 pad, pad, pad, pad, pad, pad,
33 pad, pad, pad, pad, pad, pad,
34 pad, pad, 6.0f, 1.0f, pad, pad,
35 pad, pad, 5.0f, -2.0f, pad, pad,
36 pad, pad, pad, pad, pad, pad,
37
38 pad, pad, pad, pad, pad, pad,
39 pad, pad, pad, pad, pad, pad,
40 pad, pad, pad, pad, pad, pad,
41 pad, pad, pad, pad, pad, pad,
42 pad, pad, pad, pad, pad, pad };
43
44 std::vector<int32_t> paddingDim = { 0, 1, 2, 1, 2, 2 };
45
46 PadTest<float>(padOperatorCode,
47 ::tflite::TensorType_FLOAT32,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +000048 inputShape,
49 paddingShape,
50 outputShape,
51 inputValues,
52 paddingDim,
53 expectedOutputValues,
54 pad);
55}
56
Colm Donelan7bcae3c2024-01-22 10:07:14 +000057void Pad3dTest(tflite::BuiltinOperator padOperatorCode = tflite::BuiltinOperator_PAD,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +000058 float pad = 0.0f)
59{
60 // Set input data
61 std::vector<int32_t> inputShape { 2, 2, 2 };
62 std::vector<int32_t> outputShape { 3, 5, 6 };
63 std::vector<int32_t> paddingShape { 3, 2 };
64
65 std::vector<float> inputValues = { 0.0f, 4.0f,
66 2.0f, 5.0f,
67 6.0f, 1.0f,
68 5.0f, 2.0f };
69
70 std::vector<float> expectedOutputValues = { pad, pad, pad, pad, pad, pad,
71 pad, pad, pad, pad, pad, pad,
72 pad, pad, 0.0f, 4.0f, pad, pad,
73 pad, pad, 2.0f, 5.0f, pad, pad,
74 pad, pad, pad, pad, pad, pad,
75
76 pad, pad, pad, pad, pad, pad,
77 pad, pad, pad, pad, pad, pad,
78 pad, pad, 6.0f, 1.0f, pad, pad,
79 pad, pad, 5.0f, 2.0f, pad, pad,
80 pad, pad, pad, pad, pad, pad,
81
82 pad, pad, pad, pad, pad, pad,
83 pad, pad, pad, pad, pad, pad,
84 pad, pad, pad, pad, pad, pad,
85 pad, pad, pad, pad, pad, pad,
86 pad, pad, pad, pad, pad, pad };
87
88 std::vector<int32_t> paddingDim = { 0, 1, 2, 1, 2, 2 };
89
90 PadTest<float>(padOperatorCode,
91 ::tflite::TensorType_FLOAT32,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +000092 inputShape,
93 paddingShape,
94 outputShape,
95 inputValues,
96 paddingDim,
97 expectedOutputValues,
98 pad);
99}
100
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000101void Pad4dTest(tflite::BuiltinOperator padOperatorCode = tflite::BuiltinOperator_PAD,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000102 float pad = 0.0f)
103{
104 // Set input data
105 std::vector<int32_t> inputShape { 2, 2, 3, 2 };
106 std::vector<int32_t> outputShape { 4, 5, 7, 4 };
107 std::vector<int32_t> paddingShape { 4, 2 };
108
109 std::vector<float> inputValues = { 0.0f, 1.0f,
110 2.0f, 3.0f,
111 4.0f, 5.0f,
112
113 6.0f, 7.0f,
114 8.0f, 9.0f,
115 10.0f, 11.0f,
116
117 12.0f, 13.0f,
118 14.0f, 15.0f,
119 16.0f, 17.0f,
120
121 18.0f, 19.0f,
122 20.0f, 21.0f,
123 22.0f, 23.0f };
124
125 std::vector<float> expectedOutputValues = { pad, pad, pad, pad,
126 pad, pad, pad, pad,
127 pad, pad, pad, pad,
128 pad, pad, pad, pad,
129 pad, pad, pad, pad,
130 pad, pad, pad, pad,
131 pad, pad, pad, pad,
132
133 pad, pad, pad, pad,
134 pad, pad, pad, pad,
135 pad, pad, pad, pad,
136 pad, pad, pad, pad,
137 pad, pad, pad, pad,
138 pad, pad, pad, pad,
139 pad, pad, pad, pad,
140
141 pad, pad, pad, pad,
142 pad, pad, pad, pad,
143 pad, pad, pad, pad,
144 pad, pad, pad, pad,
145 pad, pad, pad, pad,
146 pad, pad, pad, pad,
147 pad, pad, pad, pad,
148
149 pad, pad, pad, pad,
150 pad, pad, pad, pad,
151 pad, pad, pad, pad,
152 pad, pad, pad, pad,
153 pad, pad, pad, pad,
154 pad, pad, pad, pad,
155 pad, pad, pad, pad,
156
157 pad, pad, pad, pad,
158 pad, pad, pad, pad,
159 pad, pad, pad, pad,
160 pad, pad, pad, pad,
161 pad, pad, pad, pad,
162 pad, pad, pad, pad,
163 pad, pad, pad, pad,
164
165 pad, pad, pad, pad,
166 pad, pad, pad, pad,
167 pad, pad, pad, pad,
168 pad, pad, pad, pad,
169 pad, pad, pad, pad,
170 pad, pad, pad, pad,
171 pad, pad, pad, pad,
172
173 pad, pad, pad, pad,
174 pad, pad, pad, pad,
175 pad, pad, pad, pad,
176 pad, pad, pad, pad,
177 pad, pad, pad, pad,
178 pad, pad, pad, pad,
179 pad, pad, pad, pad,
180
181 pad, pad, pad, pad,
182 pad, pad, pad, pad,
183 pad, pad, pad, pad,
184 pad, 0.0f, 1.0f, pad,
185 pad, 2.0f, 3.0f, pad,
186 pad, 4.0f, 5.0f, pad,
187 pad, pad, pad, pad,
188
189 pad, pad, pad, pad,
190 pad, pad, pad, pad,
191 pad, pad, pad, pad,
192 pad, 6.0f, 7.0f, pad,
193 pad, 8.0f, 9.0f, pad,
194 pad, 10.0f, 11.0f, pad,
195 pad, pad, pad, pad,
196
197 pad, pad, pad, pad,
198 pad, pad, pad, pad,
199 pad, pad, pad, pad,
200 pad, pad, pad, pad,
201 pad, pad, pad, pad,
202 pad, pad, pad, pad,
203 pad, pad, pad, pad,
204
205 pad, pad, pad, pad,
206 pad, pad, pad, pad,
207 pad, pad, pad, pad,
208 pad, pad, pad, pad,
209 pad, pad, pad, pad,
210 pad, pad, pad, pad,
211 pad, pad, pad, pad,
212
213 pad, pad, pad, pad,
214 pad, pad, pad, pad,
215 pad, pad, pad, pad,
216 pad, pad, pad, pad,
217 pad, pad, pad, pad,
218 pad, pad, pad, pad,
219 pad, pad, pad, pad,
220
221 pad, pad, pad, pad,
222 pad, pad, pad, pad,
223 pad, pad, pad, pad,
224 pad, 12.0f, 13.0f, pad,
225 pad, 14.0f, 15.0f, pad,
226 pad, 16.0f, 17.0f, pad,
227 pad, pad, pad, pad,
228
229 pad, pad, pad, pad,
230 pad, pad, pad, pad,
231 pad, pad, pad, pad,
232 pad, 18.0f, 19.0f, pad,
233 pad, 20.0f, 21.0f, pad,
234 pad, 22.0f, 23.0f, pad,
235 pad, pad, pad, pad,
236
237 pad, pad, pad, pad,
238 pad, pad, pad, pad,
239 pad, pad, pad, pad,
240 pad, pad, pad, pad,
241 pad, pad, pad, pad,
242 pad, pad, pad, pad,
243 pad, pad, pad, pad,
244
245 pad, pad, pad, pad,
246 pad, pad, pad, pad,
247 pad, pad, pad, pad,
248 pad, pad, pad, pad,
249 pad, pad, pad, pad,
250 pad, pad, pad, pad,
251 pad, pad, pad, pad,
252
253 pad, pad, pad, pad,
254 pad, pad, pad, pad,
255 pad, pad, pad, pad,
256 pad, pad, pad, pad,
257 pad, pad, pad, pad,
258 pad, pad, pad, pad,
259 pad, pad, pad, pad,
260
261 pad, pad, pad, pad,
262 pad, pad, pad, pad,
263 pad, pad, pad, pad,
264 pad, pad, pad, pad,
265 pad, pad, pad, pad,
266 pad, pad, pad, pad,
267 pad, pad, pad, pad,
268
269 pad, pad, pad, pad,
270 pad, pad, pad, pad,
271 pad, pad, pad, pad,
272 pad, pad, pad, pad,
273 pad, pad, pad, pad,
274 pad, pad, pad, pad,
275 pad, pad, pad, pad,
276
277 pad, pad, pad, pad,
278 pad, pad, pad, pad,
279 pad, pad, pad, pad,
280 pad, pad, pad, pad,
281 pad, pad, pad, pad,
282 pad, pad, pad, pad,
283 pad, pad, pad, pad };
284
285 std::vector<int32_t> paddingDim = { 1, 1, 2, 1, 3, 1, 1, 1 };
286
287 PadTest<float>(padOperatorCode,
288 ::tflite::TensorType_FLOAT32,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000289 inputShape,
290 paddingShape,
291 outputShape,
292 inputValues,
293 paddingDim,
294 expectedOutputValues,
295 pad);
296}
297
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000298void PadInt8Test(tflite::BuiltinOperator padOperatorCode = tflite::BuiltinOperator_PAD,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000299 int8_t paddingValue = 0,
300 int8_t p = 3,
301 float quantizationScale = -2.0f,
302 int32_t quantizationOffset = 3)
303{
304 // Set input data
305 std::vector<int32_t> inputShape { 2, 2, 2 };
306 std::vector<int32_t> outputShape { 3, 5, 6 };
307 std::vector<int32_t> paddingShape { 3, 2 };
308
309 std::vector<int8_t> inputValues = { 0, 4,
310 2, -5,
311 6, 1,
312 5, -2 };
313
314 std::vector<int8_t> expectedOutputValues = { p, p, p, p, p, p,
315 p, p, p, p, p, p,
316 p, p, 0, 4, p, p,
317 p, p, 2, -5, p, p,
318 p, p, p, p, p, p,
319
320 p, p, p, p, p, p,
321 p, p, p, p, p, p,
322 p, p, 6, 1, p, p,
323 p, p, 5, -2, p, p,
324 p, p, p, p, p, p,
325
326 p, p, p, p, p, p,
327 p, p, p, p, p, p,
328 p, p, p, p, p, p,
329 p, p, p, p, p, p,
330 p, p, p, p, p, p };
331
332 std::vector<int32_t> paddingDim = { 0, 1, 2, 1, 2, 2 };
333
334 PadTest<int8_t>(padOperatorCode,
335 ::tflite::TensorType_INT8,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000336 inputShape,
337 paddingShape,
338 outputShape,
339 inputValues,
340 paddingDim,
341 expectedOutputValues,
342 paddingValue,
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000343 {},
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000344 quantizationScale,
345 quantizationOffset);
346}
347
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000348void PadUint8Test(tflite::BuiltinOperator padOperatorCode = tflite::BuiltinOperator_PAD,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000349 uint8_t paddingValue = 0,
350 uint8_t p = 3,
351 float quantizationScale = -2.0f,
352 int32_t quantizationOffset = 3)
353{
354 // Set input data
355 std::vector<int32_t> inputShape { 2, 2, 2 };
356 std::vector<int32_t> outputShape { 3, 5, 6 };
357 std::vector<int32_t> paddingShape { 3, 2 };
358
359 std::vector<uint8_t> inputValues = { 0, 4,
360 2, 5,
361 6, 1,
362 5, 2 };
363
364 std::vector<uint8_t> expectedOutputValues = { p, p, p, p, p, p,
365 p, p, p, p, p, p,
366 p, p, 0, 4, p, p,
367 p, p, 2, 5, p, p,
368 p, p, p, p, p, p,
369
370 p, p, p, p, p, p,
371 p, p, p, p, p, p,
372 p, p, 6, 1, p, p,
373 p, p, 5, 2, p, p,
374 p, p, p, p, p, p,
375
376 p, p, p, p, p, p,
377 p, p, p, p, p, p,
378 p, p, p, p, p, p,
379 p, p, p, p, p, p,
380 p, p, p, p, p, p };
381
382 std::vector<int32_t> paddingDim = { 0, 1, 2, 1, 2, 2 };
383
384 PadTest<uint8_t>(padOperatorCode,
385 ::tflite::TensorType_UINT8,
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000386 inputShape,
387 paddingShape,
388 outputShape,
389 inputValues,
390 paddingDim,
391 expectedOutputValues,
392 paddingValue,
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000393 {},
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000394 quantizationScale,
395 quantizationOffset);
396}
397
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000398TEST_SUITE("PadTests")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000399{
400
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000401TEST_CASE ("Pad2d_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000402{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000403 Pad2dTest();
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000404}
405
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000406TEST_CASE ("Pad3d_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000407{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000408 Pad3dTest();
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000409}
410
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000411TEST_CASE ("Pad4d_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000412{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000413 Pad4dTest();
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000414}
415
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000416TEST_CASE ("Pad_Int8_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000417{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000418 PadInt8Test();
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000419}
420
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000421TEST_CASE ("Pad_Uint8_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000422{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000423 PadUint8Test();
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000424}
425
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000426TEST_CASE ("PadV22d_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000427{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000428 Pad2dTest(tflite::BuiltinOperator_PADV2, -2.5);
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000429}
430
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000431TEST_CASE ("PadV23d_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000432{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000433 Pad3dTest(tflite::BuiltinOperator_PADV2, 2.0);
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000434}
435
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000436TEST_CASE ("PadV24d_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000437{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000438 Pad4dTest(tflite::BuiltinOperator_PADV2, -1.33);
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000439}
440
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000441TEST_CASE ("PadV2_Int8_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000442{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000443 PadInt8Test(tflite::BuiltinOperator_PADV2, -1, -1);
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000444}
445
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000446TEST_CASE ("PadV2_Uint8_Test")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000447{
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000448 PadUint8Test(tflite::BuiltinOperator_PADV2, -1, -1);
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000449}
450
Colm Donelan7bcae3c2024-01-22 10:07:14 +0000451} // TEST_SUITE("PadTests")
Narumol Prangnawarat958024b2020-12-17 12:17:58 +0000452
453} // namespace armnnDelegate