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