xref: /aosp_15_r20/external/XNNPACK/test/transpose-nd.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1 #include <gtest/gtest.h>
2 
3 #include <algorithm>
4 
5 #include "transpose-operator-tester.h"
6 
7 TEST(TRANSPOSE_ND_X32_2, 1D_redundant_dim) {
8   TransposeOperatorTester()
9       .num_dims(1)
10       .shape({1})
11       .perm({0})
12       .TestX32();
13 }
14 
15 TEST(TRANSPOSE_ND_X8, 1D) {
16   TransposeOperatorTester()
17       .num_dims(1)
18       .shape({713})
19       .perm({0})
20       .TestX8();
21 }
22 
TEST(TRANSPOSE_ND_X8,Run1D)23 TEST(TRANSPOSE_ND_X8, Run1D) {
24   TransposeOperatorTester()
25       .num_dims(1)
26       .shape({713})
27       .perm({0})
28       .TestRunX8();
29 }
30 
31 TEST(TRANSPOSE_ND_X8, 2D) {
32   std::vector<size_t> perm{0,1};
33   do {
34     TransposeOperatorTester()
35         .num_dims(2)
36         .shape({37, 113})
37         .perm(perm)
38         .TestX8();
39   } while (std::next_permutation(perm.begin(), perm.end()));
40 }
41 
TEST(TRANSPOSE_ND_X8,Run2D)42 TEST(TRANSPOSE_ND_X8, Run2D) {
43   std::vector<size_t> perm{0,1};
44   do {
45     TransposeOperatorTester()
46         .num_dims(2)
47         .shape({37, 113})
48         .perm(perm)
49         .TestRunX8();
50   } while (std::next_permutation(perm.begin(), perm.end()));
51 }
52 
53 TEST(TRANSPOSE_ND_X8, 3D) {
54   std::vector<size_t> perm{0,1,2};
55   do {
56     TransposeOperatorTester()
57         .num_dims(3)
58         .shape({5, 7, 11})
59         .perm(perm)
60         .TestX8();
61   } while (std::next_permutation(perm.begin(), perm.end()));
62 }
63 
TEST(TRANSPOSE_ND_X8,Run3D)64 TEST(TRANSPOSE_ND_X8, Run3D) {
65   std::vector<size_t> perm{0,1,2};
66   do {
67     TransposeOperatorTester()
68         .num_dims(3)
69         .shape({5, 7, 11})
70         .perm(perm)
71         .TestRunX8();
72   } while (std::next_permutation(perm.begin(), perm.end()));
73 }
74 
75 TEST(TRANSPOSE_ND_X32, 4D_copy) {
76   TransposeOperatorTester()
77       .num_dims(4)
78       .shape({2,2,1,1})
79       .perm({0,2,3,1})
80       .TestX32();
81 }
82 
83 TEST(TRANSPOSE_ND_X8, 4D) {
84   std::vector<size_t> perm{0,1,2,3};
85   do {
86     TransposeOperatorTester()
87         .num_dims(4)
88         .shape({5,7,11,13})
89         .perm(perm)
90         .TestX8();
91   } while (std::next_permutation(perm.begin(), perm.end()));
92 }
93 
TEST(TRANSPOSE_ND_X8,Run4D)94 TEST(TRANSPOSE_ND_X8, Run4D) {
95   std::vector<size_t> perm{0,1,2,3};
96   do {
97     TransposeOperatorTester()
98         .num_dims(4)
99         .shape({5,7,11,13})
100         .perm(perm)
101         .TestRunX8();
102   } while (std::next_permutation(perm.begin(), perm.end()));
103 }
104 
105 TEST(TRANSPOSE_ND_X8, 5D) {
106   std::vector<size_t> perm{0,1,2,3,4};
107   do {
108     TransposeOperatorTester()
109         .num_dims(5)
110         .shape({3,5,7,11,13})
111         .perm(perm)
112         .TestX8();
113   } while (std::next_permutation(perm.begin(), perm.end()));
114 }
115 
TEST(TRANSPOSE_ND_X8,Run5D)116 TEST(TRANSPOSE_ND_X8, Run5D) {
117   std::vector<size_t> perm{0,1,2,3,4};
118   do {
119     TransposeOperatorTester()
120         .num_dims(5)
121         .shape({3,5,7,11,13})
122         .perm(perm)
123         .TestRunX8();
124   } while (std::next_permutation(perm.begin(), perm.end()));
125 }
126 
127 TEST(TRANSPOSE_ND_X8, 6D) {
128   std::vector<size_t> perm{0,1,2,3,4,5};
129   do {
130     TransposeOperatorTester()
131         .num_dims(6)
132         .shape({2,3,5,7,11,13})
133         .perm(perm)
134         .TestX8();
135   } while (std::next_permutation(perm.begin(), perm.end()));
136 }
137 
TEST(TRANSPOSE_ND_X8,Run6D)138 TEST(TRANSPOSE_ND_X8, Run6D) {
139   std::vector<size_t> perm{0,1,2,3,4,5};
140   do {
141     TransposeOperatorTester()
142         .num_dims(6)
143         .shape({2,3,5,7,11,13})
144         .perm(perm)
145         .TestRunX8();
146   } while (std::next_permutation(perm.begin(), perm.end()));
147 }
148 
149 TEST(TRANSPOSE_ND_X16, 1D) {
150   TransposeOperatorTester()
151       .num_dims(1)
152       .shape({713})
153       .perm({0})
154       .TestX16();
155 }
156 
TEST(TRANSPOSE_ND_X16,Run1D)157 TEST(TRANSPOSE_ND_X16, Run1D) {
158   TransposeOperatorTester()
159       .num_dims(1)
160       .shape({713})
161       .perm({0})
162       .TestRunX16();
163 }
164 
165 TEST(TRANSPOSE_ND_X16, 2D) {
166   std::vector<size_t> perm{0,1};
167   do {
168     TransposeOperatorTester()
169         .num_dims(2)
170         .shape({37, 113})
171         .perm(perm)
172         .TestX16();
173   } while (std::next_permutation(perm.begin(), perm.end()));
174 }
175 
TEST(TRANSPOSE_ND_X16,Run2D)176 TEST(TRANSPOSE_ND_X16, Run2D) {
177   std::vector<size_t> perm{0,1};
178   do {
179     TransposeOperatorTester()
180         .num_dims(2)
181         .shape({37, 113})
182         .perm(perm)
183         .TestRunX16();
184   } while (std::next_permutation(perm.begin(), perm.end()));
185 }
186 
187 TEST(TRANSPOSE_ND_X16, 3D) {
188   std::vector<size_t> perm{0,1,2};
189   do {
190     TransposeOperatorTester()
191         .num_dims(3)
192         .shape({5, 7, 11})
193         .perm(perm)
194         .TestX16();
195   } while (std::next_permutation(perm.begin(), perm.end()));
196 }
197 
TEST(TRANSPOSE_ND_X16,Run3D)198 TEST(TRANSPOSE_ND_X16, Run3D) {
199   std::vector<size_t> perm{0,1,2};
200   do {
201     TransposeOperatorTester()
202         .num_dims(3)
203         .shape({5, 7, 11})
204         .perm(perm)
205         .TestRunX16();
206   } while (std::next_permutation(perm.begin(), perm.end()));
207 }
208 
209 TEST(TRANSPOSE_ND_X16, 4D) {
210   std::vector<size_t> perm{0,1,2,3};
211   do {
212     TransposeOperatorTester()
213         .num_dims(4)
214         .shape({5,7,11,13})
215         .perm(perm)
216         .TestX16();
217   } while (std::next_permutation(perm.begin(), perm.end()));
218 }
219 
TEST(TRANSPOSE_ND_X16,Run4D)220 TEST(TRANSPOSE_ND_X16, Run4D) {
221   std::vector<size_t> perm{0,1,2,3};
222   do {
223     TransposeOperatorTester()
224         .num_dims(4)
225         .shape({5,7,11,13})
226         .perm(perm)
227         .TestRunX16();
228   } while (std::next_permutation(perm.begin(), perm.end()));
229 }
230 
231 TEST(TRANSPOSE_ND_X16, 5D) {
232   std::vector<size_t> perm{0,1,2,3,4};
233   do {
234     TransposeOperatorTester()
235         .num_dims(5)
236         .shape({3,5,7,11,13})
237         .perm(perm)
238         .TestX16();
239   } while (std::next_permutation(perm.begin(), perm.end()));
240 }
241 
TEST(TRANSPOSE_ND_X16,Run5D)242 TEST(TRANSPOSE_ND_X16, Run5D) {
243   std::vector<size_t> perm{0,1,2,3,4};
244   do {
245     TransposeOperatorTester()
246         .num_dims(5)
247         .shape({3,5,7,11,13})
248         .perm(perm)
249         .TestX16();
250   } while (std::next_permutation(perm.begin(), perm.end()));
251 }
252 
253 TEST(TRANSPOSE_ND_X16, 6D) {
254   std::vector<size_t> perm{0,1,2,3,4,5};
255   do {
256     TransposeOperatorTester()
257         .num_dims(6)
258         .shape({2,3,5,7,11,13})
259         .perm(perm)
260         .TestX16();
261   } while (std::next_permutation(perm.begin(), perm.end()));
262 }
263 
TEST(TRANSPOSE_ND_X16,Run6D)264 TEST(TRANSPOSE_ND_X16, Run6D) {
265   std::vector<size_t> perm{0,1,2,3,4,5};
266   do {
267     TransposeOperatorTester()
268         .num_dims(6)
269         .shape({2,3,5,7,11,13})
270         .perm(perm)
271         .TestRunX16();
272   } while (std::next_permutation(perm.begin(), perm.end()));
273 }
274 
275 TEST(TRANSPOSE_ND_X32, 1D) {
276   TransposeOperatorTester()
277       .num_dims(1)
278       .shape({713})
279       .perm({0})
280       .TestX32();
281 }
282 
TEST(TRANSPOSE_ND_X32,Run1D)283 TEST(TRANSPOSE_ND_X32, Run1D) {
284   TransposeOperatorTester()
285       .num_dims(1)
286       .shape({713})
287       .perm({0})
288       .TestRunX32();
289 }
290 
291 TEST(TRANSPOSE_ND_X32, 2D_all_dimensions_redundant) {
292   TransposeOperatorTester()
293       .num_dims(2)
294       .shape({1, 1})
295       .perm({1, 0})
296       .TestX32();
297 }
298 
299 TEST(TRANSPOSE_ND_X32, 2D) {
300   std::vector<size_t> perm{0,1};
301   do {
302     TransposeOperatorTester()
303         .num_dims(2)
304         .shape({37, 113})
305         .perm(perm)
306         .TestX32();
307   } while (std::next_permutation(perm.begin(), perm.end()));
308 }
309 
TEST(TRANSPOSE_ND_X32,Run2D)310 TEST(TRANSPOSE_ND_X32, Run2D) {
311   std::vector<size_t> perm{0,1};
312   do {
313     TransposeOperatorTester()
314         .num_dims(2)
315         .shape({37, 113})
316         .perm(perm)
317         .TestRunX32();
318   } while (std::next_permutation(perm.begin(), perm.end()));
319 }
320 
321 TEST(TRANSPOSE_ND_X32, 3D_redundant_dimension) {
322   TransposeOperatorTester()
323       .num_dims(3)
324       .shape({2, 1, 3})
325       .perm({0, 2, 1})
326       .TestX32();
327 }
328 
329 TEST(TRANSPOSE_ND_X32, 3D) {
330   std::vector<size_t> perm{0,1,2};
331   do {
332     TransposeOperatorTester()
333         .num_dims(3)
334         .shape({5, 7, 11})
335         .perm(perm)
336         .TestX32();
337   } while (std::next_permutation(perm.begin(), perm.end()));
338 }
339 
TEST(TRANSPOSE_ND_X32,Run3D)340 TEST(TRANSPOSE_ND_X32, Run3D) {
341   std::vector<size_t> perm{0,1,2};
342   do {
343     TransposeOperatorTester()
344         .num_dims(3)
345         .shape({5, 7, 11})
346         .perm(perm)
347         .TestRunX32();
348   } while (std::next_permutation(perm.begin(), perm.end()));
349 }
350 
351 TEST(TRANSPOSE_ND_X32, 4D) {
352   std::vector<size_t> perm{0,1,2,3};
353   do {
354     TransposeOperatorTester()
355         .num_dims(4)
356         .shape({5,7,11,13})
357         .perm(perm)
358         .TestX32();
359   } while (std::next_permutation(perm.begin(), perm.end()));
360 }
361 
TEST(TRANSPOSE_ND_X32,Run4D)362 TEST(TRANSPOSE_ND_X32, Run4D) {
363   std::vector<size_t> perm{0,1,2,3};
364   do {
365     TransposeOperatorTester()
366         .num_dims(4)
367         .shape({5,7,11,13})
368         .perm(perm)
369         .TestRunX32();
370   } while (std::next_permutation(perm.begin(), perm.end()));
371 }
372 
373 TEST(TRANSPOSE_ND_X32, 5D) {
374   std::vector<size_t> perm{0,1,2,3,4};
375   do {
376     TransposeOperatorTester()
377         .num_dims(5)
378         .shape({3,5,7,11,13})
379         .perm(perm)
380         .TestX32();
381   } while (std::next_permutation(perm.begin(), perm.end()));
382 }
383 
TEST(TRANSPOSE_ND_X32,Run5D)384 TEST(TRANSPOSE_ND_X32, Run5D) {
385   std::vector<size_t> perm{0,1,2,3,4};
386   do {
387     TransposeOperatorTester()
388         .num_dims(5)
389         .shape({3,5,7,11,13})
390         .perm(perm)
391         .TestRunX32();
392   } while (std::next_permutation(perm.begin(), perm.end()));
393 }
394 
395 TEST(TRANSPOSE_ND_X32, 6D) {
396   std::vector<size_t> perm{0,1,2,3,4,5};
397   do {
398     TransposeOperatorTester()
399         .num_dims(6)
400         .shape({2,3,5,7,11,13})
401         .perm(perm)
402         .TestX32();
403   } while (std::next_permutation(perm.begin(), perm.end()));
404 }
405 
TEST(TRANSPOSE_ND_X32,Run6D)406 TEST(TRANSPOSE_ND_X32, Run6D) {
407   std::vector<size_t> perm{0,1,2,3,4,5};
408   do {
409     TransposeOperatorTester()
410         .num_dims(6)
411         .shape({2,3,5,7,11,13})
412         .perm(perm)
413         .TestRunX32();
414   } while (std::next_permutation(perm.begin(), perm.end()));
415 }
416 
417 TEST(TRANSPOSE_ND_X32, 6D_DIMS_1) {
418   std::vector<size_t> perm{0,1,2,3,4,5};
419   do {
420     TransposeOperatorTester()
421         .num_dims(6)
422         .shape({1,1,1,2,3,4})
423         .perm(perm)
424         .TestX32();
425   } while (std::next_permutation(perm.begin(), perm.end()));
426 }
427