1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #include "ElementwiseUnaryTestHelper.hpp" 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include <armnn_delegate.hpp> 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker #include <flatbuffers/flatbuffers.h> 11*89c4ff92SAndroid Build Coastguard Worker #include <tensorflow/lite/interpreter.h> 12*89c4ff92SAndroid Build Coastguard Worker #include <tensorflow/lite/kernels/register.h> 13*89c4ff92SAndroid Build Coastguard Worker #include <tensorflow/lite/model.h> 14*89c4ff92SAndroid Build Coastguard Worker #include <schema_generated.h> 15*89c4ff92SAndroid Build Coastguard Worker #include <tensorflow/lite/version.h> 16*89c4ff92SAndroid Build Coastguard Worker 17*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h> 18*89c4ff92SAndroid Build Coastguard Worker 19*89c4ff92SAndroid Build Coastguard Worker namespace armnnDelegate 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("ElementwiseUnary_GpuAccTests") 23*89c4ff92SAndroid Build Coastguard Worker { 24*89c4ff92SAndroid Build Coastguard Worker 25*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Abs_Float32_GpuAcc_Test") 26*89c4ff92SAndroid Build Coastguard Worker { 27*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 28*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc }; 29*89c4ff92SAndroid Build Coastguard Worker // Set input data 30*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 31*89c4ff92SAndroid Build Coastguard Worker { 32*89c4ff92SAndroid Build Coastguard Worker -0.1f, -0.2f, -0.3f, 33*89c4ff92SAndroid Build Coastguard Worker 0.1f, 0.2f, 0.3f 34*89c4ff92SAndroid Build Coastguard Worker }; 35*89c4ff92SAndroid Build Coastguard Worker // Calculate output data 36*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues(inputValues.size()); 37*89c4ff92SAndroid Build Coastguard Worker for (unsigned int i = 0; i < inputValues.size(); ++i) 38*89c4ff92SAndroid Build Coastguard Worker { 39*89c4ff92SAndroid Build Coastguard Worker expectedOutputValues[i] = std::abs(inputValues[i]); 40*89c4ff92SAndroid Build Coastguard Worker } 41*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues); 42*89c4ff92SAndroid Build Coastguard Worker } 43*89c4ff92SAndroid Build Coastguard Worker 44*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Exp_Float32_GpuAcc_Test") 45*89c4ff92SAndroid Build Coastguard Worker { 46*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 47*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc }; 48*89c4ff92SAndroid Build Coastguard Worker // Set input data 49*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 50*89c4ff92SAndroid Build Coastguard Worker { 51*89c4ff92SAndroid Build Coastguard Worker 5.0f, 4.0f, 52*89c4ff92SAndroid Build Coastguard Worker 3.0f, 2.0f, 53*89c4ff92SAndroid Build Coastguard Worker 1.0f, 1.1f 54*89c4ff92SAndroid Build Coastguard Worker }; 55*89c4ff92SAndroid Build Coastguard Worker // Set output data 56*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 57*89c4ff92SAndroid Build Coastguard Worker { 58*89c4ff92SAndroid Build Coastguard Worker 148.413159102577f, 54.598150033144f, 59*89c4ff92SAndroid Build Coastguard Worker 20.085536923188f, 7.389056098931f, 60*89c4ff92SAndroid Build Coastguard Worker 2.718281828459f, 3.004166023946f 61*89c4ff92SAndroid Build Coastguard Worker }; 62*89c4ff92SAndroid Build Coastguard Worker 63*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues); 64*89c4ff92SAndroid Build Coastguard Worker } 65*89c4ff92SAndroid Build Coastguard Worker 66*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Log_Float32_GpuAcc_Test") 67*89c4ff92SAndroid Build Coastguard Worker { 68*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 69*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc }; 70*89c4ff92SAndroid Build Coastguard Worker // Set input data 71*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 72*89c4ff92SAndroid Build Coastguard Worker { 73*89c4ff92SAndroid Build Coastguard Worker 1.0f, 1.0f, 2.0f, 74*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 2.71828f 75*89c4ff92SAndroid Build Coastguard Worker }; 76*89c4ff92SAndroid Build Coastguard Worker // Set output data 77*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 78*89c4ff92SAndroid Build Coastguard Worker { 79*89c4ff92SAndroid Build Coastguard Worker 0.f, 0.f, 0.69314718056f, 80*89c4ff92SAndroid Build Coastguard Worker 1.09861228867f, 1.38629436112f, 0.99999932734f 81*89c4ff92SAndroid Build Coastguard Worker }; 82*89c4ff92SAndroid Build Coastguard Worker 83*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_LOG, backends, inputValues, expectedOutputValues); 84*89c4ff92SAndroid Build Coastguard Worker } 85*89c4ff92SAndroid Build Coastguard Worker 86*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Neg_Float32_GpuAcc_Test") 87*89c4ff92SAndroid Build Coastguard Worker { 88*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 89*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc }; 90*89c4ff92SAndroid Build Coastguard Worker // Set input data 91*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 92*89c4ff92SAndroid Build Coastguard Worker { 93*89c4ff92SAndroid Build Coastguard Worker 1.f, 0.f, 3.f, 94*89c4ff92SAndroid Build Coastguard Worker 25.f, 64.f, 100.f 95*89c4ff92SAndroid Build Coastguard Worker }; 96*89c4ff92SAndroid Build Coastguard Worker // Set output data 97*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 98*89c4ff92SAndroid Build Coastguard Worker { 99*89c4ff92SAndroid Build Coastguard Worker -1.f, 0.f, -3.f, 100*89c4ff92SAndroid Build Coastguard Worker -25.f, -64.f, -100.f 101*89c4ff92SAndroid Build Coastguard Worker }; 102*89c4ff92SAndroid Build Coastguard Worker 103*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues); 104*89c4ff92SAndroid Build Coastguard Worker } 105*89c4ff92SAndroid Build Coastguard Worker 106*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Rsqrt_Float32_GpuAcc_Test") 107*89c4ff92SAndroid Build Coastguard Worker { 108*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 109*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc }; 110*89c4ff92SAndroid Build Coastguard Worker // Set input data 111*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 112*89c4ff92SAndroid Build Coastguard Worker { 113*89c4ff92SAndroid Build Coastguard Worker 1.f, 4.f, 16.f, 114*89c4ff92SAndroid Build Coastguard Worker 25.f, 64.f, 100.f 115*89c4ff92SAndroid Build Coastguard Worker }; 116*89c4ff92SAndroid Build Coastguard Worker // Set output data 117*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 118*89c4ff92SAndroid Build Coastguard Worker { 119*89c4ff92SAndroid Build Coastguard Worker 1.f, 0.5f, 0.25f, 120*89c4ff92SAndroid Build Coastguard Worker 0.2f, 0.125f, 0.1f 121*89c4ff92SAndroid Build Coastguard Worker }; 122*89c4ff92SAndroid Build Coastguard Worker 123*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues); 124*89c4ff92SAndroid Build Coastguard Worker } 125*89c4ff92SAndroid Build Coastguard Worker 126*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Sin_Float32_GpuAcc_Test") 127*89c4ff92SAndroid Build Coastguard Worker { 128*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 129*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc }; 130*89c4ff92SAndroid Build Coastguard Worker // Set input data 131*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 132*89c4ff92SAndroid Build Coastguard Worker { 133*89c4ff92SAndroid Build Coastguard Worker 0.0f, 1.0f, 16.0f, 134*89c4ff92SAndroid Build Coastguard Worker 0.5f, 36.0f, -1.f 135*89c4ff92SAndroid Build Coastguard Worker }; 136*89c4ff92SAndroid Build Coastguard Worker // Set output data 137*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 138*89c4ff92SAndroid Build Coastguard Worker { 139*89c4ff92SAndroid Build Coastguard Worker 0.0f, 0.8414709848f, -0.28790331666f, 140*89c4ff92SAndroid Build Coastguard Worker 0.4794255386f, -0.99177885344f, -0.8414709848f 141*89c4ff92SAndroid Build Coastguard Worker }; 142*89c4ff92SAndroid Build Coastguard Worker 143*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SIN, backends, inputValues, expectedOutputValues); 144*89c4ff92SAndroid Build Coastguard Worker } 145*89c4ff92SAndroid Build Coastguard Worker } // TEST_SUITE("ElementwiseUnary_GpuAccTests") 146*89c4ff92SAndroid Build Coastguard Worker 147*89c4ff92SAndroid Build Coastguard Worker 148*89c4ff92SAndroid Build Coastguard Worker 149*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("ElementwiseUnary_CpuAccTests") 150*89c4ff92SAndroid Build Coastguard Worker { 151*89c4ff92SAndroid Build Coastguard Worker 152*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Abs_Float32_CpuAcc_Test") 153*89c4ff92SAndroid Build Coastguard Worker { 154*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 155*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc }; 156*89c4ff92SAndroid Build Coastguard Worker // Set input data 157*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 158*89c4ff92SAndroid Build Coastguard Worker { 159*89c4ff92SAndroid Build Coastguard Worker -0.1f, -0.2f, -0.3f, 160*89c4ff92SAndroid Build Coastguard Worker 0.1f, 0.2f, 0.3f 161*89c4ff92SAndroid Build Coastguard Worker }; 162*89c4ff92SAndroid Build Coastguard Worker // Calculate output data 163*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues(inputValues.size()); 164*89c4ff92SAndroid Build Coastguard Worker for (unsigned int i = 0; i < inputValues.size(); ++i) 165*89c4ff92SAndroid Build Coastguard Worker { 166*89c4ff92SAndroid Build Coastguard Worker expectedOutputValues[i] = std::abs(inputValues[i]); 167*89c4ff92SAndroid Build Coastguard Worker } 168*89c4ff92SAndroid Build Coastguard Worker 169*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues); 170*89c4ff92SAndroid Build Coastguard Worker } 171*89c4ff92SAndroid Build Coastguard Worker 172*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Exp_Float32_CpuAcc_Test") 173*89c4ff92SAndroid Build Coastguard Worker { 174*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 175*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc }; 176*89c4ff92SAndroid Build Coastguard Worker // Set input data 177*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 178*89c4ff92SAndroid Build Coastguard Worker { 179*89c4ff92SAndroid Build Coastguard Worker 5.0f, 4.0f, 180*89c4ff92SAndroid Build Coastguard Worker 3.0f, 2.0f, 181*89c4ff92SAndroid Build Coastguard Worker 1.0f, 1.1f 182*89c4ff92SAndroid Build Coastguard Worker }; 183*89c4ff92SAndroid Build Coastguard Worker // Set output data 184*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 185*89c4ff92SAndroid Build Coastguard Worker { 186*89c4ff92SAndroid Build Coastguard Worker 148.413159102577f, 54.598150033144f, 187*89c4ff92SAndroid Build Coastguard Worker 20.085536923188f, 7.389056098931f, 188*89c4ff92SAndroid Build Coastguard Worker 2.718281828459f, 3.004166023946f 189*89c4ff92SAndroid Build Coastguard Worker }; 190*89c4ff92SAndroid Build Coastguard Worker 191*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues); 192*89c4ff92SAndroid Build Coastguard Worker } 193*89c4ff92SAndroid Build Coastguard Worker 194*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Log_Float32_CpuAcc_Test") 195*89c4ff92SAndroid Build Coastguard Worker { 196*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 197*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc }; 198*89c4ff92SAndroid Build Coastguard Worker // Set input data 199*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 200*89c4ff92SAndroid Build Coastguard Worker { 201*89c4ff92SAndroid Build Coastguard Worker 1.0f, 1.0f, 2.0f, 202*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 2.71828f 203*89c4ff92SAndroid Build Coastguard Worker }; 204*89c4ff92SAndroid Build Coastguard Worker // Set output data 205*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 206*89c4ff92SAndroid Build Coastguard Worker { 207*89c4ff92SAndroid Build Coastguard Worker 0.f, 0.f, 0.69314718056f, 208*89c4ff92SAndroid Build Coastguard Worker 1.09861228867f, 1.38629436112f, 0.99999932734f 209*89c4ff92SAndroid Build Coastguard Worker }; 210*89c4ff92SAndroid Build Coastguard Worker 211*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_LOG, backends, inputValues, expectedOutputValues); 212*89c4ff92SAndroid Build Coastguard Worker } 213*89c4ff92SAndroid Build Coastguard Worker 214*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Neg_Float32_CpuAcc_Test") 215*89c4ff92SAndroid Build Coastguard Worker { 216*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 217*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc }; 218*89c4ff92SAndroid Build Coastguard Worker // Set input data 219*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 220*89c4ff92SAndroid Build Coastguard Worker { 221*89c4ff92SAndroid Build Coastguard Worker 1.f, 0.f, 3.f, 222*89c4ff92SAndroid Build Coastguard Worker 25.f, 64.f, 100.f 223*89c4ff92SAndroid Build Coastguard Worker }; 224*89c4ff92SAndroid Build Coastguard Worker // Set output data 225*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 226*89c4ff92SAndroid Build Coastguard Worker { 227*89c4ff92SAndroid Build Coastguard Worker -1.f, 0.f, -3.f, 228*89c4ff92SAndroid Build Coastguard Worker -25.f, -64.f, -100.f 229*89c4ff92SAndroid Build Coastguard Worker }; 230*89c4ff92SAndroid Build Coastguard Worker 231*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues); 232*89c4ff92SAndroid Build Coastguard Worker } 233*89c4ff92SAndroid Build Coastguard Worker 234*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Rsqrt_Float32_CpuAcc_Test") 235*89c4ff92SAndroid Build Coastguard Worker { 236*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 237*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc }; 238*89c4ff92SAndroid Build Coastguard Worker // Set input data 239*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 240*89c4ff92SAndroid Build Coastguard Worker { 241*89c4ff92SAndroid Build Coastguard Worker 1.f, 4.f, 16.f, 242*89c4ff92SAndroid Build Coastguard Worker 25.f, 64.f, 100.f 243*89c4ff92SAndroid Build Coastguard Worker }; 244*89c4ff92SAndroid Build Coastguard Worker // Set output data 245*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 246*89c4ff92SAndroid Build Coastguard Worker { 247*89c4ff92SAndroid Build Coastguard Worker 1.f, 0.5f, 0.25f, 248*89c4ff92SAndroid Build Coastguard Worker 0.2f, 0.125f, 0.1f 249*89c4ff92SAndroid Build Coastguard Worker }; 250*89c4ff92SAndroid Build Coastguard Worker 251*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues); 252*89c4ff92SAndroid Build Coastguard Worker } 253*89c4ff92SAndroid Build Coastguard Worker 254*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Sin_Float32_CpuAcc_Test") 255*89c4ff92SAndroid Build Coastguard Worker { 256*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 257*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc }; 258*89c4ff92SAndroid Build Coastguard Worker // Set input data 259*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 260*89c4ff92SAndroid Build Coastguard Worker { 261*89c4ff92SAndroid Build Coastguard Worker 0.0f, 1.0f, 16.0f, 262*89c4ff92SAndroid Build Coastguard Worker 0.5f, 36.0f, -1.f 263*89c4ff92SAndroid Build Coastguard Worker }; 264*89c4ff92SAndroid Build Coastguard Worker // Set output data 265*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 266*89c4ff92SAndroid Build Coastguard Worker { 267*89c4ff92SAndroid Build Coastguard Worker 0.0f, 0.8414709848f, -0.28790331666f, 268*89c4ff92SAndroid Build Coastguard Worker 0.4794255386f, -0.99177885344f, -0.8414709848f 269*89c4ff92SAndroid Build Coastguard Worker }; 270*89c4ff92SAndroid Build Coastguard Worker 271*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SIN, backends, inputValues, expectedOutputValues); 272*89c4ff92SAndroid Build Coastguard Worker } 273*89c4ff92SAndroid Build Coastguard Worker } // TEST_SUITE("ElementwiseUnary_CpuAccTests") 274*89c4ff92SAndroid Build Coastguard Worker 275*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("ElementwiseUnary_CpuRefTests") 276*89c4ff92SAndroid Build Coastguard Worker { 277*89c4ff92SAndroid Build Coastguard Worker 278*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Abs_Float32_CpuRef_Test") 279*89c4ff92SAndroid Build Coastguard Worker { 280*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 281*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef }; 282*89c4ff92SAndroid Build Coastguard Worker // Set input data 283*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 284*89c4ff92SAndroid Build Coastguard Worker { 285*89c4ff92SAndroid Build Coastguard Worker -0.1f, -0.2f, -0.3f, 286*89c4ff92SAndroid Build Coastguard Worker 0.1f, 0.2f, 0.3f 287*89c4ff92SAndroid Build Coastguard Worker }; 288*89c4ff92SAndroid Build Coastguard Worker // Calculate output data 289*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues(inputValues.size()); 290*89c4ff92SAndroid Build Coastguard Worker for (unsigned int i = 0; i < inputValues.size(); ++i) 291*89c4ff92SAndroid Build Coastguard Worker { 292*89c4ff92SAndroid Build Coastguard Worker expectedOutputValues[i] = std::abs(inputValues[i]); 293*89c4ff92SAndroid Build Coastguard Worker } 294*89c4ff92SAndroid Build Coastguard Worker 295*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues); 296*89c4ff92SAndroid Build Coastguard Worker } 297*89c4ff92SAndroid Build Coastguard Worker 298*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Ceil_Float32_CpuRef_Test") 299*89c4ff92SAndroid Build Coastguard Worker { 300*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 301*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef }; 302*89c4ff92SAndroid Build Coastguard Worker // Set input data 303*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 304*89c4ff92SAndroid Build Coastguard Worker { 305*89c4ff92SAndroid Build Coastguard Worker 0.0f, 1.1f, -16.1f, 306*89c4ff92SAndroid Build Coastguard Worker 0.5f, -0.5f, -1.3f 307*89c4ff92SAndroid Build Coastguard Worker }; 308*89c4ff92SAndroid Build Coastguard Worker // Set output data 309*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 310*89c4ff92SAndroid Build Coastguard Worker { 311*89c4ff92SAndroid Build Coastguard Worker 0.0f, 2.0f, -16.0f, 312*89c4ff92SAndroid Build Coastguard Worker 1.0f, 0.0f, -1.0f 313*89c4ff92SAndroid Build Coastguard Worker }; 314*89c4ff92SAndroid Build Coastguard Worker 315*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_CEIL, backends, inputValues, expectedOutputValues); 316*89c4ff92SAndroid Build Coastguard Worker } 317*89c4ff92SAndroid Build Coastguard Worker 318*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Exp_Float32_CpuRef_Test") 319*89c4ff92SAndroid Build Coastguard Worker { 320*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 321*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef }; 322*89c4ff92SAndroid Build Coastguard Worker // Set input data 323*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 324*89c4ff92SAndroid Build Coastguard Worker { 325*89c4ff92SAndroid Build Coastguard Worker 5.0f, 4.0f, 326*89c4ff92SAndroid Build Coastguard Worker 3.0f, 2.0f, 327*89c4ff92SAndroid Build Coastguard Worker 1.0f, 1.1f 328*89c4ff92SAndroid Build Coastguard Worker }; 329*89c4ff92SAndroid Build Coastguard Worker // Set output data 330*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 331*89c4ff92SAndroid Build Coastguard Worker { 332*89c4ff92SAndroid Build Coastguard Worker 148.413159102577f, 54.598150033144f, 333*89c4ff92SAndroid Build Coastguard Worker 20.085536923188f, 7.389056098931f, 334*89c4ff92SAndroid Build Coastguard Worker 2.718281828459f, 3.004166023946f 335*89c4ff92SAndroid Build Coastguard Worker }; 336*89c4ff92SAndroid Build Coastguard Worker 337*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues); 338*89c4ff92SAndroid Build Coastguard Worker } 339*89c4ff92SAndroid Build Coastguard Worker 340*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Log_Float32_CpuRef_Test") 341*89c4ff92SAndroid Build Coastguard Worker { 342*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 343*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef }; 344*89c4ff92SAndroid Build Coastguard Worker // Set input data 345*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 346*89c4ff92SAndroid Build Coastguard Worker { 347*89c4ff92SAndroid Build Coastguard Worker 1.0f, 1.0f, 2.0f, 348*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 2.71828f 349*89c4ff92SAndroid Build Coastguard Worker }; 350*89c4ff92SAndroid Build Coastguard Worker // Set output data 351*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 352*89c4ff92SAndroid Build Coastguard Worker { 353*89c4ff92SAndroid Build Coastguard Worker 0.f, 0.f, 0.69314718056f, 354*89c4ff92SAndroid Build Coastguard Worker 1.09861228867f, 1.38629436112f, 0.99999932734f 355*89c4ff92SAndroid Build Coastguard Worker }; 356*89c4ff92SAndroid Build Coastguard Worker 357*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_LOG, backends, inputValues, expectedOutputValues); 358*89c4ff92SAndroid Build Coastguard Worker } 359*89c4ff92SAndroid Build Coastguard Worker 360*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Neg_Float32_CpuRef_Test") 361*89c4ff92SAndroid Build Coastguard Worker { 362*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 363*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef }; 364*89c4ff92SAndroid Build Coastguard Worker // Set input data 365*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 366*89c4ff92SAndroid Build Coastguard Worker { 367*89c4ff92SAndroid Build Coastguard Worker 1.f, 0.f, 3.f, 368*89c4ff92SAndroid Build Coastguard Worker 25.f, 64.f, 100.f 369*89c4ff92SAndroid Build Coastguard Worker }; 370*89c4ff92SAndroid Build Coastguard Worker // Set output data 371*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 372*89c4ff92SAndroid Build Coastguard Worker { 373*89c4ff92SAndroid Build Coastguard Worker -1.f, 0.f, -3.f, 374*89c4ff92SAndroid Build Coastguard Worker -25.f, -64.f, -100.f 375*89c4ff92SAndroid Build Coastguard Worker }; 376*89c4ff92SAndroid Build Coastguard Worker 377*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues); 378*89c4ff92SAndroid Build Coastguard Worker } 379*89c4ff92SAndroid Build Coastguard Worker 380*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Rsqrt_Float32_CpuRef_Test") 381*89c4ff92SAndroid Build Coastguard Worker { 382*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 383*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef }; 384*89c4ff92SAndroid Build Coastguard Worker // Set input data 385*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 386*89c4ff92SAndroid Build Coastguard Worker { 387*89c4ff92SAndroid Build Coastguard Worker 1.f, 4.f, 16.f, 388*89c4ff92SAndroid Build Coastguard Worker 25.f, 64.f, 100.f 389*89c4ff92SAndroid Build Coastguard Worker }; 390*89c4ff92SAndroid Build Coastguard Worker // Set output data 391*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 392*89c4ff92SAndroid Build Coastguard Worker { 393*89c4ff92SAndroid Build Coastguard Worker 1.f, 0.5f, 0.25f, 394*89c4ff92SAndroid Build Coastguard Worker 0.2f, 0.125f, 0.1f 395*89c4ff92SAndroid Build Coastguard Worker }; 396*89c4ff92SAndroid Build Coastguard Worker 397*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues); 398*89c4ff92SAndroid Build Coastguard Worker } 399*89c4ff92SAndroid Build Coastguard Worker 400*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Sqrt_Float32_CpuRef_Test") 401*89c4ff92SAndroid Build Coastguard Worker { 402*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef }; 403*89c4ff92SAndroid Build Coastguard Worker // Set input data 404*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 405*89c4ff92SAndroid Build Coastguard Worker { 406*89c4ff92SAndroid Build Coastguard Worker 9.0f, 4.25f, 81.9f, 407*89c4ff92SAndroid Build Coastguard Worker 0.1f, 0.9f, 169.0f 408*89c4ff92SAndroid Build Coastguard Worker }; 409*89c4ff92SAndroid Build Coastguard Worker // Calculate output data 410*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues(inputValues.size()); 411*89c4ff92SAndroid Build Coastguard Worker for (unsigned int i = 0; i < inputValues.size(); ++i) 412*89c4ff92SAndroid Build Coastguard Worker { 413*89c4ff92SAndroid Build Coastguard Worker expectedOutputValues[i] = std::sqrt(inputValues[i]); 414*89c4ff92SAndroid Build Coastguard Worker } 415*89c4ff92SAndroid Build Coastguard Worker 416*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SQRT, backends, inputValues, expectedOutputValues); 417*89c4ff92SAndroid Build Coastguard Worker } 418*89c4ff92SAndroid Build Coastguard Worker 419*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Sin_Float32_CpuRef_Test") 420*89c4ff92SAndroid Build Coastguard Worker { 421*89c4ff92SAndroid Build Coastguard Worker // Create the ArmNN Delegate 422*89c4ff92SAndroid Build Coastguard Worker std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef }; 423*89c4ff92SAndroid Build Coastguard Worker // Set input data 424*89c4ff92SAndroid Build Coastguard Worker std::vector<float> inputValues 425*89c4ff92SAndroid Build Coastguard Worker { 426*89c4ff92SAndroid Build Coastguard Worker 0.0f, 1.0f, 16.0f, 427*89c4ff92SAndroid Build Coastguard Worker 0.5f, 36.0f, -1.f 428*89c4ff92SAndroid Build Coastguard Worker }; 429*89c4ff92SAndroid Build Coastguard Worker // Set output data 430*89c4ff92SAndroid Build Coastguard Worker std::vector<float> expectedOutputValues 431*89c4ff92SAndroid Build Coastguard Worker { 432*89c4ff92SAndroid Build Coastguard Worker 0.0f, 0.8414709848f, -0.28790331666f, 433*89c4ff92SAndroid Build Coastguard Worker 0.4794255386f, -0.99177885344f, -0.8414709848f 434*89c4ff92SAndroid Build Coastguard Worker }; 435*89c4ff92SAndroid Build Coastguard Worker 436*89c4ff92SAndroid Build Coastguard Worker ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SIN, backends, inputValues, expectedOutputValues); 437*89c4ff92SAndroid Build Coastguard Worker } 438*89c4ff92SAndroid Build Coastguard Worker } // TEST_SUITE("ElementwiseUnary_CpuRefTests") 439*89c4ff92SAndroid Build Coastguard Worker 440*89c4ff92SAndroid Build Coastguard Worker } // namespace armnnDelegate