From df6a26913eb0dbb5232f9a6f47ca36aa8cb7b8e4 Mon Sep 17 00:00:00 2001
From: auphelia <jakobapk@web.de>
Date: Mon, 18 May 2020 15:33:03 +0100
Subject: [PATCH] [Test] Add first draft of unit test for HLSCustomOp
 SameResize_Batch

---
 .../test_fpgadataflow_sameresize.py           | 64 +++++++++++++++++++
 1 file changed, 64 insertions(+)
 create mode 100644 tests/fpgadataflow/test_fpgadataflow_sameresize.py

diff --git a/tests/fpgadataflow/test_fpgadataflow_sameresize.py b/tests/fpgadataflow/test_fpgadataflow_sameresize.py
new file mode 100644
index 000000000..8177e92ef
--- /dev/null
+++ b/tests/fpgadataflow/test_fpgadataflow_sameresize.py
@@ -0,0 +1,64 @@
+import pytest
+
+from onnx import TensorProto, helper
+from finn.core.datatype import DataType
+from finn.core.modelwrapper import ModelWrapper
+from finn.transformation.infer_shapes import InferShapes
+
+
+def make_single_sameresize_modelwrapper(idim, kdim, stride, num_ch, idt, pad_style):
+    assert idim % stride == 0, "Stride must divide input dimension."
+    # number of "same" windows over the input data
+    same_windows = idim // stride
+    odim = kdim + stride * (same_windows - 1)
+    inp = helper.make_tensor_value_info(
+        "inp", TensorProto.FLOAT, [1, idim, idim, num_ch]
+    )
+    outp = helper.make_tensor_value_info(
+        "outp", TensorProto.FLOAT, [1, odim, odim, num_ch]
+    )
+
+    SameResize_node = helper.make_node(
+        "SameResize_Batch",
+        ["inp"],
+        ["outp"],
+        domain="finn",
+        backend="fpgadataflow",
+        ImgDim=idim,
+        KernelDim=kdim,
+        Stride=stride,
+        NumChannels=num_ch,
+        inputDataType=str(idt.name),
+        PaddingStyle=pad_style,
+    )
+
+    graph = helper.make_graph(
+        nodes=[SameResize_node], name="sameresize_graph", inputs=[inp], outputs=[outp]
+    )
+
+    model = helper.make_model(graph, producer_name="sameresize-model")
+    model = ModelWrapper(model)
+
+    model.set_tensor_datatype("inp", idt)
+    model.set_tensor_datatype("outp", idt)
+
+    return model
+
+
+# image dimension
+@pytest.mark.parametrize("idim", [4])
+# kernel dimension
+@pytest.mark.parametrize("kdim", [2])
+# stride
+@pytest.mark.parametrize("stride", [1])
+# number of channels
+@pytest.mark.parametrize("num_ch", [2])
+# FINN input datatype
+@pytest.mark.parametrize("idt", [DataType.INT2])
+# PaddingStyle: distribution of added values to achieve "same" padding
+@pytest.mark.parametrize("pad_style", [2])
+def test_fpgadataflow_sameresize(idim, kdim, stride, num_ch, idt, pad_style):
+    model = make_single_sameresize_modelwrapper(
+        idim, kdim, stride, num_ch, idt, pad_style
+    )
+    model = model.transform(InferShapes())
-- 
GitLab