blob: 13d703913ae94e49009c98ff00b17a3dcd3da5e0 [file] [log] [blame]
Sadik Armagan0534e032020-10-27 17:30:18 +00001//
Teresa Charlinad1b3d72023-03-14 12:10:28 +00002// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
Sadik Armagan0534e032020-10-27 17:30:18 +00003// SPDX-License-Identifier: MIT
4//
5
6#include "ElementwiseUnaryTestHelper.hpp"
7
8#include <armnn_delegate.hpp>
9
10#include <flatbuffers/flatbuffers.h>
11#include <tensorflow/lite/interpreter.h>
12#include <tensorflow/lite/kernels/register.h>
13#include <tensorflow/lite/model.h>
Sadik Armagan0534e032020-10-27 17:30:18 +000014#include <tensorflow/lite/version.h>
15
16#include <doctest/doctest.h>
17
18namespace armnnDelegate
19{
20
Colm Donelaneff204a2023-11-28 15:46:09 +000021TEST_SUITE("ElementwiseUnary_Tests")
Sadik Armagan0534e032020-10-27 17:30:18 +000022{
23
Colm Donelaneff204a2023-11-28 15:46:09 +000024TEST_CASE ("Abs_Float32_Test")
Sadik Armagan0534e032020-10-27 17:30:18 +000025{
Jan Eilers187b3a72020-11-19 17:50:34 +000026 // Set input data
27 std::vector<float> inputValues
28 {
29 -0.1f, -0.2f, -0.3f,
30 0.1f, 0.2f, 0.3f
31 };
32 // Calculate output data
33 std::vector<float> expectedOutputValues(inputValues.size());
34 for (unsigned int i = 0; i < inputValues.size(); ++i)
35 {
36 expectedOutputValues[i] = std::abs(inputValues[i]);
37 }
38
Colm Donelaneff204a2023-11-28 15:46:09 +000039 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, inputValues, expectedOutputValues);
Jan Eilers187b3a72020-11-19 17:50:34 +000040}
41
Colm Donelaneff204a2023-11-28 15:46:09 +000042TEST_CASE ("Ceil_Float32_Test")
Jan Eilers187b3a72020-11-19 17:50:34 +000043{
Colm Donelaneff204a2023-11-28 15:46:09 +000044 // Only works on CpuRef
Teresa Charlin93f0ad02023-03-23 15:28:02 +000045 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
46 // Set input data
47 std::vector<float> inputValues
48 {
49 0.0f, 1.1f, -16.1f,
50 0.5f, -0.5f, -1.3f
51 };
52 // Set output data
53 std::vector<float> expectedOutputValues
54 {
55 0.0f, 2.0f, -16.0f,
56 1.0f, 0.0f, -1.0f
57 };
58
Colm Donelaneff204a2023-11-28 15:46:09 +000059 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_CEIL, inputValues, expectedOutputValues, backends);
Teresa Charlin93f0ad02023-03-23 15:28:02 +000060}
61
Colm Donelaneff204a2023-11-28 15:46:09 +000062TEST_CASE ("Exp_Float32_Test")
Jan Eilers187b3a72020-11-19 17:50:34 +000063{
Jan Eilers187b3a72020-11-19 17:50:34 +000064 // Set input data
65 std::vector<float> inputValues
66 {
67 5.0f, 4.0f,
68 3.0f, 2.0f,
69 1.0f, 1.1f
70 };
71 // Set output data
72 std::vector<float> expectedOutputValues
73 {
74 148.413159102577f, 54.598150033144f,
75 20.085536923188f, 7.389056098931f,
76 2.718281828459f, 3.004166023946f
77 };
78
Colm Donelaneff204a2023-11-28 15:46:09 +000079 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, inputValues, expectedOutputValues);
Jan Eilers187b3a72020-11-19 17:50:34 +000080}
81
Colm Donelaneff204a2023-11-28 15:46:09 +000082TEST_CASE ("Log_Float32_Test")
Teresa Charlinb1f5f702022-07-12 14:16:24 +010083{
Teresa Charlinb1f5f702022-07-12 14:16:24 +010084 // Set input data
85 std::vector<float> inputValues
86 {
87 1.0f, 1.0f, 2.0f,
88 3.0f, 4.0f, 2.71828f
89 };
90 // Set output data
91 std::vector<float> expectedOutputValues
92 {
93 0.f, 0.f, 0.69314718056f,
94 1.09861228867f, 1.38629436112f, 0.99999932734f
95 };
96
Colm Donelaneff204a2023-11-28 15:46:09 +000097 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_LOG, inputValues, expectedOutputValues);
Teresa Charlinb1f5f702022-07-12 14:16:24 +010098}
99
Colm Donelaneff204a2023-11-28 15:46:09 +0000100TEST_CASE ("Neg_Float32_Test")
Jan Eilers187b3a72020-11-19 17:50:34 +0000101{
Jan Eilers187b3a72020-11-19 17:50:34 +0000102 // Set input data
103 std::vector<float> inputValues
104 {
105 1.f, 0.f, 3.f,
106 25.f, 64.f, 100.f
107 };
108 // Set output data
109 std::vector<float> expectedOutputValues
110 {
111 -1.f, 0.f, -3.f,
112 -25.f, -64.f, -100.f
113 };
114
Colm Donelaneff204a2023-11-28 15:46:09 +0000115 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, inputValues, expectedOutputValues);
Jan Eilers187b3a72020-11-19 17:50:34 +0000116}
117
Colm Donelaneff204a2023-11-28 15:46:09 +0000118TEST_CASE ("Rsqrt_Float32_Test")
Jan Eilers187b3a72020-11-19 17:50:34 +0000119{
Jan Eilers187b3a72020-11-19 17:50:34 +0000120 // Set input data
121 std::vector<float> inputValues
122 {
123 1.f, 4.f, 16.f,
124 25.f, 64.f, 100.f
125 };
126 // Set output data
127 std::vector<float> expectedOutputValues
128 {
129 1.f, 0.5f, 0.25f,
130 0.2f, 0.125f, 0.1f
131 };
132
Colm Donelaneff204a2023-11-28 15:46:09 +0000133 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, inputValues, expectedOutputValues);
Jan Eilers187b3a72020-11-19 17:50:34 +0000134}
135
Colm Donelaneff204a2023-11-28 15:46:09 +0000136TEST_CASE ("Sqrt_Float32_Test")
Jan Eilers187b3a72020-11-19 17:50:34 +0000137{
Colm Donelaneff204a2023-11-28 15:46:09 +0000138 // Only works on CpuRef.
Jan Eilers187b3a72020-11-19 17:50:34 +0000139 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
140 // Set input data
141 std::vector<float> inputValues
142 {
143 9.0f, 4.25f, 81.9f,
144 0.1f, 0.9f, 169.0f
145 };
146 // Calculate output data
147 std::vector<float> expectedOutputValues(inputValues.size());
148 for (unsigned int i = 0; i < inputValues.size(); ++i)
149 {
150 expectedOutputValues[i] = std::sqrt(inputValues[i]);
151 }
152
Colm Donelaneff204a2023-11-28 15:46:09 +0000153 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SQRT, inputValues, expectedOutputValues, backends);
Jan Eilers187b3a72020-11-19 17:50:34 +0000154}
155
Colm Donelaneff204a2023-11-28 15:46:09 +0000156TEST_CASE ("Sin_Float32_Test")
Teresa Charlinb1f5f702022-07-12 14:16:24 +0100157{
Teresa Charlinb1f5f702022-07-12 14:16:24 +0100158 // Set input data
159 std::vector<float> inputValues
160 {
161 0.0f, 1.0f, 16.0f,
162 0.5f, 36.0f, -1.f
163 };
164 // Set output data
165 std::vector<float> expectedOutputValues
166 {
167 0.0f, 0.8414709848f, -0.28790331666f,
168 0.4794255386f, -0.99177885344f, -0.8414709848f
169 };
170
Colm Donelaneff204a2023-11-28 15:46:09 +0000171 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SIN, inputValues, expectedOutputValues);
Teresa Charlinb1f5f702022-07-12 14:16:24 +0100172}
Colm Donelaneff204a2023-11-28 15:46:09 +0000173} // TEST_SUITE("ElementwiseUnary_Tests")
Jan Eilers187b3a72020-11-19 17:50:34 +0000174
Sadik Armagan0534e032020-10-27 17:30:18 +0000175} // namespace armnnDelegate