IVGCVSW-6088 Add Sin and Log to ElementWiseUnary

* Ref workload
* Cl workload
* Neon workload
* Serializer
* Deserializer

* Remove boost include from TensorTest.cpp

Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com>
Change-Id: I498548169cc77609c55cf3105f1de5a7429772cf
diff --git a/src/backends/reference/test/RefLayerTests.cpp b/src/backends/reference/test/RefLayerTests.cpp
index 6bc6f8a..1cc6fa8 100644
--- a/src/backends/reference/test/RefLayerTests.cpp
+++ b/src/backends/reference/test/RefLayerTests.cpp
@@ -2235,6 +2235,35 @@
 ARMNN_AUTO_TEST_CASE_WITH_THF(Exp2dQuantisedSymm16, Exp2dTest<DataType::QSymmS16>)
 ARMNN_AUTO_TEST_CASE_WITH_THF(Exp3dQuantisedSymm16, Exp3dTest<DataType::QSymmS16>)
 
+// Log
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log2d, Log2dTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log3d, Log3dTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(LogZero, LogZeroTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(LogNegative, LogNegativeTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log2dFloat16, Log2dTest<DataType::Float16>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log3dFloat16, Log3dTest<DataType::Float16>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log2dQuantisedAsymmS8, Log2dTest<DataType::QAsymmS8>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log3dQuantisedAsymmS8, Log3dTest<DataType::QAsymmS8>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log2dQuantisedAsymm8, Log2dTest<DataType::QAsymmU8>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log3dQuantisedAsymm8, Log3dTest<DataType::QAsymmU8>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log2dQuantisedSymm16, Log2dTest<DataType::QSymmS16>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Log3dQuantisedSymm16, Log3dTest<DataType::QSymmS16>)
+
+// Sin
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin2d, Sin2dTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin3d, Sin3dTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(SinZero, SinZeroTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(SinNegative, SinNegativeTest<DataType::Float32>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin2dFloat16, Sin2dTest<DataType::Float16>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin3dFloat16, Sin3dTest<DataType::Float16>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin2dQuantisedAsymmS8, Sin2dTest<DataType::QAsymmS8>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin3dQuantisedAsymmS8, Sin3dTest<DataType::QAsymmS8>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin2dQuantisedAsymm8, Sin2dTest<DataType::QAsymmU8>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin3dQuantisedAsymm8, Sin3dTest<DataType::QAsymmU8>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin2dQuantisedSymm16, Sin2dTest<DataType::QSymmS16>)
+ARMNN_AUTO_TEST_CASE_WITH_THF(Sin3dQuantisedSymm16, Sin3dTest<DataType::QSymmS16>)
+
+//Logical
 ARMNN_AUTO_TEST_CASE_WITH_THF(LogicalNot, LogicalNotTest)
 ARMNN_AUTO_TEST_CASE_WITH_THF(LogicalNotInt, LogicalNotIntTest)
 ARMNN_AUTO_TEST_CASE_WITH_THF(LogicalAnd, LogicalAndTest)
diff --git a/src/backends/reference/workloads/CMakeLists.txt b/src/backends/reference/workloads/CMakeLists.txt
index dadedf9..09e02e6 100644
--- a/src/backends/reference/workloads/CMakeLists.txt
+++ b/src/backends/reference/workloads/CMakeLists.txt
@@ -39,6 +39,7 @@
     Gather.hpp
     InstanceNorm.cpp
     InstanceNorm.hpp
+    Log.hpp
     LogSoftmax.cpp
     LogSoftmax.hpp
     LstmUtils.hpp
@@ -165,6 +166,7 @@
     Resize.cpp
     Resize.hpp
     Rsqrt.hpp
+    Sin.hpp
     Slice.cpp
     Slice.hpp
     Softmax.cpp
diff --git a/src/backends/reference/workloads/ElementwiseFunction.cpp b/src/backends/reference/workloads/ElementwiseFunction.cpp
index d6f3f42..82bcf99 100644
--- a/src/backends/reference/workloads/ElementwiseFunction.cpp
+++ b/src/backends/reference/workloads/ElementwiseFunction.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright © 2017 Arm Ltd. All rights reserved.
+// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
@@ -10,7 +10,9 @@
 #include "Maximum.hpp"
 #include "Abs.hpp"
 #include "Exp.hpp"
+#include "Log.hpp"
 #include "Rsqrt.hpp"
+#include "Sin.hpp"
 #include "Sqrt.hpp"
 
 
@@ -84,8 +86,10 @@
 // Unary
 template struct armnn::ElementwiseUnaryFunction<armnn::abs<float>>;
 template struct armnn::ElementwiseUnaryFunction<armnn::exp<float>>;
+template struct armnn::ElementwiseUnaryFunction<armnn::log<float>>;
 template struct armnn::ElementwiseUnaryFunction<std::negate<float>>;
 template struct armnn::ElementwiseUnaryFunction<armnn::rsqrt<float>>;
+template struct armnn::ElementwiseUnaryFunction<armnn::sin<float>>;
 template struct armnn::ElementwiseUnaryFunction<armnn::sqrt<float>>;
 
 // Logical Unary
diff --git a/src/backends/reference/workloads/Log.hpp b/src/backends/reference/workloads/Log.hpp
new file mode 100644
index 0000000..98b6b82
--- /dev/null
+++ b/src/backends/reference/workloads/Log.hpp
@@ -0,0 +1,23 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <iostream>
+
+namespace armnn
+{
+    template<typename T>
+struct log : public std::unary_function<T, T>
+    {
+        T
+        operator () (const T&  inputData) const
+        {
+            // computes natural logarithm of inputData
+            return std::log(inputData);
+        }
+    };
+
+} //namespace armnn
diff --git a/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp b/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp
index b442f25..be15363 100644
--- a/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp
+++ b/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright © 2019 Arm Ltd. All rights reserved.
+// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
@@ -11,7 +11,9 @@
 #include "RefWorkloadUtils.hpp"
 #include "Abs.hpp"
 #include "Exp.hpp"
+#include "Log.hpp"
 #include "Rsqrt.hpp"
+#include "Sin.hpp"
 #include "Sqrt.hpp"
 
 #include <Profiling.hpp>
@@ -54,8 +56,10 @@
 
     using AbsFunction   = ElementwiseUnaryFunction<abs<InType>>;
     using ExpFunction   = ElementwiseUnaryFunction<exp<InType>>;
+    using LogFunction   = ElementwiseUnaryFunction<log<InType>>;
     using NegFunction   = ElementwiseUnaryFunction<std::negate<InType>>;
     using RsqrtFunction = ElementwiseUnaryFunction<rsqrt<InType>>;
+    using SinFunction   = ElementwiseUnaryFunction<sin<InType>>;
     using SqrtFunction  = ElementwiseUnaryFunction<sqrt<InType>>;
 
     switch (m_Data.m_Parameters.m_Operation)
@@ -70,6 +74,11 @@
             ExpFunction(inShape, outShape, *input, *output);
             break;
         }
+        case UnaryOperation::Log:
+        {
+            LogFunction(inShape, outShape, *input, *output);
+            break;
+        }
         case UnaryOperation::Neg:
         {
             NegFunction(inShape, outShape, *input, *output);
@@ -80,6 +89,11 @@
             RsqrtFunction(inShape, outShape, *input, *output);
             break;
         }
+        case UnaryOperation::Sin:
+        {
+            SinFunction(inShape, outShape, *input, *output);
+            break;
+        }
         case UnaryOperation::Sqrt:
         {
             SqrtFunction(inShape, outShape, *input, *output);
diff --git a/src/backends/reference/workloads/Sin.hpp b/src/backends/reference/workloads/Sin.hpp
new file mode 100644
index 0000000..b71c33b
--- /dev/null
+++ b/src/backends/reference/workloads/Sin.hpp
@@ -0,0 +1,22 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <iostream>
+
+namespace armnn
+{
+    template<typename T>
+struct sin : public std::unary_function<T, T>
+    {
+        T
+        operator () (const T&  inputData) const
+        {
+            return std::sin(inputData);
+        }
+    };
+
+} //namespace armnn