// Copyright 2019 Google LLC // // This source code is licensed under the BSD-style license found in the // LICENSE file in the root directory of this source tree. #include #include "unpooling-operator-tester.h" TEST(UNPOOLING_NHWC_X32, unit_height_horizontal_pool) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { for (size_t pooling_size : std::vector{{2, 3, 5, 7}}) { UnpoolingOperatorTester() .batch_size(1) .input_height(1) .input_width(7) .pooling_height(1) .pooling_width(pooling_size) .channels(channels) .TestX32(); } } } TEST(UNPOOLING_NHWC_X32, unit_height_horizontal_pool_with_padding) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { for (size_t pooling_size : std::vector{{3, 5, 7}}) { for (size_t padding_left = 0; padding_left <= 1; padding_left++) { for (size_t padding_right = 0; padding_right <= 1; padding_right++) { UnpoolingOperatorTester() .batch_size(1) .input_height(1) .input_width(7) .padding_left(padding_left) .padding_right(padding_right) .pooling_height(1) .pooling_width(pooling_size) .channels(channels) .TestX32(); } } } } } TEST(UNPOOLING_NHWC_X32, unit_height_vertical_pool) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { for (size_t pooling_size : std::vector{{2, 3, 5, 7}}) { UnpoolingOperatorTester() .batch_size(1) .input_height(7) .input_width(1) .pooling_height(pooling_size) .pooling_width(1) .channels(channels) .TestX32(); } } } TEST(UNPOOLING_NHWC_X32, unit_height_vertical_pool_with_padding) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { for (size_t pooling_size : std::vector{{3, 5, 7}}) { for (size_t padding_top = 0; padding_top <= 1; padding_top++) { for (size_t padding_bottom = 0; padding_bottom <= 1; padding_bottom++) { UnpoolingOperatorTester() .batch_size(1) .input_height(7) .input_width(1) .padding_top(padding_top) .padding_bottom(padding_bottom) .pooling_height(pooling_size) .pooling_width(1) .channels(channels) .TestX32(); } } } } } TEST(UNPOOLING_NHWC_X32, unit_height_square_pool) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { for (size_t pooling_size : std::vector{{2, 3, 5}}) { UnpoolingOperatorTester() .batch_size(1) .input_height(2) .input_width(4) .pooling_height(pooling_size) .pooling_width(pooling_size) .channels(channels) .TestX32(); } } } TEST(UNPOOLING_NHWC_X32, unit_height_3x3_pool_with_padding) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { for (size_t padding_left = 0; padding_left <= 1; padding_left++) { for (size_t padding_top = 0; padding_top <= 1; padding_top++) { for (size_t padding_right = 0; padding_right <= 1; padding_right++) { for (size_t padding_bottom = 0; padding_bottom <= 1; padding_bottom++) { UnpoolingOperatorTester() .batch_size(1) .input_height(2) .input_width(4) .padding_left(padding_left) .padding_top(padding_top) .padding_right(padding_right) .padding_bottom(padding_bottom) .pooling_height(3) .pooling_width(3) .channels(channels) .iterations(3) .TestX32(); } } } } } } TEST(UNPOOLING_NHWC_X32, small_height_square_pool) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { for (size_t pooling_size : std::vector{{2, 3, 5}}) { UnpoolingOperatorTester() .batch_size(1) .input_height(4) .input_width(7) .pooling_height(pooling_size) .pooling_width(pooling_size) .channels(channels) .TestX32(); } } } TEST(UNPOOLING_NHWC_X32, small_height_3x3_pool_with_input_stride) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { UnpoolingOperatorTester() .batch_size(1) .input_height(4) .input_width(7) .pooling_height(3) .pooling_width(3) .input_pixel_stride(channels * 2 + 1) .channels(channels) .TestX32(); } } TEST(UNPOOLING_NHWC_X32, small_height_3x3_pool_with_output_stride) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { UnpoolingOperatorTester() .batch_size(1) .input_height(4) .input_width(7) .pooling_height(3) .pooling_width(3) .output_pixel_stride(channels * 2 + 3) .channels(channels) .TestX32(); } } TEST(UNPOOLING_NHWC_X32, small_height_3x3_pool_with_padding) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 50; channels += 15) { for (size_t padding_left = 0; padding_left <= 1; padding_left++) { for (size_t padding_top = 0; padding_top <= 1; padding_top++) { for (size_t padding_right = 0; padding_right <= 1; padding_right++) { for (size_t padding_bottom = 0; padding_bottom <= 1; padding_bottom++) { UnpoolingOperatorTester() .batch_size(1) .input_height(4) .input_width(7) .pooling_height(3) .pooling_width(3) .channels(channels) .iterations(1) .TestX32(); } } } } } } TEST(UNPOOLING_NHWC_X32, small_height_and_batch_square_pool) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); for (size_t channels = 1; channels <= 100; channels += 15) { for (size_t pooling_size : std::vector{{2, 3}}) { UnpoolingOperatorTester() .batch_size(3) .input_height(4) .input_width(7) .pooling_height(pooling_size) .pooling_width(pooling_size) .channels(channels) .TestX32(); } } } TEST(UNPOOLING_NHWC_X32, setup_increasing_batch) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); UnpoolingOperatorTester() .batch_size(3) .next_batch_size(5) .input_height(4) .input_width(4) .pooling_height(5) .pooling_width(3) .channels(24) .TestSetupX32(); } TEST(UNPOOLING_NHWC_X32, setup_decreasing_batch) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); UnpoolingOperatorTester() .batch_size(5) .next_batch_size(3) .input_height(4) .input_width(4) .pooling_height(5) .pooling_width(3) .channels(24) .TestSetupX32(); } TEST(UNPOOLING_NHWC_X32, setup_changing_height) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); UnpoolingOperatorTester() .batch_size(3) .input_height(4) .input_width(4) .next_input_height(9) .pooling_height(5) .pooling_width(3) .channels(24) .TestSetupX32(); UnpoolingOperatorTester() .batch_size(3) .input_height(4) .input_width(4) .next_input_height(7) .pooling_height(5) .pooling_width(3) .channels(24) .TestSetupX32(); } TEST(UNPOOLING_NHWC_X32, setup_changing_width) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); UnpoolingOperatorTester() .batch_size(3) .input_height(4) .input_width(4) .next_input_width(9) .pooling_height(5) .pooling_width(3) .channels(24) .TestSetupX32(); UnpoolingOperatorTester() .batch_size(3) .input_height(4) .input_width(4) .next_input_width(7) .pooling_height(5) .pooling_width(3) .channels(24) .TestSetupX32(); } TEST(UNPOOLING_NHWC_X32, setup_swap_height_and_width) { ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */)); UnpoolingOperatorTester() .batch_size(3) .input_height(5) .input_width(4) .next_input_height(4) .next_input_width(5) .pooling_height(5) .pooling_width(3) .channels(24) .TestSetupX32(); }