blob: 050fe45ca02775235b84d79c8103df5cf42a1f9f [file] [log] [blame]
Sadik Armagan3c24f432020-10-19 17:35:30 +01001//
2// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Sadik Armagan3c24f432020-10-19 17:35:30 +01006#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
Sadik Armagan3c24f432020-10-19 17:35:30 +01007#include <doctest/doctest.h>
8
Sadik Armagan62483be2020-10-23 17:14:43 +01009#include <armnn_delegate.hpp>
Sadik Armagan67e95f22020-10-29 16:14:54 +000010#include "ElementwiseUnaryTestHelper.hpp"
Sadik Armagan62483be2020-10-23 17:14:43 +010011
Sadik Armagan3c24f432020-10-19 17:35:30 +010012#include "tensorflow/lite/kernels/builtin_op_kernels.h"
13#include <tensorflow/lite/interpreter.h>
14
Sadik Armagan62483be2020-10-23 17:14:43 +010015namespace armnnDelegate
Sadik Armagan3c24f432020-10-19 17:35:30 +010016{
17
Sadik Armagan3c24f432020-10-19 17:35:30 +010018TEST_SUITE("ArmnnDelegate")
19{
20
21TEST_CASE ("ArmnnDelegate Registered")
22{
Sadik Armagan67e95f22020-10-29 16:14:54 +000023 using namespace tflite;
24 auto tfLiteInterpreter = std::make_unique<Interpreter>();
Sadik Armagan3c24f432020-10-19 17:35:30 +010025
Sadik Armagan3c24f432020-10-19 17:35:30 +010026 tfLiteInterpreter->AddTensors(3);
Sadik Armagan67e95f22020-10-29 16:14:54 +000027 tfLiteInterpreter->SetInputs({0, 1});
Sadik Armagan3c24f432020-10-19 17:35:30 +010028 tfLiteInterpreter->SetOutputs({2});
29
Sadik Armagan67e95f22020-10-29 16:14:54 +000030 tfLiteInterpreter->SetTensorParametersReadWrite(0, kTfLiteFloat32, "input1", {1,2,2,1}, TfLiteQuantization());
31 tfLiteInterpreter->SetTensorParametersReadWrite(1, kTfLiteFloat32, "input2", {1,2,2,1}, TfLiteQuantization());
32 tfLiteInterpreter->SetTensorParametersReadWrite(2, kTfLiteFloat32, "output", {1,2,2,1}, TfLiteQuantization());
Sadik Armagan3c24f432020-10-19 17:35:30 +010033
Sadik Armagan67e95f22020-10-29 16:14:54 +000034 tflite::ops::builtin::BuiltinOpResolver opResolver;
35 const TfLiteRegistration* opRegister = opResolver.FindOp(BuiltinOperator_ADD, 1);
36 tfLiteInterpreter->AddNodeWithParameters({0, 1}, {2}, "", 0, nullptr, opRegister);
Sadik Armagan3c24f432020-10-19 17:35:30 +010037
Sadik Armagan4189cc52020-11-11 18:01:48 +000038 // Create the Armnn Delegate
Sadik Armagan67e95f22020-10-29 16:14:54 +000039 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
Sadik Armagan4189cc52020-11-11 18:01:48 +000040 std::vector<armnn::BackendOptions> backendOptions;
41 backendOptions.emplace_back(
42 armnn::BackendOptions{ "BackendName",
43 {
44 { "Option1", 42 },
45 { "Option2", true }
46 }}
47 );
48
49 armnnDelegate::DelegateOptions delegateOptions(backends, backendOptions);
Sadik Armagan67e95f22020-10-29 16:14:54 +000050 std::unique_ptr<TfLiteDelegate, decltype(&armnnDelegate::TfLiteArmnnDelegateDelete)>
51 theArmnnDelegate(armnnDelegate::TfLiteArmnnDelegateCreate(delegateOptions),
52 armnnDelegate::TfLiteArmnnDelegateDelete);
53
54 auto status = tfLiteInterpreter->ModifyGraphWithDelegate(std::move(theArmnnDelegate));
Sadik Armagan3c24f432020-10-19 17:35:30 +010055 CHECK(status == kTfLiteOk);
56 CHECK(tfLiteInterpreter != nullptr);
Sadik Armagan3c24f432020-10-19 17:35:30 +010057}
58
59}
60
Sadik Armagan62483be2020-10-23 17:14:43 +010061} // namespace armnnDelegate