You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

padding.cpp 6.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include "test/common/padding.h"
  2. #include "megdnn/dtype.h"
  3. #include "megdnn/oprs.h"
  4. #include "test/common/checker.h"
  5. #include "test/naive/fixture.h"
  6. namespace megdnn {
  7. namespace test {
  8. TEST_F(NAIVE, PADDING) {
  9. std::vector<padding::TestArg> args = padding::get_args();
  10. Checker<Padding> checker(handle());
  11. for (auto&& arg : args) {
  12. checker.set_param(arg.param)
  13. .set_dtype(0, dtype::Float32())
  14. .set_dtype(1, dtype::Float32())
  15. .execs({arg.src, arg.dst});
  16. }
  17. }
  18. TEST_F(NAIVE, PADDING_CONSTANT) {
  19. Checker<Padding> checker(handle(), false);
  20. param::Padding param;
  21. param.padding_val = 10;
  22. param.padding_mode = param::Padding::PaddingMode::CONSTANT;
  23. param.front_offset_dim0 = 2;
  24. param.front_offset_dim1 = 1;
  25. param.front_offset_dim2 = 0;
  26. param.front_offset_dim3 = 0;
  27. param.front_offset_dim4 = 0;
  28. param.front_offset_dim5 = 0;
  29. param.front_offset_dim6 = 0;
  30. param.back_offset_dim0 = 2;
  31. param.back_offset_dim1 = 3;
  32. param.back_offset_dim2 = 0;
  33. param.back_offset_dim3 = 0;
  34. param.back_offset_dim4 = 0;
  35. param.back_offset_dim5 = 0;
  36. param.back_offset_dim6 = 0;
  37. checker.set_param(param).exect(
  38. Testcase{TensorValue({1, 1}, dtype::Float32(), {1}), {}},
  39. Testcase{{}, TensorValue({5, 5}, dtype::Float32(), {10, 10, 10, 10, 10,
  40. 10, 10, 10, 10, 10,
  41. 10, 1, 10, 10, 10,
  42. 10, 10, 10, 10, 10,
  43. 10, 10, 10, 10, 10})});
  44. }
  45. TEST_F(NAIVE, PADDING_REFLECT) {
  46. Checker<Padding> checker(handle(), false);
  47. param::Padding param;
  48. param.padding_val = 10;
  49. param.padding_mode = param::Padding::PaddingMode::REFLECT;
  50. param.front_offset_dim0 = 2;
  51. param.front_offset_dim1 = 0;
  52. param.front_offset_dim2 = 0;
  53. param.front_offset_dim3 = 0;
  54. param.front_offset_dim4 = 0;
  55. param.front_offset_dim5 = 0;
  56. param.front_offset_dim6 = 0;
  57. param.back_offset_dim0 = 3;
  58. param.back_offset_dim1 = 0;
  59. param.back_offset_dim2 = 0;
  60. param.back_offset_dim3 = 0;
  61. param.back_offset_dim4 = 0;
  62. param.back_offset_dim5 = 0;
  63. param.back_offset_dim6 = 0;
  64. checker.set_param(param).exect(
  65. Testcase{TensorValue({5}, dtype::Float32(), {1, 2, 3, 4, 5}), {}},
  66. Testcase{
  67. {},
  68. TensorValue(
  69. {10}, dtype::Float32(), {3, 2, 1, 2, 3, 4, 5, 4, 3, 2})});
  70. }
  71. TEST_F(NAIVE, PADDING_REFLECT2) {
  72. Checker<Padding> checker(handle(), false);
  73. param::Padding param;
  74. param.padding_mode = param::Padding::PaddingMode::REFLECT;
  75. param.front_offset_dim0 = 2;
  76. param.front_offset_dim1 = 1;
  77. param.front_offset_dim2 = 0;
  78. param.front_offset_dim3 = 0;
  79. param.front_offset_dim4 = 0;
  80. param.front_offset_dim5 = 0;
  81. param.front_offset_dim6 = 0;
  82. param.back_offset_dim0 = 0;
  83. param.back_offset_dim1 = 2;
  84. param.back_offset_dim2 = 0;
  85. param.back_offset_dim3 = 0;
  86. param.back_offset_dim4 = 0;
  87. param.back_offset_dim5 = 0;
  88. param.back_offset_dim6 = 0;
  89. checker.set_param(param).exect(
  90. Testcase{
  91. TensorValue(
  92. {3, 3}, dtype::QuantizedS8(), {1, 2, 3, 4, 5, 6, 7, 8, 9}),
  93. {}},
  94. Testcase{{}, TensorValue({5, 6}, dtype::QuantizedS8(), {8, 7, 8, 9, 8, 7, 5,
  95. 4, 5, 6, 5, 4, 2, 1,
  96. 2, 3, 2, 1, 5, 4, 5,
  97. 6, 5, 4, 8, 7, 8, 9,
  98. 8, 7})});
  99. }
  100. TEST_F(NAIVE, PADDING_REPLICATE) {
  101. Checker<Padding> checker(handle(), false);
  102. param::Padding param;
  103. param.padding_val = 10;
  104. param.padding_mode = param::Padding::PaddingMode::REPLICATE;
  105. param.front_offset_dim0 = 1;
  106. param.front_offset_dim1 = 0;
  107. param.front_offset_dim2 = 0;
  108. param.front_offset_dim3 = 0;
  109. param.front_offset_dim4 = 0;
  110. param.front_offset_dim5 = 0;
  111. param.front_offset_dim6 = 0;
  112. param.back_offset_dim0 = 2;
  113. param.back_offset_dim1 = 0;
  114. param.back_offset_dim2 = 0;
  115. param.back_offset_dim3 = 0;
  116. param.back_offset_dim4 = 0;
  117. param.back_offset_dim5 = 0;
  118. param.back_offset_dim6 = 0;
  119. checker.set_param(param).exect(
  120. Testcase{
  121. TensorValue({9}, dtype::Float32(), {1, 2, 3, 4, 5, 6, 7, 8, 9}),
  122. {}},
  123. Testcase{
  124. {},
  125. TensorValue(
  126. {12}, dtype::Float32(),
  127. {1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9})});
  128. }
  129. TEST_F(NAIVE, PADDING_REPLICATE2) {
  130. Checker<Padding> checker(handle(), false);
  131. param::Padding param;
  132. param.padding_val = 10;
  133. param.padding_mode = param::Padding::PaddingMode::REPLICATE;
  134. param.front_offset_dim0 = 2;
  135. param.front_offset_dim1 = 1;
  136. param.front_offset_dim2 = 0;
  137. param.front_offset_dim3 = 0;
  138. param.front_offset_dim4 = 0;
  139. param.front_offset_dim5 = 0;
  140. param.front_offset_dim6 = 0;
  141. param.back_offset_dim0 = 0;
  142. param.back_offset_dim1 = 3;
  143. param.back_offset_dim2 = 0;
  144. param.back_offset_dim3 = 0;
  145. param.back_offset_dim4 = 0;
  146. param.back_offset_dim5 = 0;
  147. param.back_offset_dim6 = 0;
  148. checker.set_param(param).exect(
  149. Testcase{
  150. TensorValue({3, 3}, dtype::Float32(), {1, 2, 3, 4, 5, 6, 7, 8, 9}),
  151. {}},
  152. Testcase{{}, TensorValue({5, 7}, dtype::Float32(), {1, 1, 2, 3, 3, 3, 3,
  153. 1, 1, 2, 3, 3, 3, 3,
  154. 1, 1, 2, 3, 3, 3, 3,
  155. 4, 4, 5, 6, 6, 6, 6,
  156. 7, 7, 8, 9, 9, 9, 9})});
  157. }
  158. } // namespace test
  159. } // namespace megdnn