blob: bd5ed6059c5817013ffc8230277528f29aa2995f [file] [log] [blame]
Sadik Armagan3c24f432020-10-19 17:35:30 +01001//
Teresa Charlinad1b3d72023-03-14 12:10:28 +00002// Copyright © 2020, 2023 Arm Ltd and Contributors. All rights reserved.
Sadik Armagan3c24f432020-10-19 17:35:30 +01003// 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
Francis Murtaghc4fb0dd2023-03-16 17:01:56 +00009#include <classic/include/armnn_delegate.hpp>
Sadik Armagan62483be2020-10-23 17:14:43 +010010
Teresa Charlinad1b3d72023-03-14 12:10:28 +000011#include <tensorflow/lite/kernels/builtin_op_kernels.h>
Sadik Armagan3c24f432020-10-19 17:35:30 +010012#include <tensorflow/lite/interpreter.h>
Keith Davis892fafe2020-11-26 17:40:35 +000013#include <tensorflow/lite/kernels/register.h>
Sadik Armagan3c24f432020-10-19 17:35:30 +010014
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;
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000024 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
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000059TEST_CASE ("ArmnnDelegateOptimizerOptionsRegistered")
60{
61 using namespace tflite;
62 auto tfLiteInterpreter = std::make_unique<Interpreter>();
63
64 tfLiteInterpreter->AddTensors(3);
65 tfLiteInterpreter->SetInputs({0, 1});
66 tfLiteInterpreter->SetOutputs({2});
67
68 tfLiteInterpreter->SetTensorParametersReadWrite(0, kTfLiteFloat32, "input1", {1,2,2,1}, TfLiteQuantization());
69 tfLiteInterpreter->SetTensorParametersReadWrite(1, kTfLiteFloat32, "input2", {1,2,2,1}, TfLiteQuantization());
70 tfLiteInterpreter->SetTensorParametersReadWrite(2, kTfLiteFloat32, "output", {1,2,2,1}, TfLiteQuantization());
71
72 tflite::ops::builtin::BuiltinOpResolver opResolver;
73 const TfLiteRegistration* opRegister = opResolver.FindOp(BuiltinOperator_ADD, 1);
74 tfLiteInterpreter->AddNodeWithParameters({0, 1}, {2}, "", 0, nullptr, opRegister);
75
76 // Create the Armnn Delegate
77 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
78
79 armnn::OptimizerOptions optimizerOptions(true, true, false, true);
80
81 armnnDelegate::DelegateOptions delegateOptions(backends, optimizerOptions);
82 std::unique_ptr<TfLiteDelegate, decltype(&armnnDelegate::TfLiteArmnnDelegateDelete)>
83 theArmnnDelegate(armnnDelegate::TfLiteArmnnDelegateCreate(delegateOptions),
84 armnnDelegate::TfLiteArmnnDelegateDelete);
85
86 auto status = tfLiteInterpreter->ModifyGraphWithDelegate(std::move(theArmnnDelegate));
87 CHECK(status == kTfLiteOk);
88 CHECK(tfLiteInterpreter != nullptr);
89}
90
Francis Murtaghc4fb0dd2023-03-16 17:01:56 +000091TEST_CASE ("DelegateOptions_ClassicDelegateDefault")
92{
93 // Check default options can be created
94 auto options = TfLiteArmnnDelegateOptionsDefault();
95
96 // Check Classic delegate created
97 auto classicDelegate = armnnDelegate::TfLiteArmnnDelegateCreate(options);
98 CHECK(classicDelegate);
99
100 // Check Classic Delegate can be deleted
101 CHECK(classicDelegate->data_);
102 armnnDelegate::TfLiteArmnnDelegateDelete(classicDelegate);
103}
104
Sadik Armagan3c24f432020-10-19 17:35:30 +0100105}
106
Sadik Armagan62483be2020-10-23 17:14:43 +0100107} // namespace armnnDelegate