xref: /aosp_15_r20/external/XNNPACK/test/transpose-normalization.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
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