Add PAD ERROR_IF test for output shape

Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Change-Id: I25a13540734fa30c0c21b46708dfabbec8c4d1e5
diff --git a/verif/generator/tosa_error_if.py b/verif/generator/tosa_error_if.py
index 1651d95..e4e60b7 100644
--- a/verif/generator/tosa_error_if.py
+++ b/verif/generator/tosa_error_if.py
@@ -43,6 +43,7 @@
     DilationSmallerOne = "DilationSmallerOne"
     PadSmallerZero = "PadSmallerZero"
     PadLargerEqualKernel = "PadLargerEqualKernel"
+    PadOutputShapeMismatch = "PadOutputShapeMismatch"
     PoolingOutputShapeMismatch = "PoolingOutputShapeMismatch"
     PoolingOutputShapeNonInteger = "PoolingOutputShapeNonInteger"
     ConvOutputShapeMismatch = "ConvOutputShapeMismatch"
@@ -1279,6 +1280,30 @@
         return info_dict
 
     @staticmethod
+    def evPadOutputShapeMismatch(check=False, **kwargs):
+        error_name = ErrorIf.PadOutputShapeMismatch
+        param_reqs = {"rank": None, "dtype": None, "shape": None}
+        error_result = False
+        error_reason = "Pad output shape mismatch for requested padding"
+
+        if check:
+            pad = kwargs["pad"]
+            input_shape = kwargs["input_shape"]
+            output_shape = kwargs["output_shape"]
+            for dim, padding in enumerate(pad):
+                expected_size = input_shape[dim] + padding[0] + padding[1]
+                if expected_size != output_shape[dim]:
+                    error_result = True
+
+        info_dict = {
+            "error_name": error_name,
+            "error_result": error_result,
+            "error_reason": error_reason,
+            "param_reqs": param_reqs,
+        }
+        return info_dict
+
+    @staticmethod
     def checkPoolingParams(kernel, stride, pad):
         return (
             min(kernel) >= 1