xref: /aosp_15_r20/external/XNNPACK/tools/generate-avgpool-test.py (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker#!/usr/bin/env python
2*4bdc9457SAndroid Build Coastguard Worker# Copyright 2020 Google LLC
3*4bdc9457SAndroid Build Coastguard Worker#
4*4bdc9457SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the
5*4bdc9457SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree.
6*4bdc9457SAndroid Build Coastguard Worker
7*4bdc9457SAndroid Build Coastguard Workerimport argparse
8*4bdc9457SAndroid Build Coastguard Workerimport codecs
9*4bdc9457SAndroid Build Coastguard Workerimport math
10*4bdc9457SAndroid Build Coastguard Workerimport os
11*4bdc9457SAndroid Build Coastguard Workerimport re
12*4bdc9457SAndroid Build Coastguard Workerimport sys
13*4bdc9457SAndroid Build Coastguard Workerimport yaml
14*4bdc9457SAndroid Build Coastguard Worker
15*4bdc9457SAndroid Build Coastguard Workersys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
16*4bdc9457SAndroid Build Coastguard Workerfrom primes import next_prime
17*4bdc9457SAndroid Build Coastguard Workerimport xngen
18*4bdc9457SAndroid Build Coastguard Workerimport xnncommon
19*4bdc9457SAndroid Build Coastguard Worker
20*4bdc9457SAndroid Build Coastguard Worker
21*4bdc9457SAndroid Build Coastguard Workerparser = argparse.ArgumentParser(description='AvgPool microkernel test generator')
22*4bdc9457SAndroid Build Coastguard Workerparser.add_argument("-s", "--spec", metavar="FILE", required=True,
23*4bdc9457SAndroid Build Coastguard Worker                    help="Specification (YAML) file")
24*4bdc9457SAndroid Build Coastguard Workerparser.add_argument("-o", "--output", metavar="FILE", required=True,
25*4bdc9457SAndroid Build Coastguard Worker                    help='Output (C++ source) file')
26*4bdc9457SAndroid Build Coastguard Workerparser.set_defaults(defines=list())
27*4bdc9457SAndroid Build Coastguard Worker
28*4bdc9457SAndroid Build Coastguard Worker
29*4bdc9457SAndroid Build Coastguard Workerdef split_ukernel_name(name):
30*4bdc9457SAndroid Build Coastguard Worker  match = re.fullmatch(r"xnn_(qu8|f16|f32)_[p]?avgpool(_(minmax))?_ukernel_((\d+)p)?(\d+)x__(.+)_c(\d+)", name)
31*4bdc9457SAndroid Build Coastguard Worker  if match is None:
32*4bdc9457SAndroid Build Coastguard Worker    raise ValueError("Unexpected microkernel name: " + name)
33*4bdc9457SAndroid Build Coastguard Worker
34*4bdc9457SAndroid Build Coastguard Worker  if match.group(4):
35*4bdc9457SAndroid Build Coastguard Worker    primary_tile = int(match.group(5))
36*4bdc9457SAndroid Build Coastguard Worker    incremental_tile = int(match.group(6))
37*4bdc9457SAndroid Build Coastguard Worker  else:
38*4bdc9457SAndroid Build Coastguard Worker    primary_tile = int(match.group(6))
39*4bdc9457SAndroid Build Coastguard Worker    incremental_tile = 0
40*4bdc9457SAndroid Build Coastguard Worker  channel_tile = int(match.group(8))
41*4bdc9457SAndroid Build Coastguard Worker
42*4bdc9457SAndroid Build Coastguard Worker  arch, isa = xnncommon.parse_target_name(target_name=match.group(7))
43*4bdc9457SAndroid Build Coastguard Worker  return primary_tile, incremental_tile, channel_tile, arch, isa
44*4bdc9457SAndroid Build Coastguard Worker
45*4bdc9457SAndroid Build Coastguard Worker
46*4bdc9457SAndroid Build Coastguard WorkerAVGPOOL_TEST_TEMPLATE = """\
47*4bdc9457SAndroid Build Coastguard Worker$if INCREMENTAL_TILE == 0:
48*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile) {
49*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
50*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
51*4bdc9457SAndroid Build Coastguard Worker    AvgPoolMicrokernelTester()
52*4bdc9457SAndroid Build Coastguard Worker      .pooling_elements(${PRIMARY_TILE})
53*4bdc9457SAndroid Build Coastguard Worker      .pooling_tile(${PRIMARY_TILE})
54*4bdc9457SAndroid Build Coastguard Worker      .channels(${CHANNEL_TILE})
55*4bdc9457SAndroid Build Coastguard Worker      .Test(${", ".join(TEST_ARGS)});
56*4bdc9457SAndroid Build Coastguard Worker  }
57*4bdc9457SAndroid Build Coastguard Worker
58*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) {
59*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
60*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
61*4bdc9457SAndroid Build Coastguard Worker    AvgPoolMicrokernelTester()
62*4bdc9457SAndroid Build Coastguard Worker      .pooling_elements(${PRIMARY_TILE})
63*4bdc9457SAndroid Build Coastguard Worker      .pooling_tile(${PRIMARY_TILE})
64*4bdc9457SAndroid Build Coastguard Worker      .channels(${CHANNEL_TILE})
65*4bdc9457SAndroid Build Coastguard Worker      .input_offset(${next_prime(CHANNEL_TILE+1)})
66*4bdc9457SAndroid Build Coastguard Worker      .Test(${", ".join(TEST_ARGS)});
67*4bdc9457SAndroid Build Coastguard Worker  }
68*4bdc9457SAndroid Build Coastguard Worker
69*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_zero) {
70*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
71*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
72*4bdc9457SAndroid Build Coastguard Worker    for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE}; zero_index++) {
73*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
74*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE})
75*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE})
76*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
77*4bdc9457SAndroid Build Coastguard Worker        .input_offset(${next_prime(CHANNEL_TILE+1)})
78*4bdc9457SAndroid Build Coastguard Worker        .zero_index(zero_index)
79*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
80*4bdc9457SAndroid Build Coastguard Worker    }
81*4bdc9457SAndroid Build Coastguard Worker  }
82*4bdc9457SAndroid Build Coastguard Worker
83*4bdc9457SAndroid Build Coastguard Worker  $if DATATYPE == "qu8":
84*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_input_scale) {
85*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
86*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
87*4bdc9457SAndroid Build Coastguard Worker      for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
88*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
89*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
90*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
91*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
92*4bdc9457SAndroid Build Coastguard Worker          .input_scale(scale)
93*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
94*4bdc9457SAndroid Build Coastguard Worker      }
95*4bdc9457SAndroid Build Coastguard Worker    }
96*4bdc9457SAndroid Build Coastguard Worker
97*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_input_zero_point) {
98*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
99*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
100*4bdc9457SAndroid Build Coastguard Worker      for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
101*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
102*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
103*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
104*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
105*4bdc9457SAndroid Build Coastguard Worker          .input_zero_point(zero_point)
106*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
107*4bdc9457SAndroid Build Coastguard Worker      }
108*4bdc9457SAndroid Build Coastguard Worker    }
109*4bdc9457SAndroid Build Coastguard Worker
110*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_output_scale) {
111*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
112*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
113*4bdc9457SAndroid Build Coastguard Worker      for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
114*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
115*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
116*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
117*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
118*4bdc9457SAndroid Build Coastguard Worker          .output_scale(scale)
119*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
120*4bdc9457SAndroid Build Coastguard Worker      }
121*4bdc9457SAndroid Build Coastguard Worker    }
122*4bdc9457SAndroid Build Coastguard Worker
123*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_output_zero_point) {
124*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
125*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
126*4bdc9457SAndroid Build Coastguard Worker      for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
127*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
128*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
129*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
130*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
131*4bdc9457SAndroid Build Coastguard Worker          .output_zero_point(zero_point)
132*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
133*4bdc9457SAndroid Build Coastguard Worker      }
134*4bdc9457SAndroid Build Coastguard Worker    }
135*4bdc9457SAndroid Build Coastguard Worker
136*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_qmin) {
137*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
138*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
139*4bdc9457SAndroid Build Coastguard Worker    AvgPoolMicrokernelTester()
140*4bdc9457SAndroid Build Coastguard Worker      .pooling_elements(${PRIMARY_TILE})
141*4bdc9457SAndroid Build Coastguard Worker      .pooling_tile(${PRIMARY_TILE})
142*4bdc9457SAndroid Build Coastguard Worker      .channels(${CHANNEL_TILE})
143*4bdc9457SAndroid Build Coastguard Worker      .qmin(128)
144*4bdc9457SAndroid Build Coastguard Worker      .Test(${", ".join(TEST_ARGS)});
145*4bdc9457SAndroid Build Coastguard Worker  }
146*4bdc9457SAndroid Build Coastguard Worker
147*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_fulltile_with_qmax) {
148*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
149*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
150*4bdc9457SAndroid Build Coastguard Worker    AvgPoolMicrokernelTester()
151*4bdc9457SAndroid Build Coastguard Worker      .pooling_elements(${PRIMARY_TILE})
152*4bdc9457SAndroid Build Coastguard Worker      .pooling_tile(${PRIMARY_TILE})
153*4bdc9457SAndroid Build Coastguard Worker      .channels(${CHANNEL_TILE})
154*4bdc9457SAndroid Build Coastguard Worker      .qmax(128)
155*4bdc9457SAndroid Build Coastguard Worker      .Test(${", ".join(TEST_ARGS)});
156*4bdc9457SAndroid Build Coastguard Worker  }
157*4bdc9457SAndroid Build Coastguard Worker
158*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile) {
159*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
160*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
161*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
162*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
163*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(pooling_elements)
164*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE})
165*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
166*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
167*4bdc9457SAndroid Build Coastguard Worker    }
168*4bdc9457SAndroid Build Coastguard Worker  }
169*4bdc9457SAndroid Build Coastguard Worker
170*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile_with_input_offset) {
171*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
172*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
173*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
174*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
175*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(pooling_elements)
176*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE})
177*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
178*4bdc9457SAndroid Build Coastguard Worker        .input_offset(${next_prime(CHANNEL_TILE+1)})
179*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
180*4bdc9457SAndroid Build Coastguard Worker    }
181*4bdc9457SAndroid Build Coastguard Worker  }
182*4bdc9457SAndroid Build Coastguard Worker
183*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_unipass_subtile_with_zero) {
184*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
185*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
186*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
187*4bdc9457SAndroid Build Coastguard Worker      for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
188*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
189*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
190*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
191*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
192*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE+1)})
193*4bdc9457SAndroid Build Coastguard Worker          .zero_index(zero_index)
194*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
195*4bdc9457SAndroid Build Coastguard Worker      }
196*4bdc9457SAndroid Build Coastguard Worker    }
197*4bdc9457SAndroid Build Coastguard Worker  }
198*4bdc9457SAndroid Build Coastguard Worker
199*4bdc9457SAndroid Build Coastguard Worker  $if CHANNEL_TILE > 1:
200*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile) {
201*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
202*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
203*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
204*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
205*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
206*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
207*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
208*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
209*4bdc9457SAndroid Build Coastguard Worker      }
210*4bdc9457SAndroid Build Coastguard Worker    }
211*4bdc9457SAndroid Build Coastguard Worker
212*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) {
213*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
214*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
215*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
216*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
217*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
218*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
219*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
220*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE*8)})
221*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
222*4bdc9457SAndroid Build Coastguard Worker      }
223*4bdc9457SAndroid Build Coastguard Worker    }
224*4bdc9457SAndroid Build Coastguard Worker
225*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_zero) {
226*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
227*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
228*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
229*4bdc9457SAndroid Build Coastguard Worker        for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE}; zero_index++) {
230*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
231*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE})
232*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
233*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
234*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*8)})
235*4bdc9457SAndroid Build Coastguard Worker            .zero_index(zero_index)
236*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
237*4bdc9457SAndroid Build Coastguard Worker        }
238*4bdc9457SAndroid Build Coastguard Worker      }
239*4bdc9457SAndroid Build Coastguard Worker    }
240*4bdc9457SAndroid Build Coastguard Worker
241*4bdc9457SAndroid Build Coastguard Worker    $if DATATYPE == "qu8":
242*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_input_scale) {
243*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
244*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
245*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
246*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
247*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
248*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE})
249*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
250*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
251*4bdc9457SAndroid Build Coastguard Worker              .input_scale(scale)
252*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
253*4bdc9457SAndroid Build Coastguard Worker          }
254*4bdc9457SAndroid Build Coastguard Worker        }
255*4bdc9457SAndroid Build Coastguard Worker      }
256*4bdc9457SAndroid Build Coastguard Worker
257*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_input_zero_point) {
258*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
259*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
260*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
261*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
262*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
263*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE})
264*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
265*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
266*4bdc9457SAndroid Build Coastguard Worker              .input_zero_point(zero_point)
267*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
268*4bdc9457SAndroid Build Coastguard Worker          }
269*4bdc9457SAndroid Build Coastguard Worker        }
270*4bdc9457SAndroid Build Coastguard Worker      }
271*4bdc9457SAndroid Build Coastguard Worker
272*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_output_scale) {
273*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
274*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
275*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
276*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
277*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
278*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE})
279*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
280*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
281*4bdc9457SAndroid Build Coastguard Worker              .output_scale(scale)
282*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
283*4bdc9457SAndroid Build Coastguard Worker          }
284*4bdc9457SAndroid Build Coastguard Worker        }
285*4bdc9457SAndroid Build Coastguard Worker      }
286*4bdc9457SAndroid Build Coastguard Worker
287*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_output_zero_point) {
288*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
289*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
290*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
291*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
292*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
293*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE})
294*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
295*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
296*4bdc9457SAndroid Build Coastguard Worker              .output_zero_point(zero_point)
297*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
298*4bdc9457SAndroid Build Coastguard Worker          }
299*4bdc9457SAndroid Build Coastguard Worker        }
300*4bdc9457SAndroid Build Coastguard Worker      }
301*4bdc9457SAndroid Build Coastguard Worker
302*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_qmin) {
303*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
304*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
305*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
306*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
307*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
308*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
309*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
310*4bdc9457SAndroid Build Coastguard Worker          .qmin(128)
311*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
312*4bdc9457SAndroid Build Coastguard Worker      }
313*4bdc9457SAndroid Build Coastguard Worker    }
314*4bdc9457SAndroid Build Coastguard Worker
315*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_fulltile_with_qmax) {
316*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
317*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
318*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
319*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
320*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
321*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
322*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
323*4bdc9457SAndroid Build Coastguard Worker          .qmax(128)
324*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
325*4bdc9457SAndroid Build Coastguard Worker      }
326*4bdc9457SAndroid Build Coastguard Worker    }
327*4bdc9457SAndroid Build Coastguard Worker
328*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile) {
329*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
330*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
331*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
332*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
333*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
334*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
335*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
336*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
337*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
338*4bdc9457SAndroid Build Coastguard Worker        }
339*4bdc9457SAndroid Build Coastguard Worker      }
340*4bdc9457SAndroid Build Coastguard Worker    }
341*4bdc9457SAndroid Build Coastguard Worker
342*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile_with_input_offset) {
343*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
344*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
345*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
346*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
347*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
348*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
349*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
350*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
351*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*8)})
352*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
353*4bdc9457SAndroid Build Coastguard Worker        }
354*4bdc9457SAndroid Build Coastguard Worker      }
355*4bdc9457SAndroid Build Coastguard Worker    }
356*4bdc9457SAndroid Build Coastguard Worker
357*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_unipass_subtile_with_zero) {
358*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
359*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
360*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
361*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
362*4bdc9457SAndroid Build Coastguard Worker          for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
363*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
364*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
365*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
366*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
367*4bdc9457SAndroid Build Coastguard Worker              .input_offset(${next_prime(CHANNEL_TILE*8)})
368*4bdc9457SAndroid Build Coastguard Worker              .zero_index(zero_index)
369*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
370*4bdc9457SAndroid Build Coastguard Worker          }
371*4bdc9457SAndroid Build Coastguard Worker        }
372*4bdc9457SAndroid Build Coastguard Worker      }
373*4bdc9457SAndroid Build Coastguard Worker    }
374*4bdc9457SAndroid Build Coastguard Worker
375*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile) {
376*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
377*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
378*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
379*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
380*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
381*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
382*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
383*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
384*4bdc9457SAndroid Build Coastguard Worker      }
385*4bdc9457SAndroid Build Coastguard Worker    }
386*4bdc9457SAndroid Build Coastguard Worker
387*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) {
388*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
389*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
390*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
391*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
392*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
393*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
394*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
395*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE)})
396*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
397*4bdc9457SAndroid Build Coastguard Worker      }
398*4bdc9457SAndroid Build Coastguard Worker    }
399*4bdc9457SAndroid Build Coastguard Worker
400*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_zero) {
401*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
402*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
403*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
404*4bdc9457SAndroid Build Coastguard Worker        for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE}; zero_index++) {
405*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
406*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE})
407*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
408*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
409*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE)})
410*4bdc9457SAndroid Build Coastguard Worker            .zero_index(zero_index)
411*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
412*4bdc9457SAndroid Build Coastguard Worker        }
413*4bdc9457SAndroid Build Coastguard Worker      }
414*4bdc9457SAndroid Build Coastguard Worker    }
415*4bdc9457SAndroid Build Coastguard Worker
416*4bdc9457SAndroid Build Coastguard Worker    $if DATATYPE == "qu8":
417*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_input_scale) {
418*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
419*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
420*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
421*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
422*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
423*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE})
424*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
425*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
426*4bdc9457SAndroid Build Coastguard Worker              .input_scale(scale)
427*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
428*4bdc9457SAndroid Build Coastguard Worker          }
429*4bdc9457SAndroid Build Coastguard Worker        }
430*4bdc9457SAndroid Build Coastguard Worker      }
431*4bdc9457SAndroid Build Coastguard Worker
432*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_input_zero_point) {
433*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
434*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
435*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
436*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
437*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
438*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE})
439*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
440*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
441*4bdc9457SAndroid Build Coastguard Worker              .input_zero_point(zero_point)
442*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
443*4bdc9457SAndroid Build Coastguard Worker          }
444*4bdc9457SAndroid Build Coastguard Worker        }
445*4bdc9457SAndroid Build Coastguard Worker      }
446*4bdc9457SAndroid Build Coastguard Worker
447*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_output_scale) {
448*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
449*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
450*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
451*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
452*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
453*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE})
454*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
455*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
456*4bdc9457SAndroid Build Coastguard Worker              .output_scale(scale)
457*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
458*4bdc9457SAndroid Build Coastguard Worker          }
459*4bdc9457SAndroid Build Coastguard Worker        }
460*4bdc9457SAndroid Build Coastguard Worker      }
461*4bdc9457SAndroid Build Coastguard Worker
462*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_output_zero_point) {
463*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
464*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
465*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
466*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
467*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
468*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE})
469*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
470*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
471*4bdc9457SAndroid Build Coastguard Worker              .output_zero_point(zero_point)
472*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
473*4bdc9457SAndroid Build Coastguard Worker          }
474*4bdc9457SAndroid Build Coastguard Worker        }
475*4bdc9457SAndroid Build Coastguard Worker      }
476*4bdc9457SAndroid Build Coastguard Worker
477*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_qmin) {
478*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
479*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
480*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
481*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
482*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
483*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
484*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
485*4bdc9457SAndroid Build Coastguard Worker          .qmin(128)
486*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
487*4bdc9457SAndroid Build Coastguard Worker      }
488*4bdc9457SAndroid Build Coastguard Worker    }
489*4bdc9457SAndroid Build Coastguard Worker
490*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_fulltile_with_qmax) {
491*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
492*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
493*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
494*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
495*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
496*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
497*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
498*4bdc9457SAndroid Build Coastguard Worker          .qmax(128)
499*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
500*4bdc9457SAndroid Build Coastguard Worker      }
501*4bdc9457SAndroid Build Coastguard Worker    }
502*4bdc9457SAndroid Build Coastguard Worker
503*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile) {
504*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
505*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
506*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
507*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
508*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
509*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
510*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
511*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
512*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
513*4bdc9457SAndroid Build Coastguard Worker        }
514*4bdc9457SAndroid Build Coastguard Worker      }
515*4bdc9457SAndroid Build Coastguard Worker    }
516*4bdc9457SAndroid Build Coastguard Worker
517*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile_with_input_offset) {
518*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
519*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
520*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
521*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
522*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
523*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
524*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
525*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
526*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE)})
527*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
528*4bdc9457SAndroid Build Coastguard Worker        }
529*4bdc9457SAndroid Build Coastguard Worker      }
530*4bdc9457SAndroid Build Coastguard Worker    }
531*4bdc9457SAndroid Build Coastguard Worker
532*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_unipass_subtile_with_zero) {
533*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
534*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
535*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
536*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
537*4bdc9457SAndroid Build Coastguard Worker          for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
538*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
539*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
540*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE})
541*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
542*4bdc9457SAndroid Build Coastguard Worker              .input_offset(${next_prime(CHANNEL_TILE)})
543*4bdc9457SAndroid Build Coastguard Worker              .zero_index(zero_index)
544*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
545*4bdc9457SAndroid Build Coastguard Worker          }
546*4bdc9457SAndroid Build Coastguard Worker        }
547*4bdc9457SAndroid Build Coastguard Worker      }
548*4bdc9457SAndroid Build Coastguard Worker    }
549*4bdc9457SAndroid Build Coastguard Worker
550*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile) {
551*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
552*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
553*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
554*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
555*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE})
556*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE})
557*4bdc9457SAndroid Build Coastguard Worker        .channels(channels)
558*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
559*4bdc9457SAndroid Build Coastguard Worker    }
560*4bdc9457SAndroid Build Coastguard Worker  }
561*4bdc9457SAndroid Build Coastguard Worker
562*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_input_offset) {
563*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
564*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
565*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
566*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
567*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE})
568*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE})
569*4bdc9457SAndroid Build Coastguard Worker        .channels(channels)
570*4bdc9457SAndroid Build Coastguard Worker        .input_offset(${next_prime(CHANNEL_TILE*2)})
571*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
572*4bdc9457SAndroid Build Coastguard Worker    }
573*4bdc9457SAndroid Build Coastguard Worker  }
574*4bdc9457SAndroid Build Coastguard Worker
575*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_zero) {
576*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
577*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
578*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
579*4bdc9457SAndroid Build Coastguard Worker      for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE}; zero_index++) {
580*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
581*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE})
582*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
583*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
584*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE*2)})
585*4bdc9457SAndroid Build Coastguard Worker          .zero_index(zero_index)
586*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
587*4bdc9457SAndroid Build Coastguard Worker      }
588*4bdc9457SAndroid Build Coastguard Worker    }
589*4bdc9457SAndroid Build Coastguard Worker  }
590*4bdc9457SAndroid Build Coastguard Worker
591*4bdc9457SAndroid Build Coastguard Worker  $if DATATYPE == "qu8":
592*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_input_scale) {
593*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
594*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
595*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
596*4bdc9457SAndroid Build Coastguard Worker        for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
597*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
598*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE})
599*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
600*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
601*4bdc9457SAndroid Build Coastguard Worker            .input_scale(scale)
602*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
603*4bdc9457SAndroid Build Coastguard Worker        }
604*4bdc9457SAndroid Build Coastguard Worker      }
605*4bdc9457SAndroid Build Coastguard Worker    }
606*4bdc9457SAndroid Build Coastguard Worker
607*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_input_zero_point) {
608*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
609*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
610*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
611*4bdc9457SAndroid Build Coastguard Worker        for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
612*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
613*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE})
614*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
615*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
616*4bdc9457SAndroid Build Coastguard Worker            .input_zero_point(zero_point)
617*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
618*4bdc9457SAndroid Build Coastguard Worker        }
619*4bdc9457SAndroid Build Coastguard Worker      }
620*4bdc9457SAndroid Build Coastguard Worker    }
621*4bdc9457SAndroid Build Coastguard Worker
622*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_output_scale) {
623*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
624*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
625*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
626*4bdc9457SAndroid Build Coastguard Worker        for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
627*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
628*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE})
629*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
630*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
631*4bdc9457SAndroid Build Coastguard Worker            .output_scale(scale)
632*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
633*4bdc9457SAndroid Build Coastguard Worker        }
634*4bdc9457SAndroid Build Coastguard Worker      }
635*4bdc9457SAndroid Build Coastguard Worker    }
636*4bdc9457SAndroid Build Coastguard Worker
637*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_output_zero_point) {
638*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
639*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
640*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
641*4bdc9457SAndroid Build Coastguard Worker        for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
642*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
643*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE})
644*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
645*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
646*4bdc9457SAndroid Build Coastguard Worker            .output_zero_point(zero_point)
647*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
648*4bdc9457SAndroid Build Coastguard Worker        }
649*4bdc9457SAndroid Build Coastguard Worker      }
650*4bdc9457SAndroid Build Coastguard Worker    }
651*4bdc9457SAndroid Build Coastguard Worker
652*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_qmin) {
653*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
654*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
655*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
656*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
657*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE})
658*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE})
659*4bdc9457SAndroid Build Coastguard Worker        .channels(channels)
660*4bdc9457SAndroid Build Coastguard Worker        .qmin(128)
661*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
662*4bdc9457SAndroid Build Coastguard Worker    }
663*4bdc9457SAndroid Build Coastguard Worker  }
664*4bdc9457SAndroid Build Coastguard Worker
665*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_fulltile_with_qmax) {
666*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
667*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
668*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
669*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
670*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE})
671*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE})
672*4bdc9457SAndroid Build Coastguard Worker        .channels(channels)
673*4bdc9457SAndroid Build Coastguard Worker        .qmax(128)
674*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
675*4bdc9457SAndroid Build Coastguard Worker    }
676*4bdc9457SAndroid Build Coastguard Worker  }
677*4bdc9457SAndroid Build Coastguard Worker
678*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile) {
679*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
680*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
681*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
682*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
683*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
684*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
685*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
686*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
687*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
688*4bdc9457SAndroid Build Coastguard Worker      }
689*4bdc9457SAndroid Build Coastguard Worker    }
690*4bdc9457SAndroid Build Coastguard Worker  }
691*4bdc9457SAndroid Build Coastguard Worker
692*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile_with_input_offset) {
693*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
694*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
695*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
696*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
697*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
698*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
699*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE})
700*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
701*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE*2)})
702*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
703*4bdc9457SAndroid Build Coastguard Worker      }
704*4bdc9457SAndroid Build Coastguard Worker    }
705*4bdc9457SAndroid Build Coastguard Worker  }
706*4bdc9457SAndroid Build Coastguard Worker
707*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_unipass_subtile_with_zero) {
708*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
709*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
710*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = 2; pooling_elements < ${PRIMARY_TILE}; pooling_elements++) {
711*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
712*4bdc9457SAndroid Build Coastguard Worker        for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
713*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
714*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
715*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE})
716*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
717*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*2)})
718*4bdc9457SAndroid Build Coastguard Worker            .zero_index(zero_index)
719*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
720*4bdc9457SAndroid Build Coastguard Worker        }
721*4bdc9457SAndroid Build Coastguard Worker      }
722*4bdc9457SAndroid Build Coastguard Worker    }
723*4bdc9457SAndroid Build Coastguard Worker  }
724*4bdc9457SAndroid Build Coastguard Worker
725*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels) {
726*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
727*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
728*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
729*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
730*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
731*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
732*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
733*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
734*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
735*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
736*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
737*4bdc9457SAndroid Build Coastguard Worker        }
738*4bdc9457SAndroid Build Coastguard Worker      }
739*4bdc9457SAndroid Build Coastguard Worker    }
740*4bdc9457SAndroid Build Coastguard Worker  }
741*4bdc9457SAndroid Build Coastguard Worker
742*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_input_offset) {
743*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
744*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
745*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
746*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
747*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
748*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
749*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
750*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
751*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
752*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
753*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*5+1)})
754*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
755*4bdc9457SAndroid Build Coastguard Worker        }
756*4bdc9457SAndroid Build Coastguard Worker      }
757*4bdc9457SAndroid Build Coastguard Worker    }
758*4bdc9457SAndroid Build Coastguard Worker  }
759*4bdc9457SAndroid Build Coastguard Worker
760*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_zero) {
761*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
762*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
763*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
764*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
765*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
766*4bdc9457SAndroid Build Coastguard Worker          for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
767*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
768*4bdc9457SAndroid Build Coastguard Worker              .output_pixels(output_pixels)
769*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
770*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
771*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
772*4bdc9457SAndroid Build Coastguard Worker              .input_offset(${next_prime(CHANNEL_TILE*5+1)})
773*4bdc9457SAndroid Build Coastguard Worker              .zero_index(zero_index)
774*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
775*4bdc9457SAndroid Build Coastguard Worker          }
776*4bdc9457SAndroid Build Coastguard Worker        }
777*4bdc9457SAndroid Build Coastguard Worker      }
778*4bdc9457SAndroid Build Coastguard Worker    }
779*4bdc9457SAndroid Build Coastguard Worker  }
780*4bdc9457SAndroid Build Coastguard Worker
781*4bdc9457SAndroid Build Coastguard Worker  $if DATATYPE == "qu8":
782*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, few_output_pixels_with_input_scale) {
783*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
784*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
785*4bdc9457SAndroid Build Coastguard Worker      for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
786*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
787*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
788*4bdc9457SAndroid Build Coastguard Worker            for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
789*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
790*4bdc9457SAndroid Build Coastguard Worker                .output_pixels(output_pixels)
791*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
792*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE})
793*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
794*4bdc9457SAndroid Build Coastguard Worker                .input_scale(scale)
795*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
796*4bdc9457SAndroid Build Coastguard Worker            }
797*4bdc9457SAndroid Build Coastguard Worker          }
798*4bdc9457SAndroid Build Coastguard Worker        }
799*4bdc9457SAndroid Build Coastguard Worker      }
800*4bdc9457SAndroid Build Coastguard Worker    }
801*4bdc9457SAndroid Build Coastguard Worker
802*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, few_output_pixels_with_input_zero_point) {
803*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
804*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
805*4bdc9457SAndroid Build Coastguard Worker      for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
806*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
807*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
808*4bdc9457SAndroid Build Coastguard Worker            for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
809*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
810*4bdc9457SAndroid Build Coastguard Worker                .output_pixels(output_pixels)
811*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
812*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE})
813*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
814*4bdc9457SAndroid Build Coastguard Worker                .input_zero_point(zero_point)
815*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
816*4bdc9457SAndroid Build Coastguard Worker            }
817*4bdc9457SAndroid Build Coastguard Worker          }
818*4bdc9457SAndroid Build Coastguard Worker        }
819*4bdc9457SAndroid Build Coastguard Worker      }
820*4bdc9457SAndroid Build Coastguard Worker    }
821*4bdc9457SAndroid Build Coastguard Worker
822*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, few_output_pixels_with_output_scale) {
823*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
824*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
825*4bdc9457SAndroid Build Coastguard Worker      for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
826*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
827*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
828*4bdc9457SAndroid Build Coastguard Worker            for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
829*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
830*4bdc9457SAndroid Build Coastguard Worker                .output_pixels(output_pixels)
831*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
832*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE})
833*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
834*4bdc9457SAndroid Build Coastguard Worker                .output_scale(scale)
835*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
836*4bdc9457SAndroid Build Coastguard Worker            }
837*4bdc9457SAndroid Build Coastguard Worker          }
838*4bdc9457SAndroid Build Coastguard Worker        }
839*4bdc9457SAndroid Build Coastguard Worker      }
840*4bdc9457SAndroid Build Coastguard Worker    }
841*4bdc9457SAndroid Build Coastguard Worker
842*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, few_output_pixels_with_output_zero_point) {
843*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
844*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
845*4bdc9457SAndroid Build Coastguard Worker      for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
846*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
847*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
848*4bdc9457SAndroid Build Coastguard Worker            for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
849*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
850*4bdc9457SAndroid Build Coastguard Worker                .output_pixels(output_pixels)
851*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
852*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE})
853*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
854*4bdc9457SAndroid Build Coastguard Worker                .output_zero_point(zero_point)
855*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
856*4bdc9457SAndroid Build Coastguard Worker            }
857*4bdc9457SAndroid Build Coastguard Worker          }
858*4bdc9457SAndroid Build Coastguard Worker        }
859*4bdc9457SAndroid Build Coastguard Worker      }
860*4bdc9457SAndroid Build Coastguard Worker    }
861*4bdc9457SAndroid Build Coastguard Worker
862*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_qmin) {
863*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
864*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
865*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
866*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
867*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
868*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
869*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
870*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
871*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
872*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
873*4bdc9457SAndroid Build Coastguard Worker            .qmin(128)
874*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
875*4bdc9457SAndroid Build Coastguard Worker        }
876*4bdc9457SAndroid Build Coastguard Worker      }
877*4bdc9457SAndroid Build Coastguard Worker    }
878*4bdc9457SAndroid Build Coastguard Worker  }
879*4bdc9457SAndroid Build Coastguard Worker
880*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_qmax) {
881*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
882*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
883*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
884*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
885*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
886*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
887*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
888*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
889*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
890*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
891*4bdc9457SAndroid Build Coastguard Worker            .qmax(128)
892*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
893*4bdc9457SAndroid Build Coastguard Worker        }
894*4bdc9457SAndroid Build Coastguard Worker      }
895*4bdc9457SAndroid Build Coastguard Worker    }
896*4bdc9457SAndroid Build Coastguard Worker  }
897*4bdc9457SAndroid Build Coastguard Worker
898*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_output_stride) {
899*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
900*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
901*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
902*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
903*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
904*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
905*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
906*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
907*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
908*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
909*4bdc9457SAndroid Build Coastguard Worker            .output_stride(${next_prime(CHANNEL_TILE*5+1)})
910*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
911*4bdc9457SAndroid Build Coastguard Worker        }
912*4bdc9457SAndroid Build Coastguard Worker      }
913*4bdc9457SAndroid Build Coastguard Worker    }
914*4bdc9457SAndroid Build Coastguard Worker  }
915*4bdc9457SAndroid Build Coastguard Worker
916*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_step) {
917*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
918*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
919*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
920*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{2, ${PRIMARY_TILE-1}, ${PRIMARY_TILE}}}) {
921*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
922*4bdc9457SAndroid Build Coastguard Worker          for (size_t step = 2; step <= pooling_elements; step++) {
923*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
924*4bdc9457SAndroid Build Coastguard Worker              .output_pixels(output_pixels)
925*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
926*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
927*4bdc9457SAndroid Build Coastguard Worker              .step(step)
928*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
929*4bdc9457SAndroid Build Coastguard Worker              .output_stride(${next_prime(CHANNEL_TILE*5+1)})
930*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
931*4bdc9457SAndroid Build Coastguard Worker          }
932*4bdc9457SAndroid Build Coastguard Worker        }
933*4bdc9457SAndroid Build Coastguard Worker      }
934*4bdc9457SAndroid Build Coastguard Worker    }
935*4bdc9457SAndroid Build Coastguard Worker  }
936*4bdc9457SAndroid Build Coastguard Worker$else:
937*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile) {
938*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
939*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
940*4bdc9457SAndroid Build Coastguard Worker    AvgPoolMicrokernelTester()
941*4bdc9457SAndroid Build Coastguard Worker      .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
942*4bdc9457SAndroid Build Coastguard Worker      .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
943*4bdc9457SAndroid Build Coastguard Worker      .channels(${CHANNEL_TILE})
944*4bdc9457SAndroid Build Coastguard Worker      .Test(${", ".join(TEST_ARGS)});
945*4bdc9457SAndroid Build Coastguard Worker  }
946*4bdc9457SAndroid Build Coastguard Worker
947*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) {
948*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
949*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
950*4bdc9457SAndroid Build Coastguard Worker    AvgPoolMicrokernelTester()
951*4bdc9457SAndroid Build Coastguard Worker      .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
952*4bdc9457SAndroid Build Coastguard Worker      .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
953*4bdc9457SAndroid Build Coastguard Worker      .channels(${CHANNEL_TILE})
954*4bdc9457SAndroid Build Coastguard Worker      .input_offset(${next_prime(CHANNEL_TILE+1)})
955*4bdc9457SAndroid Build Coastguard Worker      .Test(${", ".join(TEST_ARGS)});
956*4bdc9457SAndroid Build Coastguard Worker  }
957*4bdc9457SAndroid Build Coastguard Worker
958*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_zero) {
959*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
960*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
961*4bdc9457SAndroid Build Coastguard Worker    for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE+INCREMENTAL_TILE}; zero_index++) {
962*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
963*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
964*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
965*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
966*4bdc9457SAndroid Build Coastguard Worker        .input_offset(${next_prime(CHANNEL_TILE+1)})
967*4bdc9457SAndroid Build Coastguard Worker        .zero_index(zero_index)
968*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
969*4bdc9457SAndroid Build Coastguard Worker    }
970*4bdc9457SAndroid Build Coastguard Worker  }
971*4bdc9457SAndroid Build Coastguard Worker
972*4bdc9457SAndroid Build Coastguard Worker  $if DATATYPE == "qu8":
973*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_input_scale) {
974*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
975*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
976*4bdc9457SAndroid Build Coastguard Worker      for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
977*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
978*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
979*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
980*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
981*4bdc9457SAndroid Build Coastguard Worker          .input_scale(scale)
982*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
983*4bdc9457SAndroid Build Coastguard Worker      }
984*4bdc9457SAndroid Build Coastguard Worker    }
985*4bdc9457SAndroid Build Coastguard Worker
986*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_input_zero_point) {
987*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
988*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
989*4bdc9457SAndroid Build Coastguard Worker      for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
990*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
991*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
992*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
993*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
994*4bdc9457SAndroid Build Coastguard Worker          .input_zero_point(zero_point)
995*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
996*4bdc9457SAndroid Build Coastguard Worker      }
997*4bdc9457SAndroid Build Coastguard Worker    }
998*4bdc9457SAndroid Build Coastguard Worker
999*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_output_scale) {
1000*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1001*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1002*4bdc9457SAndroid Build Coastguard Worker      for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1003*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1004*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1005*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1006*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
1007*4bdc9457SAndroid Build Coastguard Worker          .output_scale(scale)
1008*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1009*4bdc9457SAndroid Build Coastguard Worker      }
1010*4bdc9457SAndroid Build Coastguard Worker    }
1011*4bdc9457SAndroid Build Coastguard Worker
1012*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_output_zero_point) {
1013*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1014*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1015*4bdc9457SAndroid Build Coastguard Worker      for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1016*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1017*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1018*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1019*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
1020*4bdc9457SAndroid Build Coastguard Worker          .output_zero_point(zero_point)
1021*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1022*4bdc9457SAndroid Build Coastguard Worker      }
1023*4bdc9457SAndroid Build Coastguard Worker    }
1024*4bdc9457SAndroid Build Coastguard Worker
1025*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_qmin) {
1026*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1027*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1028*4bdc9457SAndroid Build Coastguard Worker    AvgPoolMicrokernelTester()
1029*4bdc9457SAndroid Build Coastguard Worker      .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1030*4bdc9457SAndroid Build Coastguard Worker      .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1031*4bdc9457SAndroid Build Coastguard Worker      .channels(${CHANNEL_TILE})
1032*4bdc9457SAndroid Build Coastguard Worker      .qmin(128)
1033*4bdc9457SAndroid Build Coastguard Worker      .Test(${", ".join(TEST_ARGS)});
1034*4bdc9457SAndroid Build Coastguard Worker  }
1035*4bdc9457SAndroid Build Coastguard Worker
1036*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_fulltile_with_qmax) {
1037*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1038*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1039*4bdc9457SAndroid Build Coastguard Worker    AvgPoolMicrokernelTester()
1040*4bdc9457SAndroid Build Coastguard Worker      .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1041*4bdc9457SAndroid Build Coastguard Worker      .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1042*4bdc9457SAndroid Build Coastguard Worker      .channels(${CHANNEL_TILE})
1043*4bdc9457SAndroid Build Coastguard Worker      .qmax(128)
1044*4bdc9457SAndroid Build Coastguard Worker      .Test(${", ".join(TEST_ARGS)});
1045*4bdc9457SAndroid Build Coastguard Worker  }
1046*4bdc9457SAndroid Build Coastguard Worker
1047*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile) {
1048*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1049*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1050*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1051*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1052*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(pooling_elements)
1053*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1054*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
1055*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1056*4bdc9457SAndroid Build Coastguard Worker    }
1057*4bdc9457SAndroid Build Coastguard Worker  }
1058*4bdc9457SAndroid Build Coastguard Worker
1059*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile_with_input_offset) {
1060*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1061*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1062*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1063*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1064*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(pooling_elements)
1065*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1066*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
1067*4bdc9457SAndroid Build Coastguard Worker        .input_offset(${next_prime(CHANNEL_TILE+1)})
1068*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1069*4bdc9457SAndroid Build Coastguard Worker    }
1070*4bdc9457SAndroid Build Coastguard Worker  }
1071*4bdc9457SAndroid Build Coastguard Worker
1072*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_twopass_subtile_with_zero) {
1073*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1074*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1075*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1076*4bdc9457SAndroid Build Coastguard Worker      for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
1077*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1078*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
1079*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1080*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
1081*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE+1)})
1082*4bdc9457SAndroid Build Coastguard Worker          .zero_index(zero_index)
1083*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1084*4bdc9457SAndroid Build Coastguard Worker      }
1085*4bdc9457SAndroid Build Coastguard Worker    }
1086*4bdc9457SAndroid Build Coastguard Worker  }
1087*4bdc9457SAndroid Build Coastguard Worker
1088*4bdc9457SAndroid Build Coastguard Worker  $if CHANNEL_TILE > 1:
1089*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile) {
1090*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1091*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1092*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1093*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1094*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1095*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1096*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1097*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1098*4bdc9457SAndroid Build Coastguard Worker      }
1099*4bdc9457SAndroid Build Coastguard Worker    }
1100*4bdc9457SAndroid Build Coastguard Worker
1101*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) {
1102*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1103*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1104*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1105*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1106*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1107*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1108*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1109*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE*5)})
1110*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1111*4bdc9457SAndroid Build Coastguard Worker      }
1112*4bdc9457SAndroid Build Coastguard Worker    }
1113*4bdc9457SAndroid Build Coastguard Worker
1114*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_zero) {
1115*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1116*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1117*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1118*4bdc9457SAndroid Build Coastguard Worker        for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE+INCREMENTAL_TILE}; zero_index++) {
1119*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1120*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1121*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1122*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1123*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*5)})
1124*4bdc9457SAndroid Build Coastguard Worker            .zero_index(zero_index)
1125*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1126*4bdc9457SAndroid Build Coastguard Worker        }
1127*4bdc9457SAndroid Build Coastguard Worker      }
1128*4bdc9457SAndroid Build Coastguard Worker    }
1129*4bdc9457SAndroid Build Coastguard Worker
1130*4bdc9457SAndroid Build Coastguard Worker    $if DATATYPE == "qu8":
1131*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_input_scale) {
1132*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1133*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1134*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1135*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1136*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1137*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1138*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1139*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1140*4bdc9457SAndroid Build Coastguard Worker              .input_scale(scale)
1141*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1142*4bdc9457SAndroid Build Coastguard Worker          }
1143*4bdc9457SAndroid Build Coastguard Worker        }
1144*4bdc9457SAndroid Build Coastguard Worker      }
1145*4bdc9457SAndroid Build Coastguard Worker
1146*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_input_zero_point) {
1147*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1148*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1149*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1150*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1151*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1152*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1153*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1154*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1155*4bdc9457SAndroid Build Coastguard Worker              .input_zero_point(zero_point)
1156*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1157*4bdc9457SAndroid Build Coastguard Worker          }
1158*4bdc9457SAndroid Build Coastguard Worker        }
1159*4bdc9457SAndroid Build Coastguard Worker      }
1160*4bdc9457SAndroid Build Coastguard Worker
1161*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_output_scale) {
1162*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1163*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1164*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1165*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1166*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1167*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1168*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1169*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1170*4bdc9457SAndroid Build Coastguard Worker              .output_scale(scale)
1171*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1172*4bdc9457SAndroid Build Coastguard Worker          }
1173*4bdc9457SAndroid Build Coastguard Worker        }
1174*4bdc9457SAndroid Build Coastguard Worker      }
1175*4bdc9457SAndroid Build Coastguard Worker
1176*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_output_zero_point) {
1177*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1178*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1179*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1180*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1181*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1182*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1183*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1184*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1185*4bdc9457SAndroid Build Coastguard Worker              .output_zero_point(zero_point)
1186*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1187*4bdc9457SAndroid Build Coastguard Worker          }
1188*4bdc9457SAndroid Build Coastguard Worker        }
1189*4bdc9457SAndroid Build Coastguard Worker      }
1190*4bdc9457SAndroid Build Coastguard Worker
1191*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_qmin) {
1192*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1193*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1194*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1195*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1196*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1197*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1198*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1199*4bdc9457SAndroid Build Coastguard Worker          .qmin(128)
1200*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1201*4bdc9457SAndroid Build Coastguard Worker      }
1202*4bdc9457SAndroid Build Coastguard Worker    }
1203*4bdc9457SAndroid Build Coastguard Worker
1204*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_fulltile_with_qmax) {
1205*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1206*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1207*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1208*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1209*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1210*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1211*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1212*4bdc9457SAndroid Build Coastguard Worker          .qmax(128)
1213*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1214*4bdc9457SAndroid Build Coastguard Worker      }
1215*4bdc9457SAndroid Build Coastguard Worker    }
1216*4bdc9457SAndroid Build Coastguard Worker
1217*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile) {
1218*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1219*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1220*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1221*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1222*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1223*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1224*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1225*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1226*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1227*4bdc9457SAndroid Build Coastguard Worker        }
1228*4bdc9457SAndroid Build Coastguard Worker      }
1229*4bdc9457SAndroid Build Coastguard Worker    }
1230*4bdc9457SAndroid Build Coastguard Worker
1231*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile_with_input_offset) {
1232*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1233*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1234*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1235*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1236*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1237*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1238*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1239*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1240*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*8)})
1241*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1242*4bdc9457SAndroid Build Coastguard Worker        }
1243*4bdc9457SAndroid Build Coastguard Worker      }
1244*4bdc9457SAndroid Build Coastguard Worker    }
1245*4bdc9457SAndroid Build Coastguard Worker
1246*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_twopass_subtile_with_zero) {
1247*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1248*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1249*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1250*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1251*4bdc9457SAndroid Build Coastguard Worker          for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
1252*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1253*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
1254*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1255*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1256*4bdc9457SAndroid Build Coastguard Worker              .input_offset(${next_prime(CHANNEL_TILE*8)})
1257*4bdc9457SAndroid Build Coastguard Worker              .zero_index(zero_index)
1258*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1259*4bdc9457SAndroid Build Coastguard Worker          }
1260*4bdc9457SAndroid Build Coastguard Worker        }
1261*4bdc9457SAndroid Build Coastguard Worker      }
1262*4bdc9457SAndroid Build Coastguard Worker    }
1263*4bdc9457SAndroid Build Coastguard Worker
1264*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile) {
1265*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1266*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1267*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1268*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1269*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1270*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1271*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1272*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1273*4bdc9457SAndroid Build Coastguard Worker      }
1274*4bdc9457SAndroid Build Coastguard Worker    }
1275*4bdc9457SAndroid Build Coastguard Worker
1276*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) {
1277*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1278*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1279*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1280*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1281*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1282*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1283*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1284*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE)})
1285*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1286*4bdc9457SAndroid Build Coastguard Worker      }
1287*4bdc9457SAndroid Build Coastguard Worker    }
1288*4bdc9457SAndroid Build Coastguard Worker
1289*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_zero_index) {
1290*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1291*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1292*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1293*4bdc9457SAndroid Build Coastguard Worker        for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE+INCREMENTAL_TILE}; zero_index++) {
1294*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1295*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1296*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1297*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1298*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE)})
1299*4bdc9457SAndroid Build Coastguard Worker            .zero_index(zero_index)
1300*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1301*4bdc9457SAndroid Build Coastguard Worker        }
1302*4bdc9457SAndroid Build Coastguard Worker      }
1303*4bdc9457SAndroid Build Coastguard Worker    }
1304*4bdc9457SAndroid Build Coastguard Worker
1305*4bdc9457SAndroid Build Coastguard Worker    $if DATATYPE == "qu8":
1306*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_input_scale) {
1307*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1308*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1309*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1310*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1311*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1312*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1313*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1314*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1315*4bdc9457SAndroid Build Coastguard Worker              .input_scale(scale)
1316*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1317*4bdc9457SAndroid Build Coastguard Worker          }
1318*4bdc9457SAndroid Build Coastguard Worker        }
1319*4bdc9457SAndroid Build Coastguard Worker      }
1320*4bdc9457SAndroid Build Coastguard Worker
1321*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_input_zero_point) {
1322*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1323*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1324*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1325*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1326*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1327*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1328*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1329*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1330*4bdc9457SAndroid Build Coastguard Worker              .input_zero_point(zero_point)
1331*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1332*4bdc9457SAndroid Build Coastguard Worker          }
1333*4bdc9457SAndroid Build Coastguard Worker        }
1334*4bdc9457SAndroid Build Coastguard Worker      }
1335*4bdc9457SAndroid Build Coastguard Worker
1336*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_output_scale) {
1337*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1338*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1339*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1340*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1341*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1342*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1343*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1344*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1345*4bdc9457SAndroid Build Coastguard Worker              .output_scale(scale)
1346*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1347*4bdc9457SAndroid Build Coastguard Worker          }
1348*4bdc9457SAndroid Build Coastguard Worker        }
1349*4bdc9457SAndroid Build Coastguard Worker      }
1350*4bdc9457SAndroid Build Coastguard Worker
1351*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_output_zero_point) {
1352*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1353*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1354*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1355*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1356*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1357*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1358*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1359*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1360*4bdc9457SAndroid Build Coastguard Worker              .output_zero_point(zero_point)
1361*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1362*4bdc9457SAndroid Build Coastguard Worker          }
1363*4bdc9457SAndroid Build Coastguard Worker        }
1364*4bdc9457SAndroid Build Coastguard Worker      }
1365*4bdc9457SAndroid Build Coastguard Worker
1366*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_qmin) {
1367*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1368*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1369*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1370*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1371*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1372*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1373*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1374*4bdc9457SAndroid Build Coastguard Worker          .qmin(128)
1375*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1376*4bdc9457SAndroid Build Coastguard Worker      }
1377*4bdc9457SAndroid Build Coastguard Worker    }
1378*4bdc9457SAndroid Build Coastguard Worker
1379*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_fulltile_with_qmax) {
1380*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1381*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1382*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1383*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1384*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1385*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1386*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1387*4bdc9457SAndroid Build Coastguard Worker          .qmax(128)
1388*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1389*4bdc9457SAndroid Build Coastguard Worker      }
1390*4bdc9457SAndroid Build Coastguard Worker    }
1391*4bdc9457SAndroid Build Coastguard Worker
1392*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile) {
1393*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1394*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1395*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1396*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1397*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1398*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1399*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1400*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1401*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1402*4bdc9457SAndroid Build Coastguard Worker        }
1403*4bdc9457SAndroid Build Coastguard Worker      }
1404*4bdc9457SAndroid Build Coastguard Worker    }
1405*4bdc9457SAndroid Build Coastguard Worker
1406*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile_with_input_offset) {
1407*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1408*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1409*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1410*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1411*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1412*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1413*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1414*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1415*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE)})
1416*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1417*4bdc9457SAndroid Build Coastguard Worker        }
1418*4bdc9457SAndroid Build Coastguard Worker      }
1419*4bdc9457SAndroid Build Coastguard Worker    }
1420*4bdc9457SAndroid Build Coastguard Worker
1421*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_twopass_subtile_with_zero) {
1422*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1423*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1424*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1425*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1426*4bdc9457SAndroid Build Coastguard Worker          for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
1427*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1428*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
1429*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1430*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1431*4bdc9457SAndroid Build Coastguard Worker              .input_offset(${next_prime(CHANNEL_TILE)})
1432*4bdc9457SAndroid Build Coastguard Worker              .zero_index(zero_index)
1433*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1434*4bdc9457SAndroid Build Coastguard Worker          }
1435*4bdc9457SAndroid Build Coastguard Worker        }
1436*4bdc9457SAndroid Build Coastguard Worker      }
1437*4bdc9457SAndroid Build Coastguard Worker    }
1438*4bdc9457SAndroid Build Coastguard Worker
1439*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile) {
1440*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1441*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1442*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1443*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1444*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1445*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1446*4bdc9457SAndroid Build Coastguard Worker        .channels(channels)
1447*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1448*4bdc9457SAndroid Build Coastguard Worker    }
1449*4bdc9457SAndroid Build Coastguard Worker  }
1450*4bdc9457SAndroid Build Coastguard Worker
1451*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_input_offset) {
1452*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1453*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1454*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1455*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1456*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1457*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1458*4bdc9457SAndroid Build Coastguard Worker        .channels(channels)
1459*4bdc9457SAndroid Build Coastguard Worker        .input_offset(${next_prime(CHANNEL_TILE*2)})
1460*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1461*4bdc9457SAndroid Build Coastguard Worker    }
1462*4bdc9457SAndroid Build Coastguard Worker  }
1463*4bdc9457SAndroid Build Coastguard Worker
1464*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_zero) {
1465*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1466*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1467*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1468*4bdc9457SAndroid Build Coastguard Worker      for (size_t zero_index = 0; zero_index < ${PRIMARY_TILE+INCREMENTAL_TILE}; zero_index++) {
1469*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1470*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1471*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1472*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1473*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE*2)})
1474*4bdc9457SAndroid Build Coastguard Worker          .zero_index(zero_index)
1475*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1476*4bdc9457SAndroid Build Coastguard Worker      }
1477*4bdc9457SAndroid Build Coastguard Worker    }
1478*4bdc9457SAndroid Build Coastguard Worker  }
1479*4bdc9457SAndroid Build Coastguard Worker
1480*4bdc9457SAndroid Build Coastguard Worker  $if DATATYPE == "qu8":
1481*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_input_scale) {
1482*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1483*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1484*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1485*4bdc9457SAndroid Build Coastguard Worker        for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1486*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1487*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1488*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1489*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1490*4bdc9457SAndroid Build Coastguard Worker            .input_scale(scale)
1491*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1492*4bdc9457SAndroid Build Coastguard Worker        }
1493*4bdc9457SAndroid Build Coastguard Worker      }
1494*4bdc9457SAndroid Build Coastguard Worker    }
1495*4bdc9457SAndroid Build Coastguard Worker
1496*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_input_zero_point) {
1497*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1498*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1499*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1500*4bdc9457SAndroid Build Coastguard Worker        for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1501*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1502*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1503*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1504*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1505*4bdc9457SAndroid Build Coastguard Worker            .input_zero_point(zero_point)
1506*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1507*4bdc9457SAndroid Build Coastguard Worker        }
1508*4bdc9457SAndroid Build Coastguard Worker      }
1509*4bdc9457SAndroid Build Coastguard Worker    }
1510*4bdc9457SAndroid Build Coastguard Worker
1511*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_output_scale) {
1512*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1513*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1514*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1515*4bdc9457SAndroid Build Coastguard Worker        for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1516*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1517*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1518*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1519*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1520*4bdc9457SAndroid Build Coastguard Worker            .output_scale(scale)
1521*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1522*4bdc9457SAndroid Build Coastguard Worker        }
1523*4bdc9457SAndroid Build Coastguard Worker      }
1524*4bdc9457SAndroid Build Coastguard Worker    }
1525*4bdc9457SAndroid Build Coastguard Worker
1526*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_output_zero_point) {
1527*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1528*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1529*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1530*4bdc9457SAndroid Build Coastguard Worker        for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1531*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1532*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1533*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1534*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1535*4bdc9457SAndroid Build Coastguard Worker            .output_zero_point(zero_point)
1536*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1537*4bdc9457SAndroid Build Coastguard Worker        }
1538*4bdc9457SAndroid Build Coastguard Worker      }
1539*4bdc9457SAndroid Build Coastguard Worker    }
1540*4bdc9457SAndroid Build Coastguard Worker
1541*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_qmin) {
1542*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1543*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1544*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1545*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1546*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1547*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1548*4bdc9457SAndroid Build Coastguard Worker        .channels(channels)
1549*4bdc9457SAndroid Build Coastguard Worker        .qmin(128)
1550*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1551*4bdc9457SAndroid Build Coastguard Worker    }
1552*4bdc9457SAndroid Build Coastguard Worker  }
1553*4bdc9457SAndroid Build Coastguard Worker
1554*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_fulltile_with_qmax) {
1555*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1556*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1557*4bdc9457SAndroid Build Coastguard Worker    for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1558*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1559*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(${PRIMARY_TILE+INCREMENTAL_TILE})
1560*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1561*4bdc9457SAndroid Build Coastguard Worker        .channels(channels)
1562*4bdc9457SAndroid Build Coastguard Worker        .qmax(128)
1563*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1564*4bdc9457SAndroid Build Coastguard Worker    }
1565*4bdc9457SAndroid Build Coastguard Worker  }
1566*4bdc9457SAndroid Build Coastguard Worker
1567*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile) {
1568*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1569*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1570*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1571*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1572*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1573*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
1574*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1575*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1576*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1577*4bdc9457SAndroid Build Coastguard Worker      }
1578*4bdc9457SAndroid Build Coastguard Worker    }
1579*4bdc9457SAndroid Build Coastguard Worker  }
1580*4bdc9457SAndroid Build Coastguard Worker
1581*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile_with_input_offset) {
1582*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1583*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1584*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1585*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1586*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1587*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
1588*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1589*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
1590*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE*2)})
1591*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1592*4bdc9457SAndroid Build Coastguard Worker      }
1593*4bdc9457SAndroid Build Coastguard Worker    }
1594*4bdc9457SAndroid Build Coastguard Worker  }
1595*4bdc9457SAndroid Build Coastguard Worker
1596*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_twopass_subtile_with_zero) {
1597*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1598*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1599*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+1}; pooling_elements < ${PRIMARY_TILE+INCREMENTAL_TILE}; pooling_elements++) {
1600*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
1601*4bdc9457SAndroid Build Coastguard Worker        for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
1602*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1603*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1604*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1605*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1606*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*2)})
1607*4bdc9457SAndroid Build Coastguard Worker            .zero_index(zero_index)
1608*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1609*4bdc9457SAndroid Build Coastguard Worker        }
1610*4bdc9457SAndroid Build Coastguard Worker      }
1611*4bdc9457SAndroid Build Coastguard Worker    }
1612*4bdc9457SAndroid Build Coastguard Worker  }
1613*4bdc9457SAndroid Build Coastguard Worker
1614*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass) {
1615*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1616*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1617*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1618*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1619*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(pooling_elements)
1620*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1621*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
1622*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1623*4bdc9457SAndroid Build Coastguard Worker    }
1624*4bdc9457SAndroid Build Coastguard Worker  }
1625*4bdc9457SAndroid Build Coastguard Worker
1626*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_input_offset) {
1627*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1628*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1629*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1630*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1631*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(pooling_elements)
1632*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1633*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
1634*4bdc9457SAndroid Build Coastguard Worker        .input_offset(${next_prime(CHANNEL_TILE+1)})
1635*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1636*4bdc9457SAndroid Build Coastguard Worker    }
1637*4bdc9457SAndroid Build Coastguard Worker  }
1638*4bdc9457SAndroid Build Coastguard Worker
1639*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_zero) {
1640*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1641*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1642*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1643*4bdc9457SAndroid Build Coastguard Worker      for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
1644*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
1645*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
1646*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1647*4bdc9457SAndroid Build Coastguard Worker          .channels(${CHANNEL_TILE})
1648*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE+1)})
1649*4bdc9457SAndroid Build Coastguard Worker          .zero_index(zero_index)
1650*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
1651*4bdc9457SAndroid Build Coastguard Worker      }
1652*4bdc9457SAndroid Build Coastguard Worker    }
1653*4bdc9457SAndroid Build Coastguard Worker  }
1654*4bdc9457SAndroid Build Coastguard Worker
1655*4bdc9457SAndroid Build Coastguard Worker  $if DATATYPE == "qu8":
1656*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_input_scale) {
1657*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1658*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1659*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1660*4bdc9457SAndroid Build Coastguard Worker        for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1661*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1662*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1663*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1664*4bdc9457SAndroid Build Coastguard Worker            .channels(${CHANNEL_TILE})
1665*4bdc9457SAndroid Build Coastguard Worker            .input_scale(scale)
1666*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1667*4bdc9457SAndroid Build Coastguard Worker        }
1668*4bdc9457SAndroid Build Coastguard Worker      }
1669*4bdc9457SAndroid Build Coastguard Worker    }
1670*4bdc9457SAndroid Build Coastguard Worker
1671*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_input_zero_point) {
1672*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1673*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1674*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1675*4bdc9457SAndroid Build Coastguard Worker        for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1676*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1677*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1678*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1679*4bdc9457SAndroid Build Coastguard Worker            .channels(${CHANNEL_TILE})
1680*4bdc9457SAndroid Build Coastguard Worker            .input_zero_point(zero_point)
1681*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1682*4bdc9457SAndroid Build Coastguard Worker        }
1683*4bdc9457SAndroid Build Coastguard Worker      }
1684*4bdc9457SAndroid Build Coastguard Worker    }
1685*4bdc9457SAndroid Build Coastguard Worker
1686*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_output_scale) {
1687*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1688*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1689*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1690*4bdc9457SAndroid Build Coastguard Worker        for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1691*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1692*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1693*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1694*4bdc9457SAndroid Build Coastguard Worker            .channels(${CHANNEL_TILE})
1695*4bdc9457SAndroid Build Coastguard Worker            .output_scale(scale)
1696*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1697*4bdc9457SAndroid Build Coastguard Worker        }
1698*4bdc9457SAndroid Build Coastguard Worker      }
1699*4bdc9457SAndroid Build Coastguard Worker    }
1700*4bdc9457SAndroid Build Coastguard Worker
1701*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_output_zero_point) {
1702*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1703*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1704*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1705*4bdc9457SAndroid Build Coastguard Worker        for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1706*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1707*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1708*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1709*4bdc9457SAndroid Build Coastguard Worker            .channels(${CHANNEL_TILE})
1710*4bdc9457SAndroid Build Coastguard Worker            .output_zero_point(zero_point)
1711*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1712*4bdc9457SAndroid Build Coastguard Worker        }
1713*4bdc9457SAndroid Build Coastguard Worker      }
1714*4bdc9457SAndroid Build Coastguard Worker    }
1715*4bdc9457SAndroid Build Coastguard Worker
1716*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_qmin) {
1717*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1718*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1719*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1720*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1721*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(pooling_elements)
1722*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1723*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
1724*4bdc9457SAndroid Build Coastguard Worker        .qmin(128)
1725*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1726*4bdc9457SAndroid Build Coastguard Worker    }
1727*4bdc9457SAndroid Build Coastguard Worker  }
1728*4bdc9457SAndroid Build Coastguard Worker
1729*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_eq_${CHANNEL_TILE}_multipass_with_qmax) {
1730*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
1731*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
1732*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1733*4bdc9457SAndroid Build Coastguard Worker      AvgPoolMicrokernelTester()
1734*4bdc9457SAndroid Build Coastguard Worker        .pooling_elements(pooling_elements)
1735*4bdc9457SAndroid Build Coastguard Worker        .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1736*4bdc9457SAndroid Build Coastguard Worker        .channels(${CHANNEL_TILE})
1737*4bdc9457SAndroid Build Coastguard Worker        .qmax(128)
1738*4bdc9457SAndroid Build Coastguard Worker        .Test(${", ".join(TEST_ARGS)});
1739*4bdc9457SAndroid Build Coastguard Worker    }
1740*4bdc9457SAndroid Build Coastguard Worker  }
1741*4bdc9457SAndroid Build Coastguard Worker
1742*4bdc9457SAndroid Build Coastguard Worker  $if CHANNEL_TILE > 1:
1743*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass) {
1744*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1745*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1746*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1747*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1748*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1749*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1750*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1751*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1752*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1753*4bdc9457SAndroid Build Coastguard Worker        }
1754*4bdc9457SAndroid Build Coastguard Worker      }
1755*4bdc9457SAndroid Build Coastguard Worker    }
1756*4bdc9457SAndroid Build Coastguard Worker
1757*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_input_offset) {
1758*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1759*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1760*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1761*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1762*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1763*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1764*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1765*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1766*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*8)})
1767*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1768*4bdc9457SAndroid Build Coastguard Worker        }
1769*4bdc9457SAndroid Build Coastguard Worker      }
1770*4bdc9457SAndroid Build Coastguard Worker    }
1771*4bdc9457SAndroid Build Coastguard Worker
1772*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_zero) {
1773*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1774*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1775*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1776*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1777*4bdc9457SAndroid Build Coastguard Worker          for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
1778*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1779*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
1780*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1781*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1782*4bdc9457SAndroid Build Coastguard Worker              .input_offset(${next_prime(CHANNEL_TILE*8)})
1783*4bdc9457SAndroid Build Coastguard Worker              .zero_index(zero_index)
1784*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1785*4bdc9457SAndroid Build Coastguard Worker          }
1786*4bdc9457SAndroid Build Coastguard Worker        }
1787*4bdc9457SAndroid Build Coastguard Worker      }
1788*4bdc9457SAndroid Build Coastguard Worker    }
1789*4bdc9457SAndroid Build Coastguard Worker
1790*4bdc9457SAndroid Build Coastguard Worker    $if DATATYPE == "qu8":
1791*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_input_scale) {
1792*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1793*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1794*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1795*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1796*4bdc9457SAndroid Build Coastguard Worker            for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1797*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
1798*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
1799*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1800*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
1801*4bdc9457SAndroid Build Coastguard Worker                .input_scale(scale)
1802*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
1803*4bdc9457SAndroid Build Coastguard Worker            }
1804*4bdc9457SAndroid Build Coastguard Worker          }
1805*4bdc9457SAndroid Build Coastguard Worker        }
1806*4bdc9457SAndroid Build Coastguard Worker      }
1807*4bdc9457SAndroid Build Coastguard Worker
1808*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_input_zero_point) {
1809*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1810*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1811*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1812*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1813*4bdc9457SAndroid Build Coastguard Worker            for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1814*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
1815*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
1816*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1817*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
1818*4bdc9457SAndroid Build Coastguard Worker                .input_zero_point(zero_point)
1819*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
1820*4bdc9457SAndroid Build Coastguard Worker            }
1821*4bdc9457SAndroid Build Coastguard Worker          }
1822*4bdc9457SAndroid Build Coastguard Worker        }
1823*4bdc9457SAndroid Build Coastguard Worker      }
1824*4bdc9457SAndroid Build Coastguard Worker
1825*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_output_scale) {
1826*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1827*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1828*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1829*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1830*4bdc9457SAndroid Build Coastguard Worker            for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1831*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
1832*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
1833*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1834*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
1835*4bdc9457SAndroid Build Coastguard Worker                .output_scale(scale)
1836*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
1837*4bdc9457SAndroid Build Coastguard Worker            }
1838*4bdc9457SAndroid Build Coastguard Worker          }
1839*4bdc9457SAndroid Build Coastguard Worker        }
1840*4bdc9457SAndroid Build Coastguard Worker      }
1841*4bdc9457SAndroid Build Coastguard Worker
1842*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_output_zero_point) {
1843*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1844*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1845*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1846*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1847*4bdc9457SAndroid Build Coastguard Worker            for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1848*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
1849*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
1850*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1851*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
1852*4bdc9457SAndroid Build Coastguard Worker                .output_zero_point(zero_point)
1853*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
1854*4bdc9457SAndroid Build Coastguard Worker            }
1855*4bdc9457SAndroid Build Coastguard Worker          }
1856*4bdc9457SAndroid Build Coastguard Worker        }
1857*4bdc9457SAndroid Build Coastguard Worker      }
1858*4bdc9457SAndroid Build Coastguard Worker
1859*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_qmin) {
1860*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1861*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1862*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1863*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1864*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1865*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1866*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1867*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1868*4bdc9457SAndroid Build Coastguard Worker            .qmin(128)
1869*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1870*4bdc9457SAndroid Build Coastguard Worker        }
1871*4bdc9457SAndroid Build Coastguard Worker      }
1872*4bdc9457SAndroid Build Coastguard Worker    }
1873*4bdc9457SAndroid Build Coastguard Worker
1874*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_div_${CHANNEL_TILE}_multipass_with_qmax) {
1875*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1876*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1877*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1878*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE*2}; channels < ${CHANNEL_TILE*8}; channels += ${CHANNEL_TILE}) {
1879*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1880*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1881*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1882*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1883*4bdc9457SAndroid Build Coastguard Worker            .qmax(128)
1884*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1885*4bdc9457SAndroid Build Coastguard Worker        }
1886*4bdc9457SAndroid Build Coastguard Worker      }
1887*4bdc9457SAndroid Build Coastguard Worker    }
1888*4bdc9457SAndroid Build Coastguard Worker
1889*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass) {
1890*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1891*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1892*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1893*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1894*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1895*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1896*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1897*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1898*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1899*4bdc9457SAndroid Build Coastguard Worker        }
1900*4bdc9457SAndroid Build Coastguard Worker      }
1901*4bdc9457SAndroid Build Coastguard Worker    }
1902*4bdc9457SAndroid Build Coastguard Worker
1903*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_input_offset) {
1904*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1905*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1906*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1907*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1908*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
1909*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
1910*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1911*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
1912*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${CHANNEL_TILE})
1913*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
1914*4bdc9457SAndroid Build Coastguard Worker        }
1915*4bdc9457SAndroid Build Coastguard Worker      }
1916*4bdc9457SAndroid Build Coastguard Worker    }
1917*4bdc9457SAndroid Build Coastguard Worker
1918*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_zero) {
1919*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
1920*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
1921*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1922*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1923*4bdc9457SAndroid Build Coastguard Worker          for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
1924*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
1925*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
1926*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1927*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
1928*4bdc9457SAndroid Build Coastguard Worker              .input_offset(${CHANNEL_TILE})
1929*4bdc9457SAndroid Build Coastguard Worker              .zero_index(zero_index)
1930*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
1931*4bdc9457SAndroid Build Coastguard Worker          }
1932*4bdc9457SAndroid Build Coastguard Worker        }
1933*4bdc9457SAndroid Build Coastguard Worker      }
1934*4bdc9457SAndroid Build Coastguard Worker    }
1935*4bdc9457SAndroid Build Coastguard Worker
1936*4bdc9457SAndroid Build Coastguard Worker    $if DATATYPE == "qu8":
1937*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_input_scale) {
1938*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1939*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1940*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1941*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1942*4bdc9457SAndroid Build Coastguard Worker            for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1943*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
1944*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
1945*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1946*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
1947*4bdc9457SAndroid Build Coastguard Worker                .input_scale(scale)
1948*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
1949*4bdc9457SAndroid Build Coastguard Worker            }
1950*4bdc9457SAndroid Build Coastguard Worker          }
1951*4bdc9457SAndroid Build Coastguard Worker        }
1952*4bdc9457SAndroid Build Coastguard Worker      }
1953*4bdc9457SAndroid Build Coastguard Worker
1954*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_input_zero_point) {
1955*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1956*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1957*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1958*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1959*4bdc9457SAndroid Build Coastguard Worker            for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1960*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
1961*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
1962*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1963*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
1964*4bdc9457SAndroid Build Coastguard Worker                .input_zero_point(zero_point)
1965*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
1966*4bdc9457SAndroid Build Coastguard Worker            }
1967*4bdc9457SAndroid Build Coastguard Worker          }
1968*4bdc9457SAndroid Build Coastguard Worker        }
1969*4bdc9457SAndroid Build Coastguard Worker      }
1970*4bdc9457SAndroid Build Coastguard Worker
1971*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_output_scale) {
1972*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1973*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1974*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1975*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1976*4bdc9457SAndroid Build Coastguard Worker            for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
1977*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
1978*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
1979*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1980*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
1981*4bdc9457SAndroid Build Coastguard Worker                .output_scale(scale)
1982*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
1983*4bdc9457SAndroid Build Coastguard Worker            }
1984*4bdc9457SAndroid Build Coastguard Worker          }
1985*4bdc9457SAndroid Build Coastguard Worker        }
1986*4bdc9457SAndroid Build Coastguard Worker      }
1987*4bdc9457SAndroid Build Coastguard Worker
1988*4bdc9457SAndroid Build Coastguard Worker      TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_output_zero_point) {
1989*4bdc9457SAndroid Build Coastguard Worker        $if ISA_CHECK:
1990*4bdc9457SAndroid Build Coastguard Worker          ${ISA_CHECK};
1991*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
1992*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
1993*4bdc9457SAndroid Build Coastguard Worker            for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
1994*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
1995*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
1996*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
1997*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
1998*4bdc9457SAndroid Build Coastguard Worker                .output_zero_point(zero_point)
1999*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
2000*4bdc9457SAndroid Build Coastguard Worker            }
2001*4bdc9457SAndroid Build Coastguard Worker          }
2002*4bdc9457SAndroid Build Coastguard Worker        }
2003*4bdc9457SAndroid Build Coastguard Worker      }
2004*4bdc9457SAndroid Build Coastguard Worker
2005*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_qmin) {
2006*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2007*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2008*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2009*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
2010*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
2011*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
2012*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2013*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
2014*4bdc9457SAndroid Build Coastguard Worker            .qmin(128)
2015*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
2016*4bdc9457SAndroid Build Coastguard Worker        }
2017*4bdc9457SAndroid Build Coastguard Worker      }
2018*4bdc9457SAndroid Build Coastguard Worker    }
2019*4bdc9457SAndroid Build Coastguard Worker
2020*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_lt_${CHANNEL_TILE}_multipass_with_qmax) {
2021*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2022*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2023*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2024*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels < ${CHANNEL_TILE}; channels++) {
2025*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
2026*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
2027*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2028*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
2029*4bdc9457SAndroid Build Coastguard Worker            .qmax(128)
2030*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
2031*4bdc9457SAndroid Build Coastguard Worker        }
2032*4bdc9457SAndroid Build Coastguard Worker      }
2033*4bdc9457SAndroid Build Coastguard Worker    }
2034*4bdc9457SAndroid Build Coastguard Worker
2035*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass) {
2036*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2037*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2038*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2039*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2040*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
2041*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
2042*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2043*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
2044*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
2045*4bdc9457SAndroid Build Coastguard Worker      }
2046*4bdc9457SAndroid Build Coastguard Worker    }
2047*4bdc9457SAndroid Build Coastguard Worker  }
2048*4bdc9457SAndroid Build Coastguard Worker
2049*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_input_offset) {
2050*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2051*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2052*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2053*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2054*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
2055*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
2056*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2057*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
2058*4bdc9457SAndroid Build Coastguard Worker          .input_offset(${next_prime(CHANNEL_TILE*2)})
2059*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
2060*4bdc9457SAndroid Build Coastguard Worker      }
2061*4bdc9457SAndroid Build Coastguard Worker    }
2062*4bdc9457SAndroid Build Coastguard Worker  }
2063*4bdc9457SAndroid Build Coastguard Worker
2064*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_zero) {
2065*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2066*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2067*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2068*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2069*4bdc9457SAndroid Build Coastguard Worker        for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
2070*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
2071*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
2072*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2073*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
2074*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*2)})
2075*4bdc9457SAndroid Build Coastguard Worker            .zero_index(zero_index)
2076*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
2077*4bdc9457SAndroid Build Coastguard Worker        }
2078*4bdc9457SAndroid Build Coastguard Worker      }
2079*4bdc9457SAndroid Build Coastguard Worker    }
2080*4bdc9457SAndroid Build Coastguard Worker  }
2081*4bdc9457SAndroid Build Coastguard Worker
2082*4bdc9457SAndroid Build Coastguard Worker  $if DATATYPE == "qu8":
2083*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_input_scale) {
2084*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2085*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2086*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2087*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2088*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
2089*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
2090*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
2091*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2092*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
2093*4bdc9457SAndroid Build Coastguard Worker              .input_scale(scale)
2094*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
2095*4bdc9457SAndroid Build Coastguard Worker          }
2096*4bdc9457SAndroid Build Coastguard Worker        }
2097*4bdc9457SAndroid Build Coastguard Worker      }
2098*4bdc9457SAndroid Build Coastguard Worker    }
2099*4bdc9457SAndroid Build Coastguard Worker
2100*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_input_zero_point) {
2101*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2102*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2103*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2104*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2105*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
2106*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
2107*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
2108*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2109*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
2110*4bdc9457SAndroid Build Coastguard Worker              .input_zero_point(zero_point)
2111*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
2112*4bdc9457SAndroid Build Coastguard Worker          }
2113*4bdc9457SAndroid Build Coastguard Worker        }
2114*4bdc9457SAndroid Build Coastguard Worker      }
2115*4bdc9457SAndroid Build Coastguard Worker    }
2116*4bdc9457SAndroid Build Coastguard Worker
2117*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_output_scale) {
2118*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2119*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2120*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2121*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2122*4bdc9457SAndroid Build Coastguard Worker          for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
2123*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
2124*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
2125*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2126*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
2127*4bdc9457SAndroid Build Coastguard Worker              .output_scale(scale)
2128*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
2129*4bdc9457SAndroid Build Coastguard Worker          }
2130*4bdc9457SAndroid Build Coastguard Worker        }
2131*4bdc9457SAndroid Build Coastguard Worker      }
2132*4bdc9457SAndroid Build Coastguard Worker    }
2133*4bdc9457SAndroid Build Coastguard Worker
2134*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_output_zero_point) {
2135*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2136*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2137*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2138*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2139*4bdc9457SAndroid Build Coastguard Worker          for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
2140*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
2141*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
2142*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2143*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
2144*4bdc9457SAndroid Build Coastguard Worker              .output_zero_point(zero_point)
2145*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
2146*4bdc9457SAndroid Build Coastguard Worker          }
2147*4bdc9457SAndroid Build Coastguard Worker        }
2148*4bdc9457SAndroid Build Coastguard Worker      }
2149*4bdc9457SAndroid Build Coastguard Worker    }
2150*4bdc9457SAndroid Build Coastguard Worker
2151*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_qmin) {
2152*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2153*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2154*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2155*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2156*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
2157*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
2158*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2159*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
2160*4bdc9457SAndroid Build Coastguard Worker          .qmin(128)
2161*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
2162*4bdc9457SAndroid Build Coastguard Worker      }
2163*4bdc9457SAndroid Build Coastguard Worker    }
2164*4bdc9457SAndroid Build Coastguard Worker  }
2165*4bdc9457SAndroid Build Coastguard Worker
2166*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, channels_gt_${CHANNEL_TILE}_multipass_with_qmax) {
2167*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2168*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2169*4bdc9457SAndroid Build Coastguard Worker    for (size_t pooling_elements = ${PRIMARY_TILE+INCREMENTAL_TILE+1}; pooling_elements <= ${PRIMARY_TILE+INCREMENTAL_TILE*3}; pooling_elements += 3) {
2170*4bdc9457SAndroid Build Coastguard Worker      for (size_t channels = ${CHANNEL_TILE+1}; channels < ${10 if CHANNEL_TILE == 1 else CHANNEL_TILE*2}; channels++) {
2171*4bdc9457SAndroid Build Coastguard Worker        AvgPoolMicrokernelTester()
2172*4bdc9457SAndroid Build Coastguard Worker          .pooling_elements(pooling_elements)
2173*4bdc9457SAndroid Build Coastguard Worker          .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2174*4bdc9457SAndroid Build Coastguard Worker          .channels(channels)
2175*4bdc9457SAndroid Build Coastguard Worker          .qmax(128)
2176*4bdc9457SAndroid Build Coastguard Worker          .Test(${", ".join(TEST_ARGS)});
2177*4bdc9457SAndroid Build Coastguard Worker      }
2178*4bdc9457SAndroid Build Coastguard Worker    }
2179*4bdc9457SAndroid Build Coastguard Worker  }
2180*4bdc9457SAndroid Build Coastguard Worker
2181*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels) {
2182*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2183*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2184*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2185*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2186*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2187*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
2188*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
2189*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
2190*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2191*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
2192*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
2193*4bdc9457SAndroid Build Coastguard Worker        }
2194*4bdc9457SAndroid Build Coastguard Worker      }
2195*4bdc9457SAndroid Build Coastguard Worker    }
2196*4bdc9457SAndroid Build Coastguard Worker  }
2197*4bdc9457SAndroid Build Coastguard Worker
2198*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_input_offset) {
2199*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2200*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2201*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2202*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2203*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2204*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
2205*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
2206*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
2207*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2208*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
2209*4bdc9457SAndroid Build Coastguard Worker            .input_offset(${next_prime(CHANNEL_TILE*5+1)})
2210*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
2211*4bdc9457SAndroid Build Coastguard Worker        }
2212*4bdc9457SAndroid Build Coastguard Worker      }
2213*4bdc9457SAndroid Build Coastguard Worker    }
2214*4bdc9457SAndroid Build Coastguard Worker  }
2215*4bdc9457SAndroid Build Coastguard Worker
2216*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_zero) {
2217*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2218*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2219*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2220*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2221*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2222*4bdc9457SAndroid Build Coastguard Worker          for (size_t zero_index = 0; zero_index < pooling_elements; zero_index++) {
2223*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
2224*4bdc9457SAndroid Build Coastguard Worker              .output_pixels(output_pixels)
2225*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
2226*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2227*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
2228*4bdc9457SAndroid Build Coastguard Worker              .input_offset(${next_prime(CHANNEL_TILE*5+1)})
2229*4bdc9457SAndroid Build Coastguard Worker              .zero_index(zero_index)
2230*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
2231*4bdc9457SAndroid Build Coastguard Worker          }
2232*4bdc9457SAndroid Build Coastguard Worker        }
2233*4bdc9457SAndroid Build Coastguard Worker      }
2234*4bdc9457SAndroid Build Coastguard Worker    }
2235*4bdc9457SAndroid Build Coastguard Worker  }
2236*4bdc9457SAndroid Build Coastguard Worker
2237*4bdc9457SAndroid Build Coastguard Worker  $if DATATYPE == "qu8":
2238*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, few_output_pixels_with_input_scale) {
2239*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2240*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2241*4bdc9457SAndroid Build Coastguard Worker      for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2242*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2243*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2244*4bdc9457SAndroid Build Coastguard Worker            for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
2245*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
2246*4bdc9457SAndroid Build Coastguard Worker                .output_pixels(output_pixels)
2247*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
2248*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2249*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
2250*4bdc9457SAndroid Build Coastguard Worker                .input_scale(scale)
2251*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
2252*4bdc9457SAndroid Build Coastguard Worker            }
2253*4bdc9457SAndroid Build Coastguard Worker          }
2254*4bdc9457SAndroid Build Coastguard Worker        }
2255*4bdc9457SAndroid Build Coastguard Worker      }
2256*4bdc9457SAndroid Build Coastguard Worker    }
2257*4bdc9457SAndroid Build Coastguard Worker
2258*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, few_output_pixels_with_input_zero_point) {
2259*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2260*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2261*4bdc9457SAndroid Build Coastguard Worker      for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2262*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2263*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2264*4bdc9457SAndroid Build Coastguard Worker            for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
2265*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
2266*4bdc9457SAndroid Build Coastguard Worker                .output_pixels(output_pixels)
2267*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
2268*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2269*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
2270*4bdc9457SAndroid Build Coastguard Worker                .input_zero_point(zero_point)
2271*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
2272*4bdc9457SAndroid Build Coastguard Worker            }
2273*4bdc9457SAndroid Build Coastguard Worker          }
2274*4bdc9457SAndroid Build Coastguard Worker        }
2275*4bdc9457SAndroid Build Coastguard Worker      }
2276*4bdc9457SAndroid Build Coastguard Worker    }
2277*4bdc9457SAndroid Build Coastguard Worker
2278*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, few_output_pixels_with_output_scale) {
2279*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2280*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2281*4bdc9457SAndroid Build Coastguard Worker      for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2282*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2283*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2284*4bdc9457SAndroid Build Coastguard Worker            for (float scale = 0.01f; scale < 100.0f; scale *= 3.14159265f) {
2285*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
2286*4bdc9457SAndroid Build Coastguard Worker                .output_pixels(output_pixels)
2287*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
2288*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2289*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
2290*4bdc9457SAndroid Build Coastguard Worker                .output_scale(scale)
2291*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
2292*4bdc9457SAndroid Build Coastguard Worker            }
2293*4bdc9457SAndroid Build Coastguard Worker          }
2294*4bdc9457SAndroid Build Coastguard Worker        }
2295*4bdc9457SAndroid Build Coastguard Worker      }
2296*4bdc9457SAndroid Build Coastguard Worker    }
2297*4bdc9457SAndroid Build Coastguard Worker
2298*4bdc9457SAndroid Build Coastguard Worker    TEST(${TEST_NAME}, few_output_pixels_with_output_zero_point) {
2299*4bdc9457SAndroid Build Coastguard Worker      $if ISA_CHECK:
2300*4bdc9457SAndroid Build Coastguard Worker        ${ISA_CHECK};
2301*4bdc9457SAndroid Build Coastguard Worker      for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2302*4bdc9457SAndroid Build Coastguard Worker        for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2303*4bdc9457SAndroid Build Coastguard Worker          for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2304*4bdc9457SAndroid Build Coastguard Worker            for (int32_t zero_point = 0; zero_point <= 255; zero_point += 51) {
2305*4bdc9457SAndroid Build Coastguard Worker              AvgPoolMicrokernelTester()
2306*4bdc9457SAndroid Build Coastguard Worker                .output_pixels(output_pixels)
2307*4bdc9457SAndroid Build Coastguard Worker                .pooling_elements(pooling_elements)
2308*4bdc9457SAndroid Build Coastguard Worker                .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2309*4bdc9457SAndroid Build Coastguard Worker                .channels(channels)
2310*4bdc9457SAndroid Build Coastguard Worker                .output_zero_point(zero_point)
2311*4bdc9457SAndroid Build Coastguard Worker                .Test(${", ".join(TEST_ARGS)});
2312*4bdc9457SAndroid Build Coastguard Worker            }
2313*4bdc9457SAndroid Build Coastguard Worker          }
2314*4bdc9457SAndroid Build Coastguard Worker        }
2315*4bdc9457SAndroid Build Coastguard Worker      }
2316*4bdc9457SAndroid Build Coastguard Worker    }
2317*4bdc9457SAndroid Build Coastguard Worker
2318*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_qmin) {
2319*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2320*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2321*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2322*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2323*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2324*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
2325*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
2326*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
2327*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2328*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
2329*4bdc9457SAndroid Build Coastguard Worker            .qmin(128)
2330*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
2331*4bdc9457SAndroid Build Coastguard Worker        }
2332*4bdc9457SAndroid Build Coastguard Worker      }
2333*4bdc9457SAndroid Build Coastguard Worker    }
2334*4bdc9457SAndroid Build Coastguard Worker  }
2335*4bdc9457SAndroid Build Coastguard Worker
2336*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_qmax) {
2337*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2338*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2339*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2340*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2341*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2342*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
2343*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
2344*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
2345*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2346*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
2347*4bdc9457SAndroid Build Coastguard Worker            .qmax(128)
2348*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
2349*4bdc9457SAndroid Build Coastguard Worker        }
2350*4bdc9457SAndroid Build Coastguard Worker      }
2351*4bdc9457SAndroid Build Coastguard Worker    }
2352*4bdc9457SAndroid Build Coastguard Worker  }
2353*4bdc9457SAndroid Build Coastguard Worker
2354*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_output_stride) {
2355*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2356*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2357*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2358*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2359*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2360*4bdc9457SAndroid Build Coastguard Worker          AvgPoolMicrokernelTester()
2361*4bdc9457SAndroid Build Coastguard Worker            .output_pixels(output_pixels)
2362*4bdc9457SAndroid Build Coastguard Worker            .pooling_elements(pooling_elements)
2363*4bdc9457SAndroid Build Coastguard Worker            .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2364*4bdc9457SAndroid Build Coastguard Worker            .channels(channels)
2365*4bdc9457SAndroid Build Coastguard Worker            .output_stride(${next_prime(CHANNEL_TILE*5+1)})
2366*4bdc9457SAndroid Build Coastguard Worker            .Test(${", ".join(TEST_ARGS)});
2367*4bdc9457SAndroid Build Coastguard Worker        }
2368*4bdc9457SAndroid Build Coastguard Worker      }
2369*4bdc9457SAndroid Build Coastguard Worker    }
2370*4bdc9457SAndroid Build Coastguard Worker  }
2371*4bdc9457SAndroid Build Coastguard Worker
2372*4bdc9457SAndroid Build Coastguard Worker  TEST(${TEST_NAME}, few_output_pixels_with_step) {
2373*4bdc9457SAndroid Build Coastguard Worker    $if ISA_CHECK:
2374*4bdc9457SAndroid Build Coastguard Worker      ${ISA_CHECK};
2375*4bdc9457SAndroid Build Coastguard Worker    for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2376*4bdc9457SAndroid Build Coastguard Worker      for (size_t pooling_elements : std::vector<size_t>{{${PRIMARY_TILE+1}, ${PRIMARY_TILE+INCREMENTAL_TILE-1}, ${PRIMARY_TILE+INCREMENTAL_TILE+1}}}) {
2377*4bdc9457SAndroid Build Coastguard Worker        for (size_t channels = 1; channels <= ${CHANNEL_TILE*5}; channels += ${max(1, CHANNEL_TILE-1)}) {
2378*4bdc9457SAndroid Build Coastguard Worker          for (size_t step = 2; step <= pooling_elements; step++) {
2379*4bdc9457SAndroid Build Coastguard Worker            AvgPoolMicrokernelTester()
2380*4bdc9457SAndroid Build Coastguard Worker              .output_pixels(output_pixels)
2381*4bdc9457SAndroid Build Coastguard Worker              .pooling_elements(pooling_elements)
2382*4bdc9457SAndroid Build Coastguard Worker              .pooling_tile(${PRIMARY_TILE}, ${INCREMENTAL_TILE})
2383*4bdc9457SAndroid Build Coastguard Worker              .step(step)
2384*4bdc9457SAndroid Build Coastguard Worker              .channels(channels)
2385*4bdc9457SAndroid Build Coastguard Worker              .output_stride(${next_prime(CHANNEL_TILE*5+1)})
2386*4bdc9457SAndroid Build Coastguard Worker              .Test(${", ".join(TEST_ARGS)});
2387*4bdc9457SAndroid Build Coastguard Worker          }
2388*4bdc9457SAndroid Build Coastguard Worker        }
2389*4bdc9457SAndroid Build Coastguard Worker      }
2390*4bdc9457SAndroid Build Coastguard Worker    }
2391*4bdc9457SAndroid Build Coastguard Worker  }
2392*4bdc9457SAndroid Build Coastguard Worker"""
2393*4bdc9457SAndroid Build Coastguard Worker
2394*4bdc9457SAndroid Build Coastguard Worker
2395*4bdc9457SAndroid Build Coastguard Workerdef generate_test_cases(ukernel, init_fn, primary_tile, incremental_tile,
2396*4bdc9457SAndroid Build Coastguard Worker                        channel_tile, isa):
2397*4bdc9457SAndroid Build Coastguard Worker  """Generates all tests cases for a AVGPOOL micro-kernel.
2398*4bdc9457SAndroid Build Coastguard Worker
2399*4bdc9457SAndroid Build Coastguard Worker  Args:
2400*4bdc9457SAndroid Build Coastguard Worker    ukernel: C name of the micro-kernel function.
2401*4bdc9457SAndroid Build Coastguard Worker    init_fn: C name of the function to initialize microkernel parameters.
2402*4bdc9457SAndroid Build Coastguard Worker    primary_tile: Number of rows (pixels) processed per one iteration of the
2403*4bdc9457SAndroid Build Coastguard Worker                  primary outer loop of the micro-kernel.
2404*4bdc9457SAndroid Build Coastguard Worker    incremental_tile: Number of rows (pixels) processed per one iteration of
2405*4bdc9457SAndroid Build Coastguard Worker                      the incremental outer loop of the micro-kernel.
2406*4bdc9457SAndroid Build Coastguard Worker    channel_tile: Number of channels processed per one iteration of the inner
2407*4bdc9457SAndroid Build Coastguard Worker                  loops of the micro-kernel.
2408*4bdc9457SAndroid Build Coastguard Worker    isa: instruction set required to run the micro-kernel. Generated unit test
2409*4bdc9457SAndroid Build Coastguard Worker         will skip execution if the host processor doesn't support this ISA.
2410*4bdc9457SAndroid Build Coastguard Worker
2411*4bdc9457SAndroid Build Coastguard Worker  Returns:
2412*4bdc9457SAndroid Build Coastguard Worker    Code for the test case.
2413*4bdc9457SAndroid Build Coastguard Worker  """
2414*4bdc9457SAndroid Build Coastguard Worker  _, test_name = ukernel.split("_", 1)
2415*4bdc9457SAndroid Build Coastguard Worker  _, datatype, ukernel_type, _ = ukernel.split("_", 3)
2416*4bdc9457SAndroid Build Coastguard Worker  test_args = [ukernel, init_fn]
2417*4bdc9457SAndroid Build Coastguard Worker  return xngen.preprocess(AVGPOOL_TEST_TEMPLATE, {
2418*4bdc9457SAndroid Build Coastguard Worker      "TEST_NAME": test_name.upper().replace("UKERNEL_", ""),
2419*4bdc9457SAndroid Build Coastguard Worker      "TEST_ARGS": test_args,
2420*4bdc9457SAndroid Build Coastguard Worker      "DATATYPE": datatype,
2421*4bdc9457SAndroid Build Coastguard Worker      "PRIMARY_TILE": primary_tile,
2422*4bdc9457SAndroid Build Coastguard Worker      "INCREMENTAL_TILE": incremental_tile,
2423*4bdc9457SAndroid Build Coastguard Worker      "CHANNEL_TILE": channel_tile,
2424*4bdc9457SAndroid Build Coastguard Worker      "ISA_CHECK": xnncommon.generate_isa_check_macro(isa),
2425*4bdc9457SAndroid Build Coastguard Worker      "next_prime": next_prime,
2426*4bdc9457SAndroid Build Coastguard Worker    })
2427*4bdc9457SAndroid Build Coastguard Worker
2428*4bdc9457SAndroid Build Coastguard Worker
2429*4bdc9457SAndroid Build Coastguard Workerdef main(args):
2430*4bdc9457SAndroid Build Coastguard Worker  options = parser.parse_args(args)
2431*4bdc9457SAndroid Build Coastguard Worker
2432*4bdc9457SAndroid Build Coastguard Worker  with codecs.open(options.spec, "r", encoding="utf-8") as spec_file:
2433*4bdc9457SAndroid Build Coastguard Worker    spec_yaml = yaml.safe_load(spec_file)
2434*4bdc9457SAndroid Build Coastguard Worker    if not isinstance(spec_yaml, list):
2435*4bdc9457SAndroid Build Coastguard Worker      raise ValueError("expected a list of micro-kernels in the spec")
2436*4bdc9457SAndroid Build Coastguard Worker
2437*4bdc9457SAndroid Build Coastguard Worker    tests = """\
2438*4bdc9457SAndroid Build Coastguard Worker// Copyright (c) Facebook, Inc. and its affiliates.
2439*4bdc9457SAndroid Build Coastguard Worker// All rights reserved.
2440*4bdc9457SAndroid Build Coastguard Worker//
2441*4bdc9457SAndroid Build Coastguard Worker// Copyright 2020 Google LLC
2442*4bdc9457SAndroid Build Coastguard Worker//
2443*4bdc9457SAndroid Build Coastguard Worker// This source code is licensed under the BSD-style license found in the
2444*4bdc9457SAndroid Build Coastguard Worker// LICENSE file in the root directory of this source tree.
2445*4bdc9457SAndroid Build Coastguard Worker//
2446*4bdc9457SAndroid Build Coastguard Worker// Auto-generated file. Do not edit!
2447*4bdc9457SAndroid Build Coastguard Worker//   Specification: {specification}
2448*4bdc9457SAndroid Build Coastguard Worker//   Generator: {generator}
2449*4bdc9457SAndroid Build Coastguard Worker
2450*4bdc9457SAndroid Build Coastguard Worker
2451*4bdc9457SAndroid Build Coastguard Worker#include <gtest/gtest.h>
2452*4bdc9457SAndroid Build Coastguard Worker
2453*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/common.h>
2454*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/isa-checks.h>
2455*4bdc9457SAndroid Build Coastguard Worker
2456*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/avgpool.h>
2457*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/pavgpool.h>
2458*4bdc9457SAndroid Build Coastguard Worker#include "avgpool-microkernel-tester.h"
2459*4bdc9457SAndroid Build Coastguard Worker""".format(specification=options.spec, generator=sys.argv[0])
2460*4bdc9457SAndroid Build Coastguard Worker
2461*4bdc9457SAndroid Build Coastguard Worker    for ukernel_spec in spec_yaml:
2462*4bdc9457SAndroid Build Coastguard Worker      name = ukernel_spec["name"]
2463*4bdc9457SAndroid Build Coastguard Worker      init_fn = ukernel_spec.get("init")
2464*4bdc9457SAndroid Build Coastguard Worker      primary_tile, incremental_tile, channel_tile, arch, isa = \
2465*4bdc9457SAndroid Build Coastguard Worker        split_ukernel_name(name)
2466*4bdc9457SAndroid Build Coastguard Worker
2467*4bdc9457SAndroid Build Coastguard Worker      # specification can override architecture
2468*4bdc9457SAndroid Build Coastguard Worker      arch = ukernel_spec.get("arch", arch)
2469*4bdc9457SAndroid Build Coastguard Worker
2470*4bdc9457SAndroid Build Coastguard Worker      test_case = generate_test_cases(name, init_fn, primary_tile,
2471*4bdc9457SAndroid Build Coastguard Worker                                      incremental_tile, channel_tile, isa)
2472*4bdc9457SAndroid Build Coastguard Worker      tests += "\n\n" + xnncommon.postprocess_test_case(test_case, arch, isa)
2473*4bdc9457SAndroid Build Coastguard Worker
2474*4bdc9457SAndroid Build Coastguard Worker    txt_changed = True
2475*4bdc9457SAndroid Build Coastguard Worker    if os.path.exists(options.output):
2476*4bdc9457SAndroid Build Coastguard Worker      with codecs.open(options.output, "r", encoding="utf-8") as output_file:
2477*4bdc9457SAndroid Build Coastguard Worker        txt_changed = output_file.read() != tests
2478*4bdc9457SAndroid Build Coastguard Worker
2479*4bdc9457SAndroid Build Coastguard Worker    if txt_changed:
2480*4bdc9457SAndroid Build Coastguard Worker      with codecs.open(options.output, "w", encoding="utf-8") as output_file:
2481*4bdc9457SAndroid Build Coastguard Worker        output_file.write(tests)
2482*4bdc9457SAndroid Build Coastguard Worker
2483*4bdc9457SAndroid Build Coastguard Worker
2484*4bdc9457SAndroid Build Coastguard Workerif __name__ == "__main__":
2485*4bdc9457SAndroid Build Coastguard Worker  main(sys.argv[1:])
2486