@@ -287,3 +287,74 @@ TEST_F(OpMaxPool2DWithIndicesOutTest, SanityTest3D) {
287
287
EXPECT_TENSOR_CLOSE (out, out_expected);
288
288
EXPECT_TENSOR_CLOSE (indices, indices_expected);
289
289
}
290
+
291
+ TEST_F (OpMaxPool2DWithIndicesOutTest, CeilMode) {
292
+ torch::executor::testing::TensorFactory<exec_aten::ScalarType::Float> tfFloat;
293
+ torch::executor::testing::TensorFactory<exec_aten::ScalarType::Long> tfLong;
294
+
295
+ exec_aten::Tensor self = tfFloat.make (
296
+ {2 , 7 , 7 }, {-7 , -9 , -6 , -8 , -9 , -9 , -6 , -10 , -7 , -6 , -10 , -7 , -10 ,
297
+ -7 , -8 , -10 , -6 , -8 , -8 , -10 , -9 , -8 , -6 , -8 , -9 , -8 ,
298
+ -8 , -8 , -6 , -9 , -9 , -8 , -8 , -8 , -8 , -7 , -7 , -6 , -7 ,
299
+ -8 , -6 , -8 , -9 , -7 , -6 , -10 , -6 , -9 , -6 ,
300
+
301
+ -7 , -8 , -10 , -10 , -8 , -8 , -10 , -10 , -6 , -10 , -10 , -7 , -8 ,
302
+ -6 , -10 , -8 , -8 , -8 , -9 , -6 , -9 , -7 , -10 , -7 , -6 , -9 ,
303
+ -8 , -9 , -7 , -8 , -7 , -10 , -6 , -6 , -6 , -7 , -10 , -8 , -9 ,
304
+ -6 , -9 , -9 , -8 , -8 , -8 , -9 , -9 , -10 , -8 });
305
+
306
+ ::std::vector<int64_t > kernel_size_vec = {2 , 2 };
307
+ exec_aten::ArrayRef<int64_t > kernel_size = exec_aten::ArrayRef<int64_t >(
308
+ kernel_size_vec.data (), kernel_size_vec.size ());
309
+ ::std::vector<int64_t > stride_vec = {2 , 2 };
310
+ exec_aten::ArrayRef<int64_t > stride =
311
+ exec_aten::ArrayRef<int64_t >(stride_vec.data (), stride_vec.size ());
312
+ ::std::vector<int64_t > padding_vec = {0 , 0 };
313
+ exec_aten::ArrayRef<int64_t > padding =
314
+ exec_aten::ArrayRef<int64_t >(padding_vec.data (), padding_vec.size ());
315
+ ::std::vector<int64_t > dilation_vec = {1 , 1 };
316
+ exec_aten::ArrayRef<int64_t > dilation =
317
+ exec_aten::ArrayRef<int64_t >(dilation_vec.data (), dilation_vec.size ());
318
+
319
+ bool ceil_mode = true ;
320
+ exec_aten::Tensor out = tfFloat.zeros ({2 , 4 , 4 });
321
+ exec_aten::Tensor indices = tfLong.zeros ({2 , 4 , 4 });
322
+ exec_aten::Tensor out_expected = tfFloat.make (
323
+ {2 , 4 , 4 },
324
+ {-7 , -6 , -7 , -6 , -6 , -6 , -8 , -8 , -6 , -6 , -6 , -8 , -7 , -6 , -6 , -6 ,
325
+
326
+ -6 , -10 , -7 , -6 , -7 , -6 , -6 , -9 , -7 , -7 , -6 , -6 , -8 , -8 , -9 , -8 });
327
+
328
+ op_max_pool2d_with_indices_out (
329
+ self, kernel_size, stride, padding, dilation, ceil_mode, out, indices);
330
+ EXPECT_TENSOR_CLOSE (out, out_expected);
331
+
332
+ ceil_mode = false ;
333
+ out = tfFloat.zeros ({2 , 3 , 3 });
334
+ indices = tfLong.zeros ({2 , 3 , 3 });
335
+ out_expected = tfFloat.make (
336
+ {2 , 3 , 3 },
337
+ {-7 ,
338
+ -6 ,
339
+ -7 ,
340
+ -6 ,
341
+ -6 ,
342
+ -8 ,
343
+ -6 ,
344
+ -6 ,
345
+ -6 ,
346
+
347
+ -6 ,
348
+ -10 ,
349
+ -7 ,
350
+ -7 ,
351
+ -6 ,
352
+ -6 ,
353
+ -7 ,
354
+ -7 ,
355
+ -6 });
356
+
357
+ op_max_pool2d_with_indices_out (
358
+ self, kernel_size, stride, padding, dilation, ceil_mode, out, indices);
359
+ EXPECT_TENSOR_CLOSE (out, out_expected);
360
+ }
0 commit comments