1 #include <gtest/gtest.h>
2
3 #include <xnnpack.h>
4 #include <xnnpack/normalization.h>
5
6 #include "transpose-normalization-tester.h"
7
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_fold_0_1)8 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_fold_0_1) {
9 TransposeNormalizationTester()
10 .num_dims(4)
11 .element_size(4)
12 .perm({0,1,3,2})
13 .shape({5,4,3,2})
14 .input_stride({24,6,2,1})
15 .expected_shape({20,3,2})
16 .expected_perm({0,2,1})
17 .expected_dims(3)
18 .expected_element_size(4)
19 .expected_input_stride({24,8,4})
20 .calculate_expected_output_stride()
21 .Test();
22 }
23
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride_fold_0_1)24 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride_fold_0_1) {
25 TransposeNormalizationTester()
26 .num_dims(4)
27 .element_size(4)
28 .perm({0,1,3,2})
29 .shape({5,4,3,2})
30 .output_stride({24,6,3,1})
31 .expected_shape({20,3,2})
32 .expected_perm({0,2,1})
33 .expected_dims(3)
34 .expected_element_size(4)
35 .calculate_expected_input_stride()
36 .calculate_expected_output_stride()
37 .Test();
38 }
39
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride)40 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride) {
41 TransposeNormalizationTester()
42 .num_dims(6)
43 .element_size(1)
44 .perm({1,0,3,2,5,4})
45 .shape({5,4,3,2,6,7})
46 .output_stride({1260,252,126,42,6,1})
47 .expected_shape({5,4,3,2,6,7})
48 .expected_perm({1,0,3,2,5,4})
49 .expected_dims(6)
50 .expected_element_size(1)
51 .calculate_expected_input_stride()
52 .calculate_expected_output_stride()
53 .Test();
54 }
55
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride_fold_2_3)56 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride_fold_2_3) {
57 TransposeNormalizationTester()
58 .num_dims(6)
59 .element_size(1)
60 .perm({1,0,2,3,5,4})
61 .shape({5,4,3,2,6,7})
62 .output_stride({1260,252,84,42,6,1})
63 .expected_shape({5,4,6,6,7})
64 .expected_perm({1,0,2,4,3})
65 .expected_dims(5)
66 .expected_element_size(1)
67 .calculate_expected_input_stride()
68 .calculate_expected_output_stride()
69 .Test();
70 }
71
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride_no_fold_2_3)72 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride_no_fold_2_3) {
73 TransposeNormalizationTester()
74 .num_dims(6)
75 .element_size(1)
76 .perm({1,0,2,3,5,4})
77 .shape({5,4,3,2,6,7})
78 .output_stride({1275,255,85,42,6,1})
79 .expected_shape({5,4,3,2,6,7})
80 .expected_perm({1,0,2,3,5,4})
81 .expected_dims(6)
82 .expected_element_size(1)
83 .calculate_expected_input_stride()
84 .expected_output_stride({1275,255,85,42,6,1})
85 .Test();
86 }
87
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride_fold_2_3_with_large_strides)88 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride_fold_2_3_with_large_strides) {
89 TransposeNormalizationTester()
90 .num_dims(6)
91 .element_size(1)
92 .perm({1,0,2,3,5,4})
93 .shape({5,4,3,2,6,7})
94 .output_stride({1290,258,86,43,6,1})
95 .expected_shape({5,4,6,6,7})
96 .expected_perm({1,0,2,4,3})
97 .expected_dims(5)
98 .expected_element_size(1)
99 .calculate_expected_input_stride()
100 .expected_output_stride({1290,258,43,6,1})
101 .Test();
102 }
103
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride_fold_last_dim)104 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride_fold_last_dim) {
105 TransposeNormalizationTester()
106 .num_dims(6)
107 .element_size(1)
108 .perm({1,0,2,4,3,5})
109 .shape({5,4,3,2,6,7})
110 .output_stride({1260,252,84,14,7,1})
111 .expected_shape({5,4,3,2,6})
112 .expected_perm({1,0,2,4,3})
113 .expected_dims(5)
114 .expected_element_size(7)
115 .calculate_expected_input_stride()
116 .expected_output_stride({1260,252,84,14,7})
117 .Test();
118 }
119
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride_remove_dim_size_1)120 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride_remove_dim_size_1) {
121 TransposeNormalizationTester()
122 .num_dims(6)
123 .element_size(1)
124 .perm({1,0,3,2,5,4})
125 .shape({5,4,1,2,6,7})
126 .output_stride({420,84,42,42,6,1})
127 .expected_shape({5,4,2,6,7})
128 .expected_perm({1,0,2,4,3})
129 .expected_dims(5)
130 .expected_element_size(1)
131 .calculate_expected_input_stride()
132 .expected_output_stride({420,84,42,6,1})
133 .Test();
134 }
135
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride_no_remove_dim_size_1)136 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride_no_remove_dim_size_1) {
137 TransposeNormalizationTester()
138 .num_dims(6)
139 .element_size(1)
140 .perm({1,0,3,2,5,4})
141 .shape({5,4,1,2,6,7})
142 .output_stride({420,86,43,42,6,1})
143 .expected_shape({5,4,1,2,6,7})
144 .expected_perm({1,0,3,2,5,4})
145 .expected_dims(6)
146 .expected_element_size(1)
147 .calculate_expected_input_stride()
148 .expected_output_stride({420,86,43,42,6,1})
149 .Test();
150 }
151
TEST(TRANSPOSE_NORMALIZATION_TEST,output_stride_remove_dim_size_1_4bytes)152 TEST(TRANSPOSE_NORMALIZATION_TEST, output_stride_remove_dim_size_1_4bytes) {
153 TransposeNormalizationTester()
154 .num_dims(6)
155 .element_size(4)
156 .perm({1,0,3,2,5,4})
157 .shape({5,4,1,2,6,7})
158 .output_stride({420,84,42,42,6,1})
159 .expected_shape({5,4,2,6,7})
160 .expected_perm({1,0,2,4,3})
161 .expected_dims(5)
162 .expected_element_size(4)
163 .calculate_expected_input_stride()
164 .expected_output_stride({1680,336,168,24,4})
165 .Test();
166 }
167
TEST(TRANSPOSE_NORMALIZATION_TEST,input_output_stride_remove_dim_size_1)168 TEST(TRANSPOSE_NORMALIZATION_TEST, input_output_stride_remove_dim_size_1) {
169 TransposeNormalizationTester()
170 .num_dims(6)
171 .element_size(4)
172 .perm({1,0,3,2,5,4})
173 .shape({5,4,1,2,6,7})
174 .input_stride({336,84,84,42,7,1})
175 .output_stride({420,84,42,42,6,1})
176 .expected_shape({5,4,2,6,7})
177 .expected_perm({1,0,2,4,3})
178 .expected_dims(5)
179 .expected_element_size(4)
180 .expected_input_stride({1344,336,168,28,4})
181 .expected_output_stride({1680,336,168,24,4})
182 .Test();
183 }
184
TEST(TRANSPOSE_NORMALIZATION_TEST,input_output_stride_remove_fold_large_element)185 TEST(TRANSPOSE_NORMALIZATION_TEST, input_output_stride_remove_fold_large_element) {
186 TransposeNormalizationTester()
187 .num_dims(6)
188 .element_size(1)
189 .perm({1,0,3,2,5,4})
190 .shape({5,4,1,2,1,7})
191 .input_stride({56,14,14,7,7,1})
192 .output_stride({70,14,7,7,1,1})
193 .expected_shape({5,4})
194 .expected_perm({1,0})
195 .expected_dims(2)
196 .expected_element_size(14)
197 .expected_input_stride({56,14})
198 .expected_output_stride({70,14})
199 .Test();
200 }
201
TEST(TRANSPOSE_NORMALIZATION_TEST,input_output_stride_no_remove_dim_size_1)202 TEST(TRANSPOSE_NORMALIZATION_TEST, input_output_stride_no_remove_dim_size_1) {
203 TransposeNormalizationTester()
204 .num_dims(6)
205 .element_size(1)
206 .perm({1,0,3,2,5,4})
207 .shape({5,4,1,2,1,7})
208 .input_stride({70,15,14,7,7,1})
209 .output_stride({140,28,14,14,2,1})
210 .expected_shape({5,4,1,2,1,7})
211 .expected_perm({1,0,3,2,5,4})
212 .expected_dims(6)
213 .expected_element_size(1)
214 .expected_input_stride({70,15,14,7,7,1})
215 .expected_output_stride({140,28,14,14,2,1})
216 .Test();
217 }
218
TEST(TRANSPOSE_NORMALIZATION_TEST,input_output_stride_no_remove_dim_1_no_fold)219 TEST(TRANSPOSE_NORMALIZATION_TEST, input_output_stride_no_remove_dim_1_no_fold) {
220 TransposeNormalizationTester()
221 .num_dims(6)
222 .element_size(1)
223 .perm({5,4,1,2,0,3})
224 .shape({4,9,7,2,1,6})
225 .input_stride({882,98,14,7,6,1})
226 .output_stride({505,505,56,8,2,1})
227 .expected_shape({4,9,7,2,1,6})
228 .expected_perm({5,4,1,2,0,3})
229 .expected_dims(6)
230 .expected_element_size(1)
231 .expected_input_stride({882,98,14,7,6,1})
232 .expected_output_stride({505,505,56,8,2,1})
233 .Test();
234 }
235
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride)236 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride) {
237 TransposeNormalizationTester()
238 .num_dims(4)
239 .element_size(4)
240 .perm({3,1,2,0})
241 .shape({5,4,3,2})
242 .input_stride({24,6,2,1})
243 .expected_shape({5,12,2})
244 .expected_perm({2,1,0})
245 .expected_dims(3)
246 .expected_element_size(4)
247 .expected_input_stride({96,8,4})
248 .calculate_expected_output_stride()
249 .Test();
250 }
251
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_remove_dim_1)252 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_remove_dim_1) {
253 TransposeNormalizationTester()
254 .num_dims(4)
255 .element_size(4)
256 .perm({3,2,1,0})
257 .shape({5,4,1,2})
258 .input_stride({8,2,2,1})
259 .expected_shape({5,4,2})
260 .expected_perm({2,1,0})
261 .expected_dims(3)
262 .expected_element_size(4)
263 .expected_input_stride({32,8,4})
264 .calculate_expected_output_stride()
265 .Test();
266 }
267
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_elem_size_1)268 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_elem_size_1) {
269 TransposeNormalizationTester()
270 .num_dims(4)
271 .element_size(1)
272 .perm({3,2,1,0})
273 .shape({5,4,2,2})
274 .input_stride({16,4,2,1})
275 .expected_shape({5,4,2,2})
276 .expected_perm({3,2,1,0})
277 .expected_dims(4)
278 .expected_element_size(1)
279 .expected_input_stride({16,4,2,1})
280 .calculate_expected_output_stride()
281 .Test();
282 }
283
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_strided)284 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_strided) {
285 TransposeNormalizationTester()
286 .num_dims(5)
287 .element_size(1)
288 .perm({3,1,2,4,0})
289 .shape({5,4,2,2,3})
290 .input_stride({96,24,6,3,1})
291 .expected_shape({5,4,2,2,3})
292 .expected_perm({3,1,2,4,0})
293 .expected_dims(5)
294 .expected_element_size(1)
295 .expected_input_stride({96,24,6,3,1})
296 .calculate_expected_output_stride()
297 .Test();
298 }
299
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_strided_size_1_dims)300 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_strided_size_1_dims) {
301 TransposeNormalizationTester()
302 .num_dims(6)
303 .element_size(1)
304 .perm({2,1,3,5,4,0})
305 .shape({5,4,2,1,1,7})
306 .input_stride({112,28,14,14,7,1})
307 .expected_shape({5,4,2,1,7})
308 .expected_perm({2,1,4,3,0})
309 .expected_dims(5)
310 .expected_element_size(1)
311 .expected_input_stride({112,28,14,7,1})
312 .calculate_expected_output_stride()
313 .Test();
314 }
315
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_size_1_dims_flatten)316 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_size_1_dims_flatten) {
317 TransposeNormalizationTester()
318 .num_dims(6)
319 .element_size(1)
320 .perm({3,4,5,2,1,0})
321 .shape({1,4,1,3,5,7})
322 .input_stride({420,105,105,35,7,1})
323 .expected_shape({4,105})
324 .expected_perm({1,0})
325 .expected_dims(2)
326 .expected_element_size(1)
327 .expected_input_stride({105,1})
328 .calculate_expected_output_stride()
329 .Test();
330 }
331
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_size_1_dims_flatten_strided)332 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_size_1_dims_flatten_strided) {
333 TransposeNormalizationTester()
334 .num_dims(6)
335 .element_size(1)
336 .perm({3,4,5,2,1,0})
337 .shape({1,4,1,3,5,7})
338 .input_stride({660,165,165,55,11,1})
339 .expected_shape({4,15,7})
340 .expected_perm({1,2,0})
341 .expected_dims(3)
342 .expected_element_size(1)
343 .expected_input_stride({165,11,1})
344 .calculate_expected_output_stride()
345 .Test();
346 }
347
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_size_1_dims_flatten_strided_copy)348 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_size_1_dims_flatten_strided_copy) {
349 TransposeNormalizationTester()
350 .num_dims(6)
351 .element_size(1)
352 .perm({1,0,3,4,2,5})
353 .shape({1,4,1,3,5,7})
354 .input_stride({668,167,115,35,7,1})
355 .expected_shape({4,1,15})
356 .expected_perm({0,2,1})
357 .expected_dims(3)
358 .expected_element_size(7)
359 .expected_input_stride({167,115,7})
360 .calculate_expected_output_stride()
361 .Test();
362 }
363
TEST(TRANSPOSE_NORMALIZATION_TEST,input_stride_size_1_dims_flatten_last_dim_strided_copy)364 TEST(TRANSPOSE_NORMALIZATION_TEST, input_stride_size_1_dims_flatten_last_dim_strided_copy) {
365 TransposeNormalizationTester()
366 .num_dims(6)
367 .element_size(4)
368 .perm({0,1,3,2,4,5})
369 .shape({2,4,1,3,5,7})
370 .input_stride({700,160,150,36,7,1})
371 .expected_shape({2,4,1,3,1})
372 .expected_perm({0,1,3,2,4})
373 .expected_dims(5)
374 .expected_element_size(140)
375 .expected_input_stride({2800,640,600,144,140})
376 .calculate_expected_output_stride()
377 .Test();
378 }
379
TEST(TRANSPOSE_NORMALIZATION_TEST,input_output_stride_size_1_dims_flatten_last_dim_strided_copy)380 TEST(TRANSPOSE_NORMALIZATION_TEST, input_output_stride_size_1_dims_flatten_last_dim_strided_copy) {
381 TransposeNormalizationTester()
382 .num_dims(6)
383 .element_size(4)
384 .perm({0,1,3,2,4,5})
385 .shape({2,4,1,3,5,7})
386 .input_stride({700,160,150,36,7,1})
387 .output_stride({420,105,35,35,7,1})
388 .expected_shape({2,4,1,3,1})
389 .expected_perm({0,1,3,2,4})
390 .expected_dims(5)
391 .expected_element_size(140)
392 .expected_input_stride({2800,640,600,144,140})
393 .expected_output_stride({1680,420,140,140,140})
394 .Test();
395 }
396
TEST(TRANSPOSE_NORMALIZATION_TEST,input_output_stride_flatten_last_dim_strided_copy)397 TEST(TRANSPOSE_NORMALIZATION_TEST, input_output_stride_flatten_last_dim_strided_copy) {
398 TransposeNormalizationTester()
399 .num_dims(5)
400 .element_size(4)
401 .perm({0,3,2,1,4})
402 .shape({4,2,3,5,7})
403 .output_stride({240,48,16,8,1})
404 .expected_shape({4,2,3,5,1})
405 .expected_perm({0,3,2,1,4})
406 .expected_dims(5)
407 .expected_element_size(28)
408 .calculate_expected_input_stride()
409 .expected_output_stride({960,192,64,32,28})
410 .Test();
411 }
412
TEST(TRANSPOSE_NORMALIZATION_TEST,adjacent_1_dims)413 TEST(TRANSPOSE_NORMALIZATION_TEST, adjacent_1_dims) {
414 TransposeNormalizationTester()
415 .num_dims(4)
416 .element_size(4)
417 .perm({0,1,3,2})
418 .shape({1,1,60,2400})
419 .expected_shape({60,2400})
420 .expected_perm({1,0})
421 .expected_dims(2)
422 .expected_element_size(4)
423 .calculate_expected_input_stride()
424 .calculate_expected_output_stride()
425 .Test();
426 }
427
428 TEST(TRANSPOSE_NORMALIZATION_TEST, 1D) {
429 TransposeNormalizationTester()
430 .num_dims(1)
431 .element_size(4)
432 .perm({0})
433 .shape({37})
434 .expected_shape({1})
435 .expected_perm({0})
436 .expected_dims(1)
437 .expected_element_size(37*4)
438 .calculate_expected_input_stride()
439 .calculate_expected_output_stride()
440 .Test();
441 }
442
443 TEST(TRANSPOSE_NORMALIZATION_TEST, 2D_flatten_1D) {
444 TransposeNormalizationTester()
445 .num_dims(2)
446 .element_size(4)
447 .perm({0,1})
448 .shape({37,19})
449 .expected_shape({1})
450 .expected_perm({0})
451 .expected_dims(1)
452 .expected_element_size(37*19*4)
453 .calculate_expected_input_stride()
454 .calculate_expected_output_stride()
455 .Test();
456 }
457
458 TEST(TRANSPOSE_NORMALIZATION_TEST, 2D_flatten_2D) {
459 TransposeNormalizationTester()
460 .num_dims(2)
461 .element_size(4)
462 .perm({1,0})
463 .shape({23,17})
464 .expected_shape({23,17})
465 .expected_perm({1,0})
466 .expected_dims(2)
467 .expected_element_size(4)
468 .calculate_expected_input_stride()
469 .calculate_expected_output_stride()
470 .Test();
471 }
472
473 TEST(TRANSPOSE_NORMALIZATION_TEST, 3D_redundant_dim) {
474 TransposeNormalizationTester()
475 .num_dims(3)
476 .element_size(4)
477 .perm({0,2,1})
478 .shape({2,1,3})
479 .expected_shape({1})
480 .expected_perm({0})
481 .expected_dims(1)
482 .expected_element_size(24)
483 .calculate_expected_input_stride()
484 .calculate_expected_output_stride()
485 .Test();
486 }
487
488 TEST(TRANSPOSE_NORMALIZATION_TEST, 3D_all_ones) {
489 TransposeNormalizationTester()
490 .num_dims(3)
491 .element_size(4)
492 .perm({2,1,0})
493 .shape({1,1,1})
494 .expected_shape({1})
495 .expected_perm({0})
496 .expected_dims(1)
497 .expected_element_size(4)
498 .calculate_expected_input_stride()
499 .calculate_expected_output_stride()
500 .Test();
501 }
502
503 TEST(TRANSPOSE_NORMALIZATION_TEST, 3D_flatten_1D) {
504 TransposeNormalizationTester()
505 .num_dims(3)
506 .element_size(4)
507 .perm({0,1,2})
508 .shape({101,13,7})
509 .expected_shape({1})
510 .expected_perm({0})
511 .expected_dims(1)
512 .expected_element_size(101*13*7*4)
513 .calculate_expected_input_stride()
514 .calculate_expected_output_stride()
515 .Test();
516 }
517
518 TEST(TRANSPOSE_NORMALIZATION_TEST, 3D_flatten_2D) {
519 TransposeNormalizationTester()
520 .num_dims(3)
521 .element_size(4)
522 .perm({2,0,1})
523 .shape({101,13,7})
524 .expected_shape({101*13,7})
525 .expected_perm({1,0})
526 .expected_dims(2)
527 .expected_element_size(4)
528 .calculate_expected_input_stride()
529 .calculate_expected_output_stride()
530 .Test();
531 }
532
533 TEST(TRANSPOSE_NORMALIZATION_TEST, 3D_flatten_element_size_2D) {
534 TransposeNormalizationTester()
535 .num_dims(3)
536 .element_size(4)
537 .perm({1,0,2})
538 .shape({101,13,7})
539 .expected_shape({101,13})
540 .expected_perm({1,0})
541 .expected_dims(2)
542 .expected_element_size(7*4)
543 .calculate_expected_input_stride()
544 .calculate_expected_output_stride()
545 .Test();
546 }
547
548 TEST(TRANSPOSE_NORMALIZATION_TEST, 3D_flatten_3D) {
549 TransposeNormalizationTester()
550 .num_dims(3)
551 .element_size(4)
552 .perm({2,1,0})
553 .shape({101,13,7})
554 .expected_shape({101,13,7})
555 .expected_perm({2,1,0})
556 .expected_dims(3)
557 .expected_element_size(4)
558 .calculate_expected_input_stride()
559 .calculate_expected_output_stride()
560 .Test();
561 }
562
563 TEST(TRANSPOSE_NORMALIZATION_TEST, 3D_redundant_dim_first) {
564 TransposeNormalizationTester()
565 .num_dims(3)
566 .element_size(4)
567 .perm({0,2,1})
568 .shape({1,19,13})
569 .expected_shape({19,13})
570 .expected_perm({1,0})
571 .expected_dims(2)
572 .expected_element_size(4)
573 .calculate_expected_input_stride()
574 .calculate_expected_output_stride()
575 .Test();
576 }
577
578 TEST(TRANSPOSE_NORMALIZATION_TEST, 4D_to_1D) {
579 TransposeNormalizationTester()
580 .num_dims(4)
581 .element_size(4)
582 .perm({0, 2, 3, 1})
583 .shape({2, 2, 1, 1})
584 .expected_shape({1})
585 .expected_perm({0})
586 .expected_dims(1)
587 .expected_element_size(16)
588 .calculate_expected_input_stride()
589 .calculate_expected_output_stride()
590 .Test();
591 }
592
593 TEST(TRANSPOSE_NORMALIZATION_TEST, 4D_flatten_element_size_2D) {
594 TransposeNormalizationTester()
595 .num_dims(4)
596 .element_size(1)
597 .perm({1,0,2,3})
598 .shape({101,13,7,19})
599 .expected_shape({101,13})
600 .expected_perm({1,0})
601 .expected_dims(2)
602 .expected_element_size(1*7*19)
603 .calculate_expected_input_stride()
604 .calculate_expected_output_stride()
605 .Test();
606 }
607
608 TEST(TRANSPOSE_NORMALIZATION_TEST, 4D_flatten_3D) {
609 TransposeNormalizationTester()
610 .num_dims(4)
611 .element_size(2)
612 .perm({0,3,1,2})
613 .shape({19,31,41,7})
614 .expected_shape({19,31*41,7})
615 .expected_perm({0,2,1})
616 .expected_dims(3)
617 .expected_element_size(2)
618 .calculate_expected_input_stride()
619 .calculate_expected_output_stride()
620 .Test();
621 }
622
623 TEST(TRANSPOSE_NORMALIZATION_TEST, 5D_double_flatten_3D) {
624 TransposeNormalizationTester()
625 .num_dims(5)
626 .element_size(4)
627 .perm({4,2,3,0,1})
628 .shape({19,13,31,41,7})
629 .expected_shape({19*13,31*41,7})
630 .expected_perm({2,1,0})
631 .expected_dims(3)
632 .expected_element_size(4)
633 .calculate_expected_input_stride()
634 .calculate_expected_output_stride()
635 .Test();
636 }
637
638 TEST(TRANSPOSE_NORMALIZATION_TEST, 5D_flatten_3D) {
639 TransposeNormalizationTester()
640 .num_dims(5)
641 .element_size(2)
642 .perm({4,3,0,1,2})
643 .shape({19,13,31,41,7})
644 .expected_shape({19*13*31,41,7})
645 .expected_perm({2,1,0})
646 .expected_dims(3)
647 .expected_element_size(2)
648 .calculate_expected_input_stride()
649 .calculate_expected_output_stride()
650 .Test();
651 }
652
653 TEST(TRANSPOSE_NORMALIZATION_TEST, 5D_flatten_4D) {
654 TransposeNormalizationTester()
655 .num_dims(5)
656 .element_size(2)
657 .perm({4,3,1,2,0})
658 .shape({19,13,31,41,7})
659 .expected_shape({19,13*31,41,7})
660 .expected_perm({3,2,1,0})
661 .expected_dims(4)
662 .expected_element_size(2)
663 .calculate_expected_input_stride()
664 .calculate_expected_output_stride()
665 .Test();
666 }
667
668 TEST(TRANSPOSE_NORMALIZATION_TEST, 5D_flatten_2D) {
669 TransposeNormalizationTester()
670 .num_dims(6)
671 .element_size(4)
672 .perm({4,5,0,1,2,3})
673 .shape({53,19,13,31,41,7})
674 .expected_shape({53*19*13*31,41*7})
675 .expected_perm({1,0})
676 .expected_dims(2)
677 .expected_element_size(4)
678 .calculate_expected_input_stride()
679 .calculate_expected_output_stride()
680 .Test();
681 }
682
683 TEST(TRANSPOSE_NORMALIZATION_TEST, 6D_flatten_3D) {
684 TransposeNormalizationTester()
685 .num_dims(6)
686 .element_size(4)
687 .perm({0,1,2,3,5,4})
688 .shape({53,19,13,31,41,7})
689 .expected_shape({53*19*13*31,41,7})
690 .expected_perm({0,2,1})
691 .expected_dims(3)
692 .expected_element_size(4)
693 .calculate_expected_input_stride()
694 .calculate_expected_output_stride()
695 .Test();
696 }
697
698 TEST(TRANSPOSE_NORMALIZATION_TEST, 6D_double_flatten_3D) {
699 TransposeNormalizationTester()
700 .num_dims(6)
701 .element_size(4)
702 .perm({0,3,1,2,4,5})
703 .shape({53,19,13,31,41,7})
704 .expected_shape({53,19*13,31})
705 .expected_perm({0,2,1})
706 .expected_dims(3)
707 .expected_element_size(4*41*7)
708 .calculate_expected_input_stride()
709 .calculate_expected_output_stride()
710 .Test();
711 }
712
713 TEST(TRANSPOSE_NORMALIZATION_TEST, 6D_double_flatten_4D) {
714 TransposeNormalizationTester()
715 .num_dims(6)
716 .element_size(4)
717 .perm({4,5,3,1,2,0})
718 .shape({53,19,13,31,41,7})
719 .expected_shape({53,19*13,31,41*7})
720 .expected_perm({3,2,1,0})
721 .expected_dims(4)
722 .expected_element_size(4)
723 .calculate_expected_input_stride()
724 .calculate_expected_output_stride()
725 .Test();
726 }
727
728 TEST(TRANSPOSE_NORMALIZATION_TEST, 6D_flatten_ones) {
729 TransposeNormalizationTester()
730 .num_dims(6)
731 .element_size(4)
732 .perm({5,4,3,2,1,0})
733 .shape({23,1,1,1,17,13})
734 .expected_shape({23,17,13})
735 .expected_perm({2,1,0})
736 .expected_dims(3)
737 .expected_element_size(4)
738 .calculate_expected_input_stride()
739 .calculate_expected_output_stride()
740 .Test();
741 }
742