aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/kernels/resize_bilinear_op_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/core/kernels/resize_bilinear_op_test.cc')
-rw-r--r--tensorflow/core/kernels/resize_bilinear_op_test.cc171
1 files changed, 171 insertions, 0 deletions
diff --git a/tensorflow/core/kernels/resize_bilinear_op_test.cc b/tensorflow/core/kernels/resize_bilinear_op_test.cc
new file mode 100644
index 0000000000..0ebe2e5f8c
--- /dev/null
+++ b/tensorflow/core/kernels/resize_bilinear_op_test.cc
@@ -0,0 +1,171 @@
+#include "tensorflow/core/framework/allocator.h"
+#include "tensorflow/core/framework/fake_input.h"
+#include "tensorflow/core/framework/graph.pb.h"
+#include "tensorflow/core/framework/node_def_builder.h"
+#include "tensorflow/core/framework/op_kernel.h"
+#include "tensorflow/core/framework/tensor_testutil.h"
+#include "tensorflow/core/framework/types.h"
+#include "tensorflow/core/framework/types.pb.h"
+#include "tensorflow/core/kernels/ops_util.h"
+#include "tensorflow/core/kernels/ops_testutil.h"
+#include "tensorflow/core/public/tensor.h"
+#include <gtest/gtest.h>
+#include "tensorflow/core/lib/core/status_test_util.h"
+
+namespace tensorflow {
+
+class ResizeBilinearOpTest : public OpsTestBase {
+ protected:
+ ResizeBilinearOpTest() {
+ RequireDefaultOps();
+ EXPECT_OK(NodeDefBuilder("resize_bilinear_op", "ResizeBilinear")
+ .Input(FakeInput(DT_FLOAT))
+ .Input(FakeInput(DT_INT32))
+ .Finalize(node_def()));
+ EXPECT_OK(InitOp());
+ }
+};
+
+TEST_F(ResizeBilinearOpTest, TestBilinear2x2To1x1) {
+ // Input:
+ // 1, 2
+ // 3, 4
+ AddInputFromArray<float>(TensorShape({1, 2, 2, 1}), {1, 2, 3, 4});
+ AddInputFromArray<int32>(TensorShape({2}), {1, 1});
+ ASSERT_OK(RunOpKernel());
+
+ // When scaling down, we have to arbitrarily pick a pixel from the
+ // original input. In this case, we choose the top/left most pixel.
+ Tensor expected(allocator(), DT_FLOAT, TensorShape({1, 1, 1, 1}));
+ test::FillValues<float>(&expected, {1.0});
+ test::ExpectTensorEqual<float>(expected, *GetOutput(0));
+}
+
+TEST_F(ResizeBilinearOpTest, TestBilinear2x2To3x3) {
+ // Input:
+ // 1, 2
+ // 3, 4
+ AddInputFromArray<float>(TensorShape({1, 2, 2, 1}), {1, 2, 3, 4});
+ AddInputFromArray<int32>(TensorShape({2}), {3, 3});
+ ASSERT_OK(RunOpKernel());
+
+ Tensor expected(allocator(), DT_FLOAT, TensorShape({1, 3, 3, 1}));
+
+ // The corners should match the original corners, and we bilinear
+ // interpolate the values in between.
+
+ // clang-format off
+ test::FillValues<float>(&expected,
+ {1, 5.0/3, 2,
+ 7.0/3, 3, 10.0/3,
+ 3, 11.0/3, 4});
+
+ // clang-format on
+ test::ExpectTensorEqual<float>(expected, *GetOutput(0));
+}
+
+TEST_F(ResizeBilinearOpTest, TestBilinear3x3To4x4) {
+ // Input:
+ // 1, 2, 3,
+ // 4, 5, 6,
+ // 7, 8, 9
+ AddInputFromArray<float>(TensorShape({1, 3, 3, 1}),
+ {1, 2, 3, 4, 5, 6, 7, 8, 9});
+ AddInputFromArray<int32>(TensorShape({2}), {4, 4});
+ ASSERT_OK(RunOpKernel());
+
+ // The corners should match the original corners, and we bilinear
+ // interpolate the values in between.
+ Tensor expected(allocator(), DT_FLOAT, TensorShape({1, 4, 4, 1}));
+ // clang-format off
+ test::FillValues<float>(&expected,
+ {1, 1.75, 2.5, 3,
+ 3.25, 4, 4.75, 5.25,
+ 5.5, 6.25, 7, 7.5,
+ 7, 7.75, 8.5, 9});
+
+ // clang-format on
+ test::ExpectTensorEqual<float>(expected, *GetOutput(0));
+}
+
+TEST_F(ResizeBilinearOpTest, TestBilinear2x2To3x3Batch2) {
+ // Input:
+ // 1, 2
+ // 3, 4
+ //
+ // repeated twice
+ AddInputFromArray<float>(TensorShape({2, 2, 2, 1}), {1, 2, 3, 4, 1, 2, 3, 4});
+ AddInputFromArray<int32>(TensorShape({2}), {3, 3});
+ ASSERT_OK(RunOpKernel());
+
+ Tensor expected(allocator(), DT_FLOAT, TensorShape({2, 3, 3, 1}));
+ // clang-format off
+ test::FillValues<float>(&expected,
+ {1, 5.0/3, 2, 7.0/3, 3, 10.0/3, 3, 11.0/3, 4,
+ 1, 5.0/3, 2, 7.0/3, 3, 10.0/3, 3, 11.0/3, 4
+ });
+ // clang-format on
+ test::ExpectTensorEqual<float>(expected, *GetOutput(0));
+}
+
+TEST_F(ResizeBilinearOpTest, TestBilinear2x2x2To3x3x2) {
+ AddInputFromArray<float>(TensorShape({1, 2, 2, 2}),
+ {1, -1, 2, -2, 3, -3, 4, -4});
+ AddInputFromArray<int32>(TensorShape({2}), {3, 3});
+ ASSERT_OK(RunOpKernel());
+
+ Tensor expected(allocator(), DT_FLOAT, TensorShape({1, 3, 3, 2}));
+ // clang-format off
+ test::FillValues<float>(&expected,
+ {
+ 1, -1,
+ 5.0/3, -5.0/3,
+ 2, -2,
+ 7.0/3, -7.0/3,
+ 3, -3,
+ 10.0/3, -10.0/3,
+ 3, -3,
+ 11.0/3, -11.0/3,
+ 4, -4
+ });
+ // clang-format on
+ test::ExpectTensorEqual<float>(expected, *GetOutput(0));
+}
+
+TEST_F(ResizeBilinearOpTest, TestBilinear2x2To4x4) {
+ // Input:
+ // 1, 2
+ // 3, 4
+ AddInputFromArray<float>(TensorShape({1, 2, 2, 1}), {1, 2, 3, 4});
+ AddInputFromArray<int32>(TensorShape({2}), {4, 4});
+ ASSERT_OK(RunOpKernel());
+
+ Tensor expected(allocator(), DT_FLOAT, TensorShape({1, 4, 4, 1}));
+ // clang-format off
+ test::FillValues<float>(&expected,
+ {1, 1.5, 2, 2,
+ 2, 2.5, 3, 3,
+ 3, 3.5, 4, 4,
+ 3, 3.5, 4, 4});
+ // clang-format on
+ test::ExpectTensorEqual<float>(expected, *GetOutput(0));
+}
+
+TEST_F(ResizeBilinearOpTest, TestInvalidInputShape) {
+ AddInputFromArray<float>(TensorShape({2, 2, 1}), {1, 2, 3, 4});
+ AddInputFromArray<int32>(TensorShape({2}), {4, 4});
+ ASSERT_FALSE(RunOpKernel().ok());
+}
+
+TEST_F(ResizeBilinearOpTest, TestInvalidSizeDim) {
+ AddInputFromArray<float>(TensorShape({1, 2, 2, 1}), {1, 2, 3, 4});
+ AddInputFromArray<int32>(TensorShape({2, 1}), {4, 4});
+ ASSERT_FALSE(RunOpKernel().ok());
+}
+TEST_F(ResizeBilinearOpTest, TestInvalidSizeElements) {
+ AddInputFromArray<float>(TensorShape({1, 2, 2, 1}), {1, 2, 3, 4});
+ AddInputFromArray<int32>(TensorShape({3}), {4, 4, 1});
+ ASSERT_FALSE(RunOpKernel().ok());
+}
+
+} // namespace tensorflow