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