1 // Copyright (c) Facebook, Inc. and its affiliates.
2 // All rights reserved.
3 //
4 // Copyright 2019 Google LLC
5 //
6 // This source code is licensed under the BSD-style license found in the
7 // LICENSE file in the root directory of this source tree.
8
9 #include <gtest/gtest.h>
10
11 #include "add-operator-tester.h"
12
13
TEST(ADD_NC_Q8,unit_batch)14 TEST(ADD_NC_Q8, unit_batch) {
15 for (size_t channels = 1; channels < 100; channels += 15) {
16 AddOperatorTester()
17 .batch_size(1)
18 .channels(channels)
19 .iterations(3)
20 .TestQ8();
21 }
22 }
23
TEST(ADD_NC_Q8,unit_batch_with_qmin)24 TEST(ADD_NC_Q8, unit_batch_with_qmin) {
25 for (size_t channels = 1; channels < 100; channels += 15) {
26 AddOperatorTester()
27 .batch_size(1)
28 .channels(channels)
29 .qmin(128)
30 .iterations(3)
31 .TestQ8();
32 }
33 }
34
TEST(ADD_NC_Q8,unit_batch_with_qmax)35 TEST(ADD_NC_Q8, unit_batch_with_qmax) {
36 for (size_t channels = 1; channels < 100; channels += 15) {
37 AddOperatorTester()
38 .batch_size(1)
39 .channels(channels)
40 .qmax(128)
41 .iterations(3)
42 .TestQ8();
43 }
44 }
45
TEST(ADD_NC_Q8,unit_batch_with_a_scale)46 TEST(ADD_NC_Q8, unit_batch_with_a_scale) {
47 for (size_t channels = 1; channels < 100; channels += 15) {
48 for (float a_scale = 1.0e-2f; a_scale < 1.0e+2f; a_scale *= 10.0f) {
49 AddOperatorTester()
50 .batch_size(1)
51 .channels(channels)
52 .a_scale(a_scale)
53 .iterations(1)
54 .TestQ8();
55 }
56 }
57 }
58
TEST(ADD_NC_Q8,unit_batch_with_b_scale)59 TEST(ADD_NC_Q8, unit_batch_with_b_scale) {
60 for (size_t channels = 1; channels < 100; channels += 15) {
61 for (float b_scale = 1.0e-2f; b_scale < 1.0e+2f; b_scale *= 10.0f) {
62 AddOperatorTester()
63 .batch_size(1)
64 .channels(channels)
65 .b_scale(b_scale)
66 .iterations(1)
67 .TestQ8();
68 }
69 }
70 }
71
TEST(ADD_NC_Q8,unit_batch_with_y_scale)72 TEST(ADD_NC_Q8, unit_batch_with_y_scale) {
73 for (size_t channels = 1; channels < 100; channels += 15) {
74 for (float y_scale = 1.0e-2f; y_scale < 1.0e+2f; y_scale *= 10.0f) {
75 AddOperatorTester()
76 .batch_size(1)
77 .channels(channels)
78 .y_scale(y_scale)
79 .iterations(1)
80 .TestQ8();
81 }
82 }
83 }
84
TEST(ADD_NC_Q8,unit_batch_with_a_zero_point)85 TEST(ADD_NC_Q8, unit_batch_with_a_zero_point) {
86 for (size_t channels = 1; channels < 100; channels += 15) {
87 for (int32_t a_zero_point = 0; a_zero_point <= 255; a_zero_point += 51) {
88 AddOperatorTester()
89 .batch_size(1)
90 .channels(channels)
91 .a_zero_point(uint8_t(a_zero_point))
92 .iterations(1)
93 .TestQ8();
94 }
95 }
96 }
97
TEST(ADD_NC_Q8,unit_batch_with_b_zero_point)98 TEST(ADD_NC_Q8, unit_batch_with_b_zero_point) {
99 for (size_t channels = 1; channels < 100; channels += 15) {
100 for (int32_t b_zero_point = 0; b_zero_point <= 255; b_zero_point += 51) {
101 AddOperatorTester()
102 .batch_size(1)
103 .channels(channels)
104 .b_zero_point(uint8_t(b_zero_point))
105 .iterations(1)
106 .TestQ8();
107 }
108 }
109 }
110
TEST(ADD_NC_Q8,unit_batch_with_y_zero_point)111 TEST(ADD_NC_Q8, unit_batch_with_y_zero_point) {
112 for (size_t channels = 1; channels < 100; channels += 15) {
113 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
114 AddOperatorTester()
115 .batch_size(1)
116 .channels(channels)
117 .y_zero_point(uint8_t(y_zero_point))
118 .iterations(1)
119 .TestQ8();
120 }
121 }
122 }
123
TEST(ADD_NC_Q8,small_batch)124 TEST(ADD_NC_Q8, small_batch) {
125 for (size_t channels = 1; channels < 100; channels += 15) {
126 AddOperatorTester()
127 .batch_size(3)
128 .channels(channels)
129 .iterations(3)
130 .TestQ8();
131 }
132 }
133
TEST(ADD_NC_Q8,small_batch_with_a_stride)134 TEST(ADD_NC_Q8, small_batch_with_a_stride) {
135 for (size_t channels = 1; channels < 100; channels += 15) {
136 AddOperatorTester()
137 .batch_size(3)
138 .channels(channels)
139 .a_stride(129)
140 .iterations(3)
141 .TestQ8();
142 }
143 }
144
TEST(ADD_NC_Q8,small_batch_with_b_stride)145 TEST(ADD_NC_Q8, small_batch_with_b_stride) {
146 for (size_t channels = 1; channels < 100; channels += 15) {
147 AddOperatorTester()
148 .batch_size(3)
149 .channels(channels)
150 .b_stride(123)
151 .iterations(3)
152 .TestQ8();
153 }
154 }
155
TEST(ADD_NC_Q8,small_batch_with_y_stride)156 TEST(ADD_NC_Q8, small_batch_with_y_stride) {
157 for (size_t channels = 1; channels < 100; channels += 15) {
158 AddOperatorTester()
159 .batch_size(3)
160 .channels(channels)
161 .y_stride(117)
162 .iterations(3)
163 .TestQ8();
164 }
165 }
166
TEST(ADD_NC_Q8,small_batch_with_qmin)167 TEST(ADD_NC_Q8, small_batch_with_qmin) {
168 for (size_t channels = 1; channels < 100; channels += 15) {
169 AddOperatorTester()
170 .batch_size(3)
171 .channels(channels)
172 .qmin(128)
173 .iterations(3)
174 .TestQ8();
175 }
176 }
177
TEST(ADD_NC_Q8,small_batch_with_qmax)178 TEST(ADD_NC_Q8, small_batch_with_qmax) {
179 for (size_t channels = 1; channels < 100; channels += 15) {
180 AddOperatorTester()
181 .batch_size(3)
182 .channels(channels)
183 .qmax(128)
184 .iterations(3)
185 .TestQ8();
186 }
187 }
188
TEST(ADD_NC_Q8,small_batch_with_a_scale)189 TEST(ADD_NC_Q8, small_batch_with_a_scale) {
190 for (size_t channels = 1; channels < 100; channels += 15) {
191 for (float a_scale = 1.0e-2f; a_scale < 1.0e+2f; a_scale *= 10.0f) {
192 AddOperatorTester()
193 .batch_size(3)
194 .channels(channels)
195 .a_scale(a_scale)
196 .iterations(1)
197 .TestQ8();
198 }
199 }
200 }
201
TEST(ADD_NC_Q8,small_batch_with_b_scale)202 TEST(ADD_NC_Q8, small_batch_with_b_scale) {
203 for (size_t channels = 1; channels < 100; channels += 15) {
204 for (float b_scale = 1.0e-2f; b_scale < 1.0e+2f; b_scale *= 10.0f) {
205 AddOperatorTester()
206 .batch_size(3)
207 .channels(channels)
208 .b_scale(b_scale)
209 .iterations(1)
210 .TestQ8();
211 }
212 }
213 }
214
TEST(ADD_NC_Q8,small_batch_with_y_scale)215 TEST(ADD_NC_Q8, small_batch_with_y_scale) {
216 for (size_t channels = 1; channels < 100; channels += 15) {
217 for (float y_scale = 1.0e-2f; y_scale < 1.0e+2f; y_scale *= 10.0f) {
218 AddOperatorTester()
219 .batch_size(3)
220 .channels(channels)
221 .y_scale(y_scale)
222 .iterations(1)
223 .TestQ8();
224 }
225 }
226 }
227
TEST(ADD_NC_Q8,small_batch_with_a_zero_point)228 TEST(ADD_NC_Q8, small_batch_with_a_zero_point) {
229 for (size_t channels = 1; channels < 100; channels += 15) {
230 for (int32_t a_zero_point = 0; a_zero_point <= 255; a_zero_point += 51) {
231 AddOperatorTester()
232 .batch_size(3)
233 .channels(channels)
234 .a_zero_point(uint8_t(a_zero_point))
235 .iterations(1)
236 .TestQ8();
237 }
238 }
239 }
240
TEST(ADD_NC_Q8,small_batch_with_b_zero_point)241 TEST(ADD_NC_Q8, small_batch_with_b_zero_point) {
242 for (size_t channels = 1; channels < 100; channels += 15) {
243 for (int32_t b_zero_point = 0; b_zero_point <= 255; b_zero_point += 51) {
244 AddOperatorTester()
245 .batch_size(3)
246 .channels(channels)
247 .b_zero_point(uint8_t(b_zero_point))
248 .iterations(1)
249 .TestQ8();
250 }
251 }
252 }
253
TEST(ADD_NC_Q8,small_batch_with_y_zero_point)254 TEST(ADD_NC_Q8, small_batch_with_y_zero_point) {
255 for (size_t channels = 1; channels < 100; channels += 15) {
256 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
257 AddOperatorTester()
258 .batch_size(3)
259 .channels(channels)
260 .y_zero_point(uint8_t(y_zero_point))
261 .iterations(1)
262 .TestQ8();
263 }
264 }
265 }
266
TEST(ADD_NC_Q8,strided_batch)267 TEST(ADD_NC_Q8, strided_batch) {
268 for (size_t channels = 1; channels < 100; channels += 15) {
269 AddOperatorTester()
270 .batch_size(3)
271 .channels(channels)
272 .a_stride(129)
273 .b_stride(123)
274 .y_stride(117)
275 .iterations(3)
276 .TestQ8();
277 }
278 }
279
TEST(ADD_NC_Q8,strided_batch_with_qmin)280 TEST(ADD_NC_Q8, strided_batch_with_qmin) {
281 for (size_t channels = 1; channels < 100; channels += 15) {
282 AddOperatorTester()
283 .batch_size(3)
284 .channels(channels)
285 .a_stride(129)
286 .b_stride(123)
287 .y_stride(117)
288 .qmin(128)
289 .iterations(3)
290 .TestQ8();
291 }
292 }
293
TEST(ADD_NC_Q8,strided_batch_with_qmax)294 TEST(ADD_NC_Q8, strided_batch_with_qmax) {
295 for (size_t channels = 1; channels < 100; channels += 15) {
296 AddOperatorTester()
297 .batch_size(3)
298 .channels(channels)
299 .a_stride(129)
300 .b_stride(123)
301 .y_stride(117)
302 .qmax(128)
303 .iterations(3)
304 .TestQ8();
305 }
306 }
307
TEST(ADD_NC_Q8,strided_batch_with_a_scale)308 TEST(ADD_NC_Q8, strided_batch_with_a_scale) {
309 for (size_t channels = 1; channels < 100; channels += 15) {
310 for (float a_scale = 1.0e-2f; a_scale < 1.0e+2f; a_scale *= 10.0f) {
311 AddOperatorTester()
312 .batch_size(3)
313 .channels(channels)
314 .a_stride(129)
315 .b_stride(123)
316 .y_stride(117)
317 .a_scale(a_scale)
318 .iterations(1)
319 .TestQ8();
320 }
321 }
322 }
323
TEST(ADD_NC_Q8,strided_batch_with_b_scale)324 TEST(ADD_NC_Q8, strided_batch_with_b_scale) {
325 for (size_t channels = 1; channels < 100; channels += 15) {
326 for (float b_scale = 1.0e-2f; b_scale < 1.0e+2f; b_scale *= 10.0f) {
327 AddOperatorTester()
328 .batch_size(3)
329 .channels(channels)
330 .a_stride(129)
331 .b_stride(123)
332 .y_stride(117)
333 .b_scale(b_scale)
334 .iterations(1)
335 .TestQ8();
336 }
337 }
338 }
339
TEST(ADD_NC_Q8,strided_batch_with_y_scale)340 TEST(ADD_NC_Q8, strided_batch_with_y_scale) {
341 for (size_t channels = 1; channels < 100; channels += 15) {
342 for (float y_scale = 1.0e-2f; y_scale < 1.0e+2f; y_scale *= 10.0f) {
343 AddOperatorTester()
344 .batch_size(3)
345 .channels(channels)
346 .a_stride(129)
347 .b_stride(123)
348 .y_stride(117)
349 .y_scale(y_scale)
350 .iterations(1)
351 .TestQ8();
352 }
353 }
354 }
355
TEST(ADD_NC_Q8,strided_batch_with_a_zero_point)356 TEST(ADD_NC_Q8, strided_batch_with_a_zero_point) {
357 for (size_t channels = 1; channels < 100; channels += 15) {
358 for (int32_t a_zero_point = 0; a_zero_point <= 255; a_zero_point += 51) {
359 AddOperatorTester()
360 .batch_size(3)
361 .channels(channels)
362 .a_stride(129)
363 .b_stride(123)
364 .y_stride(117)
365 .a_zero_point(uint8_t(a_zero_point))
366 .iterations(1)
367 .TestQ8();
368 }
369 }
370 }
371
TEST(ADD_NC_Q8,strided_batch_with_b_zero_point)372 TEST(ADD_NC_Q8, strided_batch_with_b_zero_point) {
373 for (size_t channels = 1; channels < 100; channels += 15) {
374 for (int32_t b_zero_point = 0; b_zero_point <= 255; b_zero_point += 51) {
375 AddOperatorTester()
376 .batch_size(3)
377 .channels(channels)
378 .a_stride(129)
379 .b_stride(123)
380 .y_stride(117)
381 .b_zero_point(uint8_t(b_zero_point))
382 .iterations(1)
383 .TestQ8();
384 }
385 }
386 }
387
TEST(ADD_NC_Q8,strided_batch_with_y_zero_point)388 TEST(ADD_NC_Q8, strided_batch_with_y_zero_point) {
389 for (size_t channels = 1; channels < 100; channels += 15) {
390 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
391 AddOperatorTester()
392 .batch_size(3)
393 .channels(channels)
394 .a_stride(129)
395 .b_stride(123)
396 .y_stride(117)
397 .y_zero_point(uint8_t(y_zero_point))
398 .iterations(1)
399 .TestQ8();
400 }
401 }
402 }
403
TEST(ADD_NC_F32,unit_batch)404 TEST(ADD_NC_F32, unit_batch) {
405 for (size_t channels = 1; channels < 100; channels += 15) {
406 AddOperatorTester()
407 .batch_size(1)
408 .channels(channels)
409 .iterations(3)
410 .TestF32();
411 }
412 }
413
TEST(ADD_NC_F32,unit_batch_with_qmin)414 TEST(ADD_NC_F32, unit_batch_with_qmin) {
415 for (size_t channels = 1; channels < 100; channels += 15) {
416 AddOperatorTester()
417 .batch_size(1)
418 .channels(channels)
419 .qmin(128)
420 .iterations(3)
421 .TestF32();
422 }
423 }
424
TEST(ADD_NC_F32,unit_batch_with_qmax)425 TEST(ADD_NC_F32, unit_batch_with_qmax) {
426 for (size_t channels = 1; channels < 100; channels += 15) {
427 AddOperatorTester()
428 .batch_size(1)
429 .channels(channels)
430 .qmax(128)
431 .iterations(3)
432 .TestF32();
433 }
434 }
435
TEST(ADD_NC_F32,small_batch)436 TEST(ADD_NC_F32, small_batch) {
437 for (size_t channels = 1; channels < 100; channels += 15) {
438 AddOperatorTester()
439 .batch_size(3)
440 .channels(channels)
441 .iterations(3)
442 .TestF32();
443 }
444 }
445
TEST(ADD_NC_F32,small_batch_with_a_stride)446 TEST(ADD_NC_F32, small_batch_with_a_stride) {
447 for (size_t channels = 1; channels < 100; channels += 15) {
448 AddOperatorTester()
449 .batch_size(3)
450 .channels(channels)
451 .a_stride(129)
452 .iterations(3)
453 .TestF32();
454 }
455 }
456
TEST(ADD_NC_F32,small_batch_with_b_stride)457 TEST(ADD_NC_F32, small_batch_with_b_stride) {
458 for (size_t channels = 1; channels < 100; channels += 15) {
459 AddOperatorTester()
460 .batch_size(3)
461 .channels(channels)
462 .b_stride(123)
463 .iterations(3)
464 .TestF32();
465 }
466 }
467
TEST(ADD_NC_F32,small_batch_with_y_stride)468 TEST(ADD_NC_F32, small_batch_with_y_stride) {
469 for (size_t channels = 1; channels < 100; channels += 15) {
470 AddOperatorTester()
471 .batch_size(3)
472 .channels(channels)
473 .y_stride(117)
474 .iterations(3)
475 .TestF32();
476 }
477 }
478
TEST(ADD_NC_F32,small_batch_with_qmin)479 TEST(ADD_NC_F32, small_batch_with_qmin) {
480 for (size_t channels = 1; channels < 100; channels += 15) {
481 AddOperatorTester()
482 .batch_size(3)
483 .channels(channels)
484 .qmin(128)
485 .iterations(3)
486 .TestF32();
487 }
488 }
489
TEST(ADD_NC_F32,small_batch_with_qmax)490 TEST(ADD_NC_F32, small_batch_with_qmax) {
491 for (size_t channels = 1; channels < 100; channels += 15) {
492 AddOperatorTester()
493 .batch_size(3)
494 .channels(channels)
495 .qmax(128)
496 .iterations(3)
497 .TestF32();
498 }
499 }
500
TEST(ADD_NC_F32,strided_batch)501 TEST(ADD_NC_F32, strided_batch) {
502 for (size_t channels = 1; channels < 100; channels += 15) {
503 AddOperatorTester()
504 .batch_size(3)
505 .channels(channels)
506 .a_stride(129)
507 .b_stride(123)
508 .y_stride(117)
509 .iterations(3)
510 .TestF32();
511 }
512 }
513
TEST(ADD_NC_F32,strided_batch_with_qmin)514 TEST(ADD_NC_F32, strided_batch_with_qmin) {
515 for (size_t channels = 1; channels < 100; channels += 15) {
516 AddOperatorTester()
517 .batch_size(3)
518 .channels(channels)
519 .a_stride(129)
520 .b_stride(123)
521 .y_stride(117)
522 .qmin(128)
523 .iterations(3)
524 .TestF32();
525 }
526 }
527
TEST(ADD_NC_F32,strided_batch_with_qmax)528 TEST(ADD_NC_F32, strided_batch_with_qmax) {
529 for (size_t channels = 1; channels < 100; channels += 15) {
530 AddOperatorTester()
531 .batch_size(3)
532 .channels(channels)
533 .a_stride(129)
534 .b_stride(123)
535 .y_stride(117)
536 .qmax(128)
537 .iterations(3)
538 .TestF32();
539 }
540 }
541