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