From 2d371ea6446b063455ef007baa96cdf55f4d562f Mon Sep 17 00:00:00 2001
From: Yaman Umuroglu <maltanar@gmail.com>
Date: Thu, 28 Nov 2019 17:30:04 +0000
Subject: [PATCH] [Test] extend pytest parametrization to simd and pe

---
 .../fpgadataflow/test_fpgadataflow_fclayer.py | 45 +++++++++----------
 1 file changed, 20 insertions(+), 25 deletions(-)

diff --git a/tests/fpgadataflow/test_fpgadataflow_fclayer.py b/tests/fpgadataflow/test_fpgadataflow_fclayer.py
index ce37455e2..b88b79cbb 100644
--- a/tests/fpgadataflow/test_fpgadataflow_fclayer.py
+++ b/tests/fpgadataflow/test_fpgadataflow_fclayer.py
@@ -71,7 +71,13 @@ def prepare_inputs(model, input_tensor, idt):
     return {"inp": input_tensor}
 
 
-def create_noactivation_testcases(idt, wdt, mh=8, mw=8):
+@pytest.mark.parametrize("wdt", [DataType.BIPOLAR, DataType.INT2])
+@pytest.mark.parametrize("idt", [DataType.BIPOLAR, DataType.INT2])
+@pytest.mark.parametrize("pe", [1, 2, 4])
+@pytest.mark.parametrize("simd", [1, 2, 4])
+def test_fpgadataflow_fclayer_noact(idt, wdt, pe, simd):
+    mh = 4
+    mw = 4
     if wdt == DataType.BIPOLAR and idt == DataType.BIPOLAR:
         odt = DataType.UINT32
     else:
@@ -81,28 +87,17 @@ def create_noactivation_testcases(idt, wdt, mh=8, mw=8):
     # generate input data
     x = gen_finn_dt_tensor(idt, (1, mw))
 
-    # set up layers with different pe and simd
-    pe_values = [1, int(mh / 2), mh]
-    simd_values = [1, int(mw / 2), mw]
-    for pe in pe_values:
-        for simd in simd_values:
-            model = make_single_fclayer_modelwrapper(W, pe, simd, wdt, idt, odt)
-
-            # prepare input data
-            input_dict = prepare_inputs(model, x, idt)
-            if wdt == DataType.BIPOLAR and idt == DataType.BIPOLAR:
-                # convert inputs to binary and use xnorpopcountmatmul
-                y = xp.xnorpopcountmatmul((x + 1) / 2, (W + 1) / 2)
-            else:
-                y = np.matmul(x, W)
-            oshape = model.get_tensor_shape("outp")
-            y_expected = y.reshape(oshape)
-            # execute model
-            y_produced = oxe.execute_onnx(model, input_dict)["outp"]
-            assert (y_produced.reshape(y_expected.shape) == y_expected).all()
-
+    model = make_single_fclayer_modelwrapper(W, pe, simd, wdt, idt, odt)
 
-@pytest.mark.parametrize("wdt", [DataType.BIPOLAR, DataType.INT2])
-@pytest.mark.parametrize("idt", [DataType.BIPOLAR, DataType.INT2])
-def test_fpgadataflow_fclayer_noact(wdt, idt):
-    create_noactivation_testcases(idt, wdt)
+    # prepare input data
+    input_dict = prepare_inputs(model, x, idt)
+    if wdt == DataType.BIPOLAR and idt == DataType.BIPOLAR:
+        # convert inputs to binary and use xnorpopcountmatmul
+        y = xp.xnorpopcountmatmul((x + 1) / 2, (W + 1) / 2)
+    else:
+        y = np.matmul(x, W)
+    oshape = model.get_tensor_shape("outp")
+    y_expected = y.reshape(oshape)
+    # execute model
+    y_produced = oxe.execute_onnx(model, input_dict)["outp"]
+    assert (y_produced.reshape(y_expected.shape) == y_expected).all()
-- 
GitLab