COMPMID-417: Fix Dimensions::collapse

Number of dimensions was reduced to zero if more dimensions than
available were requested to be collapsed. Correct result is to keep at
least one dimension.

Change-Id: I094c3f2f41411913a2ac417b42310416642fb5a8
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/79801
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
diff --git a/arm_compute/core/Dimensions.h b/arm_compute/core/Dimensions.h
index b080435..d213101 100644
--- a/arm_compute/core/Dimensions.h
+++ b/arm_compute/core/Dimensions.h
@@ -126,12 +126,17 @@
     {
         ARM_COMPUTE_ERROR_ON(first + n > _id.size());
 
+        if(n == 0)
+        {
+            return;
+        }
+
         // Collapse dimensions into the first
         _id[first] = std::accumulate(_id.cbegin() + first, _id.cbegin() + first + n, 1, std::multiplies<T>());
         // Shift the remaining dimensions down
         std::copy(_id.begin() + first + n, _id.end(), _id.begin() + first + 1);
         // Reduce the number of dimensions
-        _num_dimensions -= n - 1;
+        _num_dimensions -= std::min(n, _num_dimensions) - 1;
         // Fill the now empty dimensions with zero
         std::fill(_id.begin() + _num_dimensions, _id.end(), 0);
     }