COMPMID-424 Add validation tests for Gaussian5x5

* Fix apply_2d_spatial_filter to use double as intermediate type
* Fix tensor_elem_at to use random value if on border and border_mode is
UNDEFINED

Change-Id: I7feea23c4664cc63c5bab936566dc92b98c723b9
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/78905
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Reviewed-by: Moritz Pflanzer <moritz.pflanzer@arm.com>
diff --git a/tests/validation/ReferenceCPP.cpp b/tests/validation/ReferenceCPP.cpp
index 06606c7..6264695 100644
--- a/tests/validation/ReferenceCPP.cpp
+++ b/tests/validation/ReferenceCPP.cpp
@@ -204,6 +204,15 @@
     tensor_operations::gaussian3x3(s, d, border_mode, constant_border_value);
 }
 
+// Gaussian5x5 filter
+void ReferenceCPP::gaussian5x5(const RawTensor &src, RawTensor &dst, BorderMode border_mode, uint8_t constant_border_value)
+{
+    ARM_COMPUTE_ERROR_ON(src.data_type() != DataType::U8 || dst.data_type() != DataType::U8);
+    const Tensor<uint8_t> s(src.shape(), src.data_type(), src.fixed_point_position(), reinterpret_cast<const uint8_t *>(src.data()));
+    Tensor<uint8_t>       d(dst.shape(), dst.data_type(), dst.fixed_point_position(), reinterpret_cast<uint8_t *>(dst.data()));
+    tensor_operations::gaussian5x5(s, d, border_mode, constant_border_value);
+}
+
 // GEMM
 void ReferenceCPP::gemm(const RawTensor &src1, const RawTensor &src2, const RawTensor &src3,
                         RawTensor &dst, float alpha, float beta)