aboutsummaryrefslogtreecommitdiff
path: root/tests/validation/TensorOperations.h
diff options
context:
space:
mode:
authorGiorgio Arena <giorgio.arena@arm.com>2017-06-13 15:49:37 +0100
committerAnthony Barbier <anthony.barbier@arm.com>2018-09-17 14:16:42 +0100
commit2ca209eaf3e1dee31bc2287be1f4e501697456db (patch)
tree907e59dff71eb6b082632f6940b985fb5df9b11b /tests/validation/TensorOperations.h
parentd03b00acd71847fa2db1c5308c87d3b57c781bf9 (diff)
downloadComputeLibrary-2ca209eaf3e1dee31bc2287be1f4e501697456db.tar.gz
COMPMID-424 NEON MinMaxLocation test.
Change-Id: I3dda0961061b52c680b5af0443ad93a00425dd4c Reviewed-on: http://mpd-gerrit.cambridge.arm.com/77433 Reviewed-by: Michele DiGiorgio <michele.digiorgio@arm.com> Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com> Reviewed-by: Steven Niu <steven.niu@arm.com>
Diffstat (limited to 'tests/validation/TensorOperations.h')
-rw-r--r--tests/validation/TensorOperations.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/validation/TensorOperations.h b/tests/validation/TensorOperations.h
index 882c9e07e1..9e201e2f04 100644
--- a/tests/validation/TensorOperations.h
+++ b/tests/validation/TensorOperations.h
@@ -311,6 +311,56 @@ void sobel_5x5(Tensor<T1> &in, Tensor<T2> &out_x, Tensor<T2> &out_y, BorderMode
}
}
+// Min max location
+template <typename T1>
+void min_max_location(const Tensor<T1> &in, int32_t &min, int32_t &max, Coordinates2DArray &min_loc, Coordinates2DArray &max_loc, uint32_t &min_count, uint32_t &max_count)
+{
+ // Set min and max to first pixel
+ min = in[0];
+ max = in[0];
+ min_count = 0;
+ max_count = 0;
+
+ const size_t width = in.shape().x();
+
+ // Look for min and max values
+ for(int i = 1; i < in.num_elements(); ++i)
+ {
+ if(static_cast<int32_t>(in[i]) < min)
+ {
+ min = in[i];
+ }
+ if(static_cast<int32_t>(in[i]) > max)
+ {
+ max = in[i];
+ }
+ }
+
+ for(int i = 0; i < in.num_elements(); ++i)
+ {
+ if(static_cast<int32_t>(in[i]) == min)
+ {
+ Coordinates2D min_coord;
+ min_coord.x = static_cast<int32_t>(i % width);
+ min_coord.y = static_cast<int32_t>(i / width);
+
+ min_loc.push_back(min_coord);
+
+ min_count++;
+ }
+ if(static_cast<int32_t>(in[i]) == max)
+ {
+ Coordinates2D max_coord;
+ max_coord.x = static_cast<int32_t>(i % width);
+ max_coord.y = static_cast<int32_t>(i / width);
+
+ max_loc.push_back(max_coord);
+
+ max_count++;
+ }
+ }
+}
+
// Mean Standard Deviation
template <typename T1>
void mean_and_standard_deviation(const Tensor<T1> &in, float &mean, float &std_dev)