From 5e052ffc4b9c09c869b7cf856f716a6d190b6f4c Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson <oscar.gustafsson@gmail.com> Date: Mon, 23 Jan 2023 11:45:40 +0100 Subject: [PATCH] Refactor GUI load for testing and add test --- b_asic/GUI/main_window.py | 16 +++++++++++++--- examples/twotapfirsfg.py | 35 +++++++++++++++++++++++++++++++++++ test/conftest.py | 17 +++++++++++++++++ test/test_gui.py | 9 +++++++++ test/test_gui/twotapfir.py | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 examples/twotapfirsfg.py create mode 100644 test/test_gui/twotapfir.py diff --git a/b_asic/GUI/main_window.py b/b_asic/GUI/main_window.py index 909681df..c11a86b9 100644 --- a/b_asic/GUI/main_window.py +++ b/b_asic/GUI/main_window.py @@ -210,17 +210,22 @@ class MainWindow(QMainWindow): self.logger.info(f"Saved SFG to path: {module}.") - def save_work(self): + def save_work(self, arg): + print("Save: ", arg) self.sfg_widget = SelectSFGWindow(self) self.sfg_widget.show() # Wait for input to dialog. self.sfg_widget.ok.connect(self._save_work) - def load_work(self): + def load_work(self, arg): + print("Load: ", arg) module, accepted = QFileDialog().getOpenFileName() if not accepted: return + self._load_from_file(module) + + def _load_from_file(self, module): self.logger.info(f"Loading SFG from path: {module}.") try: @@ -244,6 +249,12 @@ class MainWindow(QMainWindow): return sfg.name = name + self._load_sfg(sfg, positions) + self.logger.info(f"Loaded SFG from path: {module}.") + + def _load_sfg(self, sfg, positions=None): + if positions is None: + positions = {} for op in sfg.split(): self.create_operation( @@ -285,7 +296,6 @@ class MainWindow(QMainWindow): self.opToSFG[self.operationDragDict[op]] = sfg self.sfg_dict[sfg.name] = sfg - self.logger.info(f"Loaded SFG from path: {module}.") self.update() def exit_app(self): diff --git a/examples/twotapfirsfg.py b/examples/twotapfirsfg.py new file mode 100644 index 00000000..1456dbba --- /dev/null +++ b/examples/twotapfirsfg.py @@ -0,0 +1,35 @@ + +""" +B-ASIC automatically generated SFG file. +Name: twotapfir +Last saved: 2023-01-23 11:29:09.423052. +""" +from b_asic import SFG, Signal, Input, Output, ConstantMultiplication, Delay, Input, Output, Addition +# Inputs: +in1 = Input(name="") + +# Outputs: +out1 = Output(name="") + +# Operations: +cmul1 = ConstantMultiplication(value=0.5, name="cmul", latency_offsets={'in0': None, 'out0': None}) +in1 = Input(name="") +add1 = Addition(name="", latency_offsets={'in0': None, 'in1': None, 'out0': None}) +cmul2 = ConstantMultiplication(value=0.5, name="cmul2", latency_offsets={'in0': None, 'out0': None}) +out1 = Output(name="") +t1 = Delay(initial_value=0, name="") +in1 = Input(name="") + +# Signals: + +Signal(source=cmul1.output(0), destination=add1.input(1)) +Signal(source=in1.output(0), destination=cmul1.input(0)) +Signal(source=in1.output(0), destination=t1.input(0)) +Signal(source=add1.output(0), destination=out1.input(0)) +Signal(source=cmul2.output(0), destination=add1.input(0)) +Signal(source=t1.output(0), destination=cmul2.input(0)) +twotapfir = SFG(inputs=[in1], outputs=[out1], name='twotapfir') + +# SFG Properties: +prop = {'name':twotapfir} +positions = {'in1': (-264.0, -202.0), 't1': (-135.0, -204.0), 'out1': (216.0, 92.0), 'cmul1': (-181.0, -67.0), 'cmul2': (-27.0, -66.0), 'add1': (91.0, 93.0)} diff --git a/test/conftest.py b/test/conftest.py index 637da5fa..9f33ab9d 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -3,4 +3,21 @@ from test.fixtures.port import * from test.fixtures.signal import signal, signals from test.fixtures.signal_flow_graph import * +from distutils import dir_util +import os + import pytest + + +@pytest.fixture +def datadir(tmpdir, request): + print(tmpdir, request) + filename = request.module.__file__ + print(filename) + test_dir, ext = os.path.splitext(filename) + print(test_dir, ext) + + if os.path.isdir(test_dir): + dir_util.copy_tree(test_dir, str(tmpdir)) + + return tmpdir diff --git a/test/test_gui.py b/test/test_gui.py index cbd73be1..39c642a9 100644 --- a/test/test_gui.py +++ b/test/test_gui.py @@ -11,3 +11,12 @@ def test_start(qtbot): qtbot.addWidget(widget) widget.exit_app() + + +def test_load(qtbot, datadir): + widget = GUI.MainWindow() + qtbot.addWidget(widget) + widget._load_from_file(datadir.join('twotapfir.py')) + assert 'twotapfir' in widget.sfg_dict + + widget.exit_app() diff --git a/test/test_gui/twotapfir.py b/test/test_gui/twotapfir.py new file mode 100644 index 00000000..1456dbba --- /dev/null +++ b/test/test_gui/twotapfir.py @@ -0,0 +1,35 @@ + +""" +B-ASIC automatically generated SFG file. +Name: twotapfir +Last saved: 2023-01-23 11:29:09.423052. +""" +from b_asic import SFG, Signal, Input, Output, ConstantMultiplication, Delay, Input, Output, Addition +# Inputs: +in1 = Input(name="") + +# Outputs: +out1 = Output(name="") + +# Operations: +cmul1 = ConstantMultiplication(value=0.5, name="cmul", latency_offsets={'in0': None, 'out0': None}) +in1 = Input(name="") +add1 = Addition(name="", latency_offsets={'in0': None, 'in1': None, 'out0': None}) +cmul2 = ConstantMultiplication(value=0.5, name="cmul2", latency_offsets={'in0': None, 'out0': None}) +out1 = Output(name="") +t1 = Delay(initial_value=0, name="") +in1 = Input(name="") + +# Signals: + +Signal(source=cmul1.output(0), destination=add1.input(1)) +Signal(source=in1.output(0), destination=cmul1.input(0)) +Signal(source=in1.output(0), destination=t1.input(0)) +Signal(source=add1.output(0), destination=out1.input(0)) +Signal(source=cmul2.output(0), destination=add1.input(0)) +Signal(source=t1.output(0), destination=cmul2.input(0)) +twotapfir = SFG(inputs=[in1], outputs=[out1], name='twotapfir') + +# SFG Properties: +prop = {'name':twotapfir} +positions = {'in1': (-264.0, -202.0), 't1': (-135.0, -204.0), 'out1': (216.0, 92.0), 'cmul1': (-181.0, -67.0), 'cmul2': (-27.0, -66.0), 'add1': (91.0, 93.0)} -- GitLab