1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker //
3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker
6*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h>
7*4bdc9457SAndroid Build Coastguard Worker
8*4bdc9457SAndroid Build Coastguard Worker #include "argmax-pooling-operator-tester.h"
9*4bdc9457SAndroid Build Coastguard Worker
10*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/params.h>
11*4bdc9457SAndroid Build Coastguard Worker
12*4bdc9457SAndroid Build Coastguard Worker
FindMaxSinglePassPoolingSize(const argmaxpool_parameters * ukernel)13*4bdc9457SAndroid Build Coastguard Worker static uint32_t FindMaxSinglePassPoolingSize(const argmaxpool_parameters* ukernel) {
14*4bdc9457SAndroid Build Coastguard Worker uint32_t mr = 0;
15*4bdc9457SAndroid Build Coastguard Worker while (ukernel->qr == 0) {
16*4bdc9457SAndroid Build Coastguard Worker mr = std::max<uint32_t>(mr, ukernel->mr);
17*4bdc9457SAndroid Build Coastguard Worker ukernel++;
18*4bdc9457SAndroid Build Coastguard Worker }
19*4bdc9457SAndroid Build Coastguard Worker return mr;
20*4bdc9457SAndroid Build Coastguard Worker }
21*4bdc9457SAndroid Build Coastguard Worker
FindMultiPassMicroKernel(const argmaxpool_parameters * ukernel)22*4bdc9457SAndroid Build Coastguard Worker static argmaxpool_parameters FindMultiPassMicroKernel(const argmaxpool_parameters* ukernel) {
23*4bdc9457SAndroid Build Coastguard Worker while (ukernel->qr == 0) {
24*4bdc9457SAndroid Build Coastguard Worker ukernel++;
25*4bdc9457SAndroid Build Coastguard Worker }
26*4bdc9457SAndroid Build Coastguard Worker return *ukernel;
27*4bdc9457SAndroid Build Coastguard Worker }
28*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_small_1xM_pool)29*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_small_1xM_pool) {
30*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
31*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
32*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
33*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
34*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
35*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
36*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
37*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
38*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
39*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
40*4bdc9457SAndroid Build Coastguard Worker .TestF32();
41*4bdc9457SAndroid Build Coastguard Worker }
42*4bdc9457SAndroid Build Coastguard Worker }
43*4bdc9457SAndroid Build Coastguard Worker }
44*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_small_1xM_pool_with_padding)45*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_small_1xM_pool_with_padding) {
46*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
47*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
48*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 3; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
49*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_left = 0; padding_left <= 1; padding_left++) {
50*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_right = 0; padding_right <= 1; padding_right++) {
51*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
52*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
53*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
54*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
55*4bdc9457SAndroid Build Coastguard Worker .padding_left(padding_left)
56*4bdc9457SAndroid Build Coastguard Worker .padding_right(padding_right)
57*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
58*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
59*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
60*4bdc9457SAndroid Build Coastguard Worker .TestF32();
61*4bdc9457SAndroid Build Coastguard Worker }
62*4bdc9457SAndroid Build Coastguard Worker }
63*4bdc9457SAndroid Build Coastguard Worker }
64*4bdc9457SAndroid Build Coastguard Worker }
65*4bdc9457SAndroid Build Coastguard Worker }
66*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_small_1xM_pool_with_tf_same_padding)67*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_small_1xM_pool_with_tf_same_padding) {
68*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
69*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
70*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 3; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
71*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = pool_size + 1; input_width <= pool_size; input_width++) {
72*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
73*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
74*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
75*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width)
76*4bdc9457SAndroid Build Coastguard Worker .padding_tf_same(true)
77*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
78*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
79*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
80*4bdc9457SAndroid Build Coastguard Worker .TestF32();
81*4bdc9457SAndroid Build Coastguard Worker }
82*4bdc9457SAndroid Build Coastguard Worker }
83*4bdc9457SAndroid Build Coastguard Worker }
84*4bdc9457SAndroid Build Coastguard Worker }
85*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_small_Mx1_pool)86*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_small_Mx1_pool) {
87*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
88*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
89*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
90*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
91*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
92*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
93*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
94*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
95*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
96*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
97*4bdc9457SAndroid Build Coastguard Worker .TestF32();
98*4bdc9457SAndroid Build Coastguard Worker }
99*4bdc9457SAndroid Build Coastguard Worker }
100*4bdc9457SAndroid Build Coastguard Worker }
101*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_small_Mx1_pool_with_padding)102*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_small_Mx1_pool_with_padding) {
103*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
104*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
105*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
106*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_top = 0; padding_top <= 1; padding_top++) {
107*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_bottom = 0; padding_bottom <= 1; padding_bottom++) {
108*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
109*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
110*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
111*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
112*4bdc9457SAndroid Build Coastguard Worker .padding_top(padding_top)
113*4bdc9457SAndroid Build Coastguard Worker .padding_bottom(padding_bottom)
114*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
115*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
116*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
117*4bdc9457SAndroid Build Coastguard Worker .TestF32();
118*4bdc9457SAndroid Build Coastguard Worker }
119*4bdc9457SAndroid Build Coastguard Worker }
120*4bdc9457SAndroid Build Coastguard Worker }
121*4bdc9457SAndroid Build Coastguard Worker }
122*4bdc9457SAndroid Build Coastguard Worker }
123*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_small_Mx1_pool_with_tf_same_padding)124*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_small_Mx1_pool_with_tf_same_padding) {
125*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
126*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
127*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
128*4bdc9457SAndroid Build Coastguard Worker for (size_t input_height = pool_size + 1; input_height <= pool_size * 2; input_height++) {
129*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
130*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
131*4bdc9457SAndroid Build Coastguard Worker .input_height(input_height)
132*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
133*4bdc9457SAndroid Build Coastguard Worker .padding_tf_same(true)
134*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
135*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
136*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
137*4bdc9457SAndroid Build Coastguard Worker .TestF32();
138*4bdc9457SAndroid Build Coastguard Worker }
139*4bdc9457SAndroid Build Coastguard Worker }
140*4bdc9457SAndroid Build Coastguard Worker }
141*4bdc9457SAndroid Build Coastguard Worker }
142*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_small_pool_with_input_stride)143*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_small_pool_with_input_stride) {
144*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
145*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
146*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
147*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
148*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
149*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
150*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
151*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
152*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
153*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
154*4bdc9457SAndroid Build Coastguard Worker .input_pixel_stride(5 * channels)
155*4bdc9457SAndroid Build Coastguard Worker .TestF32();
156*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
157*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
158*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
159*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
160*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
161*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
162*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
163*4bdc9457SAndroid Build Coastguard Worker .input_pixel_stride(5 * channels)
164*4bdc9457SAndroid Build Coastguard Worker .TestF32();
165*4bdc9457SAndroid Build Coastguard Worker }
166*4bdc9457SAndroid Build Coastguard Worker }
167*4bdc9457SAndroid Build Coastguard Worker }
168*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_small_pool_with_output_stride)169*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_small_pool_with_output_stride) {
170*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
171*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
172*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
173*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
174*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
175*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
176*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
177*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
178*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
179*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
180*4bdc9457SAndroid Build Coastguard Worker .output_pixel_stride(5 * channels)
181*4bdc9457SAndroid Build Coastguard Worker .TestF32();
182*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
183*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
184*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
185*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
186*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
187*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
188*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
189*4bdc9457SAndroid Build Coastguard Worker .output_pixel_stride(5 * channels)
190*4bdc9457SAndroid Build Coastguard Worker .TestF32();
191*4bdc9457SAndroid Build Coastguard Worker }
192*4bdc9457SAndroid Build Coastguard Worker }
193*4bdc9457SAndroid Build Coastguard Worker }
194*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_large_1xM_pool)195*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_large_1xM_pool) {
196*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
197*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
198*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
199*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
200*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
201*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
202*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
203*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
204*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
205*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
206*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
207*4bdc9457SAndroid Build Coastguard Worker .TestF32();
208*4bdc9457SAndroid Build Coastguard Worker }
209*4bdc9457SAndroid Build Coastguard Worker }
210*4bdc9457SAndroid Build Coastguard Worker }
211*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_large_1xM_pool_with_padding)212*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_large_1xM_pool_with_padding) {
213*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
214*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
215*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
216*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
217*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_left = 0; padding_left <= 1; padding_left++) {
218*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_right = 0; padding_right <= 1; padding_right++) {
219*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
220*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
221*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
222*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
223*4bdc9457SAndroid Build Coastguard Worker .padding_left(padding_left)
224*4bdc9457SAndroid Build Coastguard Worker .padding_right(padding_right)
225*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
226*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
227*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
228*4bdc9457SAndroid Build Coastguard Worker .TestF32();
229*4bdc9457SAndroid Build Coastguard Worker }
230*4bdc9457SAndroid Build Coastguard Worker }
231*4bdc9457SAndroid Build Coastguard Worker }
232*4bdc9457SAndroid Build Coastguard Worker }
233*4bdc9457SAndroid Build Coastguard Worker }
234*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_large_1xM_pool_with_tf_same_padding)235*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_large_1xM_pool_with_tf_same_padding) {
236*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
237*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
238*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
239*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
240*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = pool_size + 1; input_width <= pool_size * 2; input_width++) {
241*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
242*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
243*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
244*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width)
245*4bdc9457SAndroid Build Coastguard Worker .padding_tf_same(true)
246*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
247*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
248*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
249*4bdc9457SAndroid Build Coastguard Worker .TestF32();
250*4bdc9457SAndroid Build Coastguard Worker }
251*4bdc9457SAndroid Build Coastguard Worker }
252*4bdc9457SAndroid Build Coastguard Worker }
253*4bdc9457SAndroid Build Coastguard Worker }
254*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_large_Mx1_pool)255*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_large_Mx1_pool) {
256*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
257*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
258*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
259*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
260*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
261*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
262*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
263*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
264*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
265*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
266*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
267*4bdc9457SAndroid Build Coastguard Worker .TestF32();
268*4bdc9457SAndroid Build Coastguard Worker }
269*4bdc9457SAndroid Build Coastguard Worker }
270*4bdc9457SAndroid Build Coastguard Worker }
271*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_large_Mx1_pool_with_padding)272*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_large_Mx1_pool_with_padding) {
273*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
274*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
275*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
276*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
277*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_top = 0; padding_top <= 1; padding_top++) {
278*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_bottom = 0; padding_bottom <= 1; padding_bottom++) {
279*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
280*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
281*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
282*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
283*4bdc9457SAndroid Build Coastguard Worker .padding_top(padding_top)
284*4bdc9457SAndroid Build Coastguard Worker .padding_bottom(padding_bottom)
285*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
286*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
287*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
288*4bdc9457SAndroid Build Coastguard Worker .TestF32();
289*4bdc9457SAndroid Build Coastguard Worker }
290*4bdc9457SAndroid Build Coastguard Worker }
291*4bdc9457SAndroid Build Coastguard Worker }
292*4bdc9457SAndroid Build Coastguard Worker }
293*4bdc9457SAndroid Build Coastguard Worker }
294*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_large_Mx1_pool_with_tf_same_padding)295*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_large_Mx1_pool_with_tf_same_padding) {
296*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
297*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
298*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
299*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
300*4bdc9457SAndroid Build Coastguard Worker for (size_t input_height = pool_size + 2; input_height <= pool_size * 2; input_height++) {
301*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
302*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
303*4bdc9457SAndroid Build Coastguard Worker .input_height(input_height)
304*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
305*4bdc9457SAndroid Build Coastguard Worker .padding_tf_same(true)
306*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
307*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
308*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
309*4bdc9457SAndroid Build Coastguard Worker .TestF32();
310*4bdc9457SAndroid Build Coastguard Worker }
311*4bdc9457SAndroid Build Coastguard Worker }
312*4bdc9457SAndroid Build Coastguard Worker }
313*4bdc9457SAndroid Build Coastguard Worker }
314*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_large_pool_with_input_stride)315*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_large_pool_with_input_stride) {
316*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
317*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
318*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
319*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
320*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
321*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
322*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
323*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
324*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
325*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
326*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
327*4bdc9457SAndroid Build Coastguard Worker .input_pixel_stride(5 * channels)
328*4bdc9457SAndroid Build Coastguard Worker .TestF32();
329*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
330*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
331*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
332*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
333*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
334*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
335*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
336*4bdc9457SAndroid Build Coastguard Worker .input_pixel_stride(5 * channels)
337*4bdc9457SAndroid Build Coastguard Worker .TestF32();
338*4bdc9457SAndroid Build Coastguard Worker }
339*4bdc9457SAndroid Build Coastguard Worker }
340*4bdc9457SAndroid Build Coastguard Worker }
341*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,unit_batch_large_pool_with_output_stride)342*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, unit_batch_large_pool_with_output_stride) {
343*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
344*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
345*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
346*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
347*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
348*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
349*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
350*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
351*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
352*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
353*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
354*4bdc9457SAndroid Build Coastguard Worker .output_pixel_stride(5 * channels)
355*4bdc9457SAndroid Build Coastguard Worker .TestF32();
356*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
357*4bdc9457SAndroid Build Coastguard Worker .batch_size(1)
358*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
359*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
360*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
361*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
362*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
363*4bdc9457SAndroid Build Coastguard Worker .output_pixel_stride(5 * channels)
364*4bdc9457SAndroid Build Coastguard Worker .TestF32();
365*4bdc9457SAndroid Build Coastguard Worker }
366*4bdc9457SAndroid Build Coastguard Worker }
367*4bdc9457SAndroid Build Coastguard Worker }
368*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,small_batch_small_pool)369*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, small_batch_small_pool) {
370*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
371*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
372*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
373*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
374*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
375*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
376*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
377*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
378*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
379*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
380*4bdc9457SAndroid Build Coastguard Worker .TestF32();
381*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
382*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
383*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
384*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
385*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
386*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
387*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
388*4bdc9457SAndroid Build Coastguard Worker .TestF32();
389*4bdc9457SAndroid Build Coastguard Worker }
390*4bdc9457SAndroid Build Coastguard Worker }
391*4bdc9457SAndroid Build Coastguard Worker }
392*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,small_batch_small_pool_with_input_stride)393*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, small_batch_small_pool_with_input_stride) {
394*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
395*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
396*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
397*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
398*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
399*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
400*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
401*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
402*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
403*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
404*4bdc9457SAndroid Build Coastguard Worker .input_pixel_stride(5 * channels)
405*4bdc9457SAndroid Build Coastguard Worker .TestF32();
406*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
407*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
408*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
409*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
410*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
411*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
412*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
413*4bdc9457SAndroid Build Coastguard Worker .input_pixel_stride(5 * channels)
414*4bdc9457SAndroid Build Coastguard Worker .TestF32();
415*4bdc9457SAndroid Build Coastguard Worker }
416*4bdc9457SAndroid Build Coastguard Worker }
417*4bdc9457SAndroid Build Coastguard Worker }
418*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,small_batch_small_pool_with_output_stride)419*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, small_batch_small_pool_with_output_stride) {
420*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
421*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
422*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = 2; pool_size <= FindMaxSinglePassPoolingSize(xnn_params.f32.argmaxpool); pool_size++) {
423*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
424*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
425*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
426*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
427*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
428*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
429*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
430*4bdc9457SAndroid Build Coastguard Worker .output_pixel_stride(5 * channels)
431*4bdc9457SAndroid Build Coastguard Worker .TestF32();
432*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
433*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
434*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
435*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
436*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
437*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
438*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
439*4bdc9457SAndroid Build Coastguard Worker .output_pixel_stride(5 * channels)
440*4bdc9457SAndroid Build Coastguard Worker .TestF32();
441*4bdc9457SAndroid Build Coastguard Worker }
442*4bdc9457SAndroid Build Coastguard Worker }
443*4bdc9457SAndroid Build Coastguard Worker }
444*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,small_batch_large_pool)445*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, small_batch_large_pool) {
446*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
447*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
448*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
449*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
450*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
451*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
452*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
453*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
454*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
455*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
456*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
457*4bdc9457SAndroid Build Coastguard Worker .TestF32();
458*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
459*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
460*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
461*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
462*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
463*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
464*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
465*4bdc9457SAndroid Build Coastguard Worker .TestF32();
466*4bdc9457SAndroid Build Coastguard Worker }
467*4bdc9457SAndroid Build Coastguard Worker }
468*4bdc9457SAndroid Build Coastguard Worker }
469*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,small_batch_large_pool_with_input_stride)470*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, small_batch_large_pool_with_input_stride) {
471*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
472*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
473*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
474*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
475*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
476*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
477*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
478*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
479*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
480*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
481*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
482*4bdc9457SAndroid Build Coastguard Worker .input_pixel_stride(5 * channels)
483*4bdc9457SAndroid Build Coastguard Worker .TestF32();
484*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
485*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
486*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
487*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
488*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
489*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
490*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
491*4bdc9457SAndroid Build Coastguard Worker .input_pixel_stride(5 * channels)
492*4bdc9457SAndroid Build Coastguard Worker .TestF32();
493*4bdc9457SAndroid Build Coastguard Worker }
494*4bdc9457SAndroid Build Coastguard Worker }
495*4bdc9457SAndroid Build Coastguard Worker }
496*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,small_batch_large_pool_with_output_stride)497*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, small_batch_large_pool_with_output_stride) {
498*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
499*4bdc9457SAndroid Build Coastguard Worker const auto multipass = FindMultiPassMicroKernel(xnn_params.f32.argmaxpool);
500*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 100; channels += 15) {
501*4bdc9457SAndroid Build Coastguard Worker for (size_t pool_size = multipass.mr + 1; pool_size <= multipass.mr + multipass.qr; pool_size++) {
502*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
503*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
504*4bdc9457SAndroid Build Coastguard Worker .input_height(pool_size + 1)
505*4bdc9457SAndroid Build Coastguard Worker .input_width(3)
506*4bdc9457SAndroid Build Coastguard Worker .pooling_height(pool_size)
507*4bdc9457SAndroid Build Coastguard Worker .pooling_width(1)
508*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
509*4bdc9457SAndroid Build Coastguard Worker .output_pixel_stride(5 * channels)
510*4bdc9457SAndroid Build Coastguard Worker .TestF32();
511*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
512*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
513*4bdc9457SAndroid Build Coastguard Worker .input_height(2)
514*4bdc9457SAndroid Build Coastguard Worker .input_width(pool_size + 2)
515*4bdc9457SAndroid Build Coastguard Worker .pooling_height(1)
516*4bdc9457SAndroid Build Coastguard Worker .pooling_width(pool_size)
517*4bdc9457SAndroid Build Coastguard Worker .channels(channels)
518*4bdc9457SAndroid Build Coastguard Worker .output_pixel_stride(5 * channels)
519*4bdc9457SAndroid Build Coastguard Worker .TestF32();
520*4bdc9457SAndroid Build Coastguard Worker }
521*4bdc9457SAndroid Build Coastguard Worker }
522*4bdc9457SAndroid Build Coastguard Worker }
523*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,setup_increasing_batch)524*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, setup_increasing_batch) {
525*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
526*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
527*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
528*4bdc9457SAndroid Build Coastguard Worker .next_batch_size(5)
529*4bdc9457SAndroid Build Coastguard Worker .input_height(8)
530*4bdc9457SAndroid Build Coastguard Worker .input_width(8)
531*4bdc9457SAndroid Build Coastguard Worker .pooling_height(5)
532*4bdc9457SAndroid Build Coastguard Worker .pooling_width(3)
533*4bdc9457SAndroid Build Coastguard Worker .channels(24)
534*4bdc9457SAndroid Build Coastguard Worker .TestSetupF32();
535*4bdc9457SAndroid Build Coastguard Worker }
536*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,setup_decreasing_batch)537*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, setup_decreasing_batch) {
538*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
539*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
540*4bdc9457SAndroid Build Coastguard Worker .batch_size(5)
541*4bdc9457SAndroid Build Coastguard Worker .next_batch_size(3)
542*4bdc9457SAndroid Build Coastguard Worker .input_height(8)
543*4bdc9457SAndroid Build Coastguard Worker .input_width(8)
544*4bdc9457SAndroid Build Coastguard Worker .pooling_height(5)
545*4bdc9457SAndroid Build Coastguard Worker .pooling_width(3)
546*4bdc9457SAndroid Build Coastguard Worker .channels(24)
547*4bdc9457SAndroid Build Coastguard Worker .TestSetupF32();
548*4bdc9457SAndroid Build Coastguard Worker }
549*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,setup_changing_height)550*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, setup_changing_height) {
551*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
552*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
553*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
554*4bdc9457SAndroid Build Coastguard Worker .input_height(8)
555*4bdc9457SAndroid Build Coastguard Worker .input_width(8)
556*4bdc9457SAndroid Build Coastguard Worker .next_input_height(9)
557*4bdc9457SAndroid Build Coastguard Worker .pooling_height(5)
558*4bdc9457SAndroid Build Coastguard Worker .pooling_width(3)
559*4bdc9457SAndroid Build Coastguard Worker .channels(24)
560*4bdc9457SAndroid Build Coastguard Worker .TestSetupF32();
561*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
562*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
563*4bdc9457SAndroid Build Coastguard Worker .input_height(8)
564*4bdc9457SAndroid Build Coastguard Worker .input_width(8)
565*4bdc9457SAndroid Build Coastguard Worker .next_input_height(7)
566*4bdc9457SAndroid Build Coastguard Worker .pooling_height(5)
567*4bdc9457SAndroid Build Coastguard Worker .pooling_width(3)
568*4bdc9457SAndroid Build Coastguard Worker .channels(24)
569*4bdc9457SAndroid Build Coastguard Worker .TestSetupF32();
570*4bdc9457SAndroid Build Coastguard Worker }
571*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,setup_changing_width)572*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, setup_changing_width) {
573*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
574*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
575*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
576*4bdc9457SAndroid Build Coastguard Worker .input_height(8)
577*4bdc9457SAndroid Build Coastguard Worker .input_width(8)
578*4bdc9457SAndroid Build Coastguard Worker .next_input_width(9)
579*4bdc9457SAndroid Build Coastguard Worker .pooling_height(5)
580*4bdc9457SAndroid Build Coastguard Worker .pooling_width(3)
581*4bdc9457SAndroid Build Coastguard Worker .channels(24)
582*4bdc9457SAndroid Build Coastguard Worker .TestSetupF32();
583*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
584*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
585*4bdc9457SAndroid Build Coastguard Worker .input_height(8)
586*4bdc9457SAndroid Build Coastguard Worker .input_width(8)
587*4bdc9457SAndroid Build Coastguard Worker .next_input_width(7)
588*4bdc9457SAndroid Build Coastguard Worker .pooling_height(5)
589*4bdc9457SAndroid Build Coastguard Worker .pooling_width(3)
590*4bdc9457SAndroid Build Coastguard Worker .channels(24)
591*4bdc9457SAndroid Build Coastguard Worker .TestSetupF32();
592*4bdc9457SAndroid Build Coastguard Worker }
593*4bdc9457SAndroid Build Coastguard Worker
TEST(ARGMAX_POOLING_NHWC_F32,setup_swap_height_and_width)594*4bdc9457SAndroid Build Coastguard Worker TEST(ARGMAX_POOLING_NHWC_F32, setup_swap_height_and_width) {
595*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
596*4bdc9457SAndroid Build Coastguard Worker ArgmaxPoolingOperatorTester()
597*4bdc9457SAndroid Build Coastguard Worker .batch_size(3)
598*4bdc9457SAndroid Build Coastguard Worker .input_height(9)
599*4bdc9457SAndroid Build Coastguard Worker .input_width(8)
600*4bdc9457SAndroid Build Coastguard Worker .next_input_height(8)
601*4bdc9457SAndroid Build Coastguard Worker .next_input_width(9)
602*4bdc9457SAndroid Build Coastguard Worker .pooling_height(5)
603*4bdc9457SAndroid Build Coastguard Worker .pooling_width(3)
604*4bdc9457SAndroid Build Coastguard Worker .channels(24)
605*4bdc9457SAndroid Build Coastguard Worker .TestSetupF32();
606*4bdc9457SAndroid Build Coastguard Worker }
607