COMPMID-765: Sanitize permutation vector for Permute.

If permutation vector is bigger than the tensorshape to permute then
infer dimensions of size one for the extra dimensions.

Change-Id: I5addb292f770d925f47f756902e16073039e8f71
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/120473
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Stefana Simion <stefana.simion@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
diff --git a/tests/validation/CPP/Permute.cpp b/tests/validation/CPP/Permute.cpp
index 3341da3..0a97041 100644
--- a/tests/validation/CPP/Permute.cpp
+++ b/tests/validation/CPP/Permute.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -42,7 +42,7 @@
 {
 namespace
 {
-const auto PermuteParametersSmall = combine(datasets::Small4DShapes(),
+const auto PermuteParametersSmall = combine(concat(concat(datasets::Small2DShapes(), datasets::Small3DShapes()), datasets::Small4DShapes()),
                                             framework::dataset::make("PermutationVector", { PermutationVector(2U, 0U, 1U), PermutationVector(1U, 2U, 0U), PermutationVector(3U, 2U, 0U, 1U) }));
 const auto PermuteParametersLarge = combine(datasets::Large4DShapes(),
                                             framework::dataset::make("PermutationVector", { PermutationVector(2U, 0U, 1U), PermutationVector(1U, 2U, 0U), PermutationVector(3U, 2U, 0U, 1U) }));
diff --git a/tests/validation/NEON/DepthwiseConvolutionLayer.cpp b/tests/validation/NEON/DepthwiseConvolutionLayer.cpp
index 47e8896..0cdd4c0 100644
--- a/tests/validation/NEON/DepthwiseConvolutionLayer.cpp
+++ b/tests/validation/NEON/DepthwiseConvolutionLayer.cpp
@@ -82,8 +82,11 @@
     validate(bias.info()->valid_region(), bias_valid_region);
 
     // Validate padding
-    const int         step    = 16 >> info.stride().first;
-    const PaddingSize padding = PaddingCalculator(output_shape.x(), step).required_padding();
+    bool              is_optimized_run = NEDepthwiseConvolutionLayer3x3Kernel::is_optimized_execution_possible(input_shape, info, data_type, DataLayout::NCHW);
+    const int         step_non_opt_dwc = 16 >> info.stride().first;
+    const int         step_bias_add    = 16 / src.info()->element_size();
+    const int         step             = is_optimized_run ? step_bias_add : std::max(step_non_opt_dwc, step_bias_add);
+    const PaddingSize padding          = PaddingCalculator(output_shape.x(), step).required_padding();
     validate(dst.info()->padding(), padding);
 }
 
diff --git a/tests/validation/NEON/Permute.cpp b/tests/validation/NEON/Permute.cpp
index 004aa82..7451d9e 100644
--- a/tests/validation/NEON/Permute.cpp
+++ b/tests/validation/NEON/Permute.cpp
@@ -42,7 +42,7 @@
 {
 namespace
 {
-const auto PermuteParametersSmall = combine(datasets::Small4DShapes(),
+const auto PermuteParametersSmall = combine(concat(concat(datasets::Small2DShapes(), datasets::Small3DShapes()), datasets::Small4DShapes()),
                                             framework::dataset::make("PermutationVector", { PermutationVector(2U, 0U, 1U), PermutationVector(1U, 2U, 0U) }));
 const auto PermuteParametersLarge = combine(datasets::Large4DShapes(),
                                             framework::dataset::make("PermutationVector", { PermutationVector(2U, 0U, 1U), PermutationVector(1U, 2U, 0U) }));