• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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