diff options
author | Gunhan Gulsoy <gunan@google.com> | 2018-03-08 00:32:17 -0800 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2018-03-08 00:36:30 -0800 |
commit | e52f916b87557d6b6d28f27f570462debb5ee262 (patch) | |
tree | 79657f4d3f9c6978e008b7125ffaf07d6bb7f3ea /tensorflow/contrib/lite/interpreter_test.cc | |
parent | 6ff54600831b0af86855b492da938c0ba0e4d910 (diff) |
Automated g4 rollback of changelist 188263046
PiperOrigin-RevId: 188293315
Diffstat (limited to 'tensorflow/contrib/lite/interpreter_test.cc')
-rw-r--r-- | tensorflow/contrib/lite/interpreter_test.cc | 164 |
1 files changed, 33 insertions, 131 deletions
diff --git a/tensorflow/contrib/lite/interpreter_test.cc b/tensorflow/contrib/lite/interpreter_test.cc index 11578fcb69..2e6727b323 100644 --- a/tensorflow/contrib/lite/interpreter_test.cc +++ b/tensorflow/contrib/lite/interpreter_test.cc @@ -763,38 +763,24 @@ TfLiteRegistration AddOpRegistration() { } class TestDelegate : public ::testing::Test { - protected: - void SetUp() override { - interpreter_ = absl::make_unique<Interpreter>(); - interpreter_->AddTensors(5); - interpreter_->SetInputs({0, 1}); - interpreter_->SetOutputs({3, 4}); + public: + TestDelegate() { + interpreter_.AddTensors(5); + interpreter_.SetInputs({0, 1}); + interpreter_.SetOutputs({3, 4}); TfLiteQuantizationParams quant; - interpreter_->SetTensorParametersReadWrite(0, kTfLiteFloat32, "", {3}, - quant); - interpreter_->SetTensorParametersReadWrite(1, kTfLiteFloat32, "", {3}, - quant); - interpreter_->SetTensorParametersReadWrite(2, kTfLiteFloat32, "", {3}, - quant); - interpreter_->SetTensorParametersReadWrite(3, kTfLiteFloat32, "", {3}, - quant); + interpreter_.SetTensorParametersReadWrite(0, kTfLiteFloat32, "", {3}, + quant); + interpreter_.SetTensorParametersReadWrite(1, kTfLiteFloat32, "", {3}, + quant); + interpreter_.SetTensorParametersReadWrite(2, kTfLiteFloat32, "", {3}, + quant); + interpreter_.SetTensorParametersReadWrite(3, kTfLiteFloat32, "", {3}, + quant); TfLiteRegistration reg = AddOpRegistration(); - interpreter_->AddNodeWithParameters({0, 0}, {2}, nullptr, 0, nullptr, ®); - interpreter_->AddNodeWithParameters({1, 1}, {3}, nullptr, 0, nullptr, ®); - interpreter_->AddNodeWithParameters({2, 1}, {4}, nullptr, 0, nullptr, ®); - } - - void TearDown() override { - // Interpreter relies on delegate_ to free the resources properly. Thus - // the life cycle of delegate must be longer than interpreter. - interpreter_.reset(); - delegate_.reset(); - } - - TfLiteDelegateBufferHandle last_allocated_handle_ = kTfLiteNullBufferHandle; - - TfLiteDelegateBufferHandle AllocateBufferHandle() { - return ++last_allocated_handle_; + interpreter_.AddNodeWithParameters({0, 0}, {2}, nullptr, 0, nullptr, ®); + interpreter_.AddNodeWithParameters({1, 1}, {3}, nullptr, 0, nullptr, ®); + interpreter_.AddNodeWithParameters({2, 1}, {4}, nullptr, 0, nullptr, ®); } protected: @@ -805,8 +791,8 @@ class TestDelegate : public ::testing::Test { // value-copyable and compatible with TfLite. explicit SimpleDelegate(const std::vector<int>& nodes) : nodes_(nodes) { delegate_.Prepare = [](TfLiteContext* context, - TfLiteDelegate* delegate) -> TfLiteStatus { - auto* simple = reinterpret_cast<SimpleDelegate*>(delegate->data_); + void* data) -> TfLiteStatus { + auto* simple = reinterpret_cast<SimpleDelegate*>(data); TfLiteIntArray* nodes_to_separate = TfLiteIntArrayCreate(simple->nodes_.size()); // Mark nodes that we want in TfLiteIntArray* structure. @@ -837,28 +823,10 @@ class TestDelegate : public ::testing::Test { } context->ReplaceSubgraphsWithDelegateKernels( - context, FakeFusedRegistration(), nodes_to_separate, delegate); + context, FakeFusedRegistration(), nodes_to_separate); TfLiteIntArrayFree(nodes_to_separate); return kTfLiteOk; }; - delegate_.CopyToBufferHandle = - [](TfLiteDelegate* delegate, - TfLiteDelegateBufferHandle delegate_buffer_handle, void* data, - int size) -> TfLiteStatus { - // TODO(ycling): Implement tests to test buffer copying logic. - return kTfLiteOk; - }; - delegate_.CopyFromBufferHandle = - [](TfLiteDelegate* delegate, - TfLiteDelegateBufferHandle delegate_buffer_handle, void* data, - int size) -> TfLiteStatus { - // TODO(ycling): Implement tests to test buffer copying logic. - return kTfLiteOk; - }; - delegate_.FreeBufferHandle = [](TfLiteDelegate* delegate, - TfLiteDelegateBufferHandle* handle) { - *handle = kTfLiteNullBufferHandle; - }; // Store type-punned data SimpleDelegate structure. delegate_.data_ = reinterpret_cast<void*>(this); } @@ -875,102 +843,36 @@ class TestDelegate : public ::testing::Test { std::vector<int> nodes_; TfLiteDelegate delegate_; }; - std::unique_ptr<Interpreter> interpreter_; - std::unique_ptr<SimpleDelegate> delegate_; + Interpreter interpreter_; }; TEST_F(TestDelegate, BasicDelegate) { - interpreter_->Invoke(); - delegate_ = std::unique_ptr<SimpleDelegate>(new SimpleDelegate({0, 1, 2})); - interpreter_->ModifyGraphWithDelegate(delegate_->get_tf_lite_delegate()); + interpreter_.Invoke(); + SimpleDelegate simple({0, 1, 2}); + interpreter_.ModifyGraphWithDelegate(simple.get_tf_lite_delegate()); - ASSERT_EQ(interpreter_->execution_plan().size(), 1); - int node = interpreter_->execution_plan()[0]; - const auto* node_and_reg = interpreter_->node_and_registration(node); + ASSERT_EQ(interpreter_.execution_plan().size(), 1); + int node = interpreter_.execution_plan()[0]; + const auto* node_and_reg = interpreter_.node_and_registration(node); ASSERT_EQ(node_and_reg->second.custom_name, SimpleDelegate::FakeFusedRegistration().custom_name); } TEST_F(TestDelegate, ComplexDeligate) { - interpreter_->Invoke(); - delegate_ = std::unique_ptr<SimpleDelegate>(new SimpleDelegate({1, 2})); - interpreter_->ModifyGraphWithDelegate(delegate_->get_tf_lite_delegate()); + interpreter_.Invoke(); + SimpleDelegate simple({1, 2}); + interpreter_.ModifyGraphWithDelegate(simple.get_tf_lite_delegate()); - ASSERT_EQ(interpreter_->execution_plan().size(), 2); + ASSERT_EQ(interpreter_.execution_plan().size(), 2); // 0th should be a non-delegated original op - ASSERT_EQ(interpreter_->execution_plan()[0], 0); + ASSERT_EQ(interpreter_.execution_plan()[0], 0); // 1st should be a new macro op (3) which didn't exist) - ASSERT_EQ(interpreter_->execution_plan()[1], 3); - const auto* node_and_reg = interpreter_->node_and_registration(3); + ASSERT_EQ(interpreter_.execution_plan()[1], 3); + const auto* node_and_reg = interpreter_.node_and_registration(3); ASSERT_EQ(node_and_reg->second.custom_name, SimpleDelegate::FakeFusedRegistration().custom_name); } -TEST_F(TestDelegate, SetBufferHandleToInput) { - interpreter_->Invoke(); - delegate_ = std::unique_ptr<SimpleDelegate>(new SimpleDelegate({0, 1, 2})); - TfLiteDelegate* delegate = delegate_->get_tf_lite_delegate(); - interpreter_->ModifyGraphWithDelegate(delegate); - - constexpr int kOutputTensorIndex = 0; - TfLiteTensor* tensor = interpreter_->tensor(kOutputTensorIndex); - ASSERT_EQ(tensor->delegate, nullptr); - ASSERT_EQ(tensor->delegate_buffer_handle, kTfLiteNullBufferHandle); - - TfLiteDelegateBufferHandle handle = AllocateBufferHandle(); - TfLiteStatus status = interpreter_->SetDelegateBufferHandle( - kOutputTensorIndex, handle, delegate); - ASSERT_EQ(status, kTfLiteOk); - EXPECT_EQ(tensor->delegate, delegate); - EXPECT_EQ(tensor->delegate_buffer_handle, handle); -} - -TEST_F(TestDelegate, SetBufferHandleToOutput) { - interpreter_->Invoke(); - delegate_ = std::unique_ptr<SimpleDelegate>(new SimpleDelegate({0, 1, 2})); - TfLiteDelegate* delegate = delegate_->get_tf_lite_delegate(); - interpreter_->ModifyGraphWithDelegate(delegate); - - constexpr int kOutputTensorIndex = 3; - TfLiteTensor* tensor = interpreter_->tensor(kOutputTensorIndex); - // Before setting the buffer handle, the tensor's `delegate` is already set - // because it will be written by the delegate. - ASSERT_EQ(tensor->delegate, delegate); - ASSERT_EQ(tensor->delegate_buffer_handle, kTfLiteNullBufferHandle); - - TfLiteDelegateBufferHandle handle = AllocateBufferHandle(); - TfLiteStatus status = interpreter_->SetDelegateBufferHandle( - kOutputTensorIndex, handle, delegate); - ASSERT_EQ(status, kTfLiteOk); - EXPECT_EQ(tensor->delegate, delegate); - EXPECT_EQ(tensor->delegate_buffer_handle, handle); -} - -TEST_F(TestDelegate, SetInvalidHandleToTensor) { - interpreter_->Invoke(); - delegate_ = std::unique_ptr<SimpleDelegate>(new SimpleDelegate({0, 1, 2})); - TfLiteDelegate* delegate = delegate_->get_tf_lite_delegate(); - interpreter_->ModifyGraphWithDelegate(delegate); - - SimpleDelegate another_simple_delegate({0, 1, 2}); - - constexpr int kOutputTensorIndex = 3; - TfLiteTensor* tensor = interpreter_->tensor(kOutputTensorIndex); - // Before setting the buffer handle, the tensor's `delegate` is already set - // because it will be written by the delegate. - ASSERT_EQ(tensor->delegate, delegate); - ASSERT_EQ(tensor->delegate_buffer_handle, kTfLiteNullBufferHandle); - - TfLiteDelegateBufferHandle handle = AllocateBufferHandle(); - TfLiteStatus status = interpreter_->SetDelegateBufferHandle( - kOutputTensorIndex, handle, - another_simple_delegate.get_tf_lite_delegate()); - // Setting a buffer handle to a tensor with another delegate will fail. - ASSERT_EQ(status, kTfLiteError); - EXPECT_EQ(tensor->delegate, delegate); - EXPECT_EQ(tensor->delegate_buffer_handle, kTfLiteNullBufferHandle); -} - } // namespace } // namespace tflite |