From 6bc422619b97bd961f9bbf835ad0dade4f6f2554 Mon Sep 17 00:00:00 2001
From: auphelia <jakobapk@web.de>
Date: Mon, 18 May 2020 17:59:06 +0100
Subject: [PATCH] [Test] Use numpy padding function to check result of
 SameResize cppsim

---
 .../test_fpgadataflow_sameresize.py           | 32 +++++++++++++++++--
 1 file changed, 29 insertions(+), 3 deletions(-)

diff --git a/tests/fpgadataflow/test_fpgadataflow_sameresize.py b/tests/fpgadataflow/test_fpgadataflow_sameresize.py
index ec776caca..183cd3777 100644
--- a/tests/fpgadataflow/test_fpgadataflow_sameresize.py
+++ b/tests/fpgadataflow/test_fpgadataflow_sameresize.py
@@ -1,5 +1,6 @@
 import pytest
 import os
+import numpy as np
 
 from onnx import TensorProto, helper
 from finn.core.datatype import DataType
@@ -89,10 +90,35 @@ def test_fpgadataflow_sameresize_cppsim(idim, kdim, stride, num_ch, idt, pad_sty
     model = model.transform(GiveUniqueNodeNames())
     model = model.transform(PrepareCppSim())
     model = model.transform(CompileCppSim())
-    y = oxe.execute_onnx(model, input_dict)["outp"]
-
+    y_produced = oxe.execute_onnx(model, input_dict)["outp"]
     expected_oshape = (1, odim, odim, num_ch)
-    assert y.shape == expected_oshape
+    assert y_produced.shape == expected_oshape
+
+    # calculate reference
+    # calculate correct padding according to parameters
+    pad = odim - idim
+    if pad_style == 2:
+        if pad % 2 == 0:
+            pad_up = pad // 2
+            pad_left = pad // 2
+        else:
+            pad_up = pad // 2 + 1
+            pad_left = pad // 2 + 1
+    else:
+        pad_up = pad // 2
+        pad_left = pad // 2
+    pad_down = pad - pad_up
+    pad_right = pad - pad_left
+
+    # reshape input to be 3D
+    x_ref = x.reshape(idim, idim, num_ch)
+    # use numpy padding function as reference
+    y_expected = np.pad(
+        x_ref, ((pad_up, pad_down), (pad_left, pad_right), (0, 0)), "constant"
+    )
+    y_expected = y_expected.reshape(expected_oshape)
+
+    assert (y_produced == y_expected).all()
 
 
 # image dimension
-- 
GitLab