From 68e4c9ed83f00292abc7a7cc9647bb7092ba64c0 Mon Sep 17 00:00:00 2001 From: Olle Hansson <olle.hansson@liu.se> Date: Fri, 24 Feb 2023 14:54:04 +0100 Subject: [PATCH] Added two tests and tidied the FromFile code --- b_asic/signal_generator.py | 22 ++++++---------------- test/test_gui.py | 24 ++++++++++++++++++------ test/test_signal_generator.py | 13 ++++++++----- test/test_signal_generator/input.csv | 5 +++++ test/test_signal_generator/test.py | 25 +++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 27 deletions(-) create mode 100644 test/test_signal_generator/input.csv create mode 100644 test/test_signal_generator/test.py diff --git a/b_asic/signal_generator.py b/b_asic/signal_generator.py index c236a1cb..69f7acbc 100644 --- a/b_asic/signal_generator.py +++ b/b_asic/signal_generator.py @@ -165,7 +165,7 @@ class ZeroPad(SignalGenerator): class FromFile(SignalGenerator): """ Signal generator that reads from file and pads a sequence with zeros. - + File should be of type .txt or .csv and contain a single column vector Parameters ---------- path : string @@ -173,20 +173,10 @@ class FromFile(SignalGenerator): """ def __init__(self, path) -> None: - try: - Path(path).resolve(strict=True) - except FileNotFoundError: - raise Exception("Selected input file not found.") - - try: - data = np.loadtxt(path, dtype=complex).tolist() - self._data = data - self._len = len(data) - except ValueError: - raise Exception( - "Selected input file is not of the right format, should be of filetype" - " .txt or .csv and contain single column input vector." - ) + self._path = path + data = np.loadtxt(path, dtype=complex).tolist() + self._data = data + self._len = len(data) def __call__(self, time: int) -> complex: if 0 <= time < self._len: @@ -194,7 +184,7 @@ class FromFile(SignalGenerator): return 0.0 def __repr__(self) -> str: - return f"FromFile({self._data})" + return f"FromFile({self._path!r})" class Sinusoid(SignalGenerator): diff --git a/test/test_gui.py b/test/test_gui.py index e8d16e3f..95902995 100644 --- a/test/test_gui.py +++ b/test/test_gui.py @@ -148,6 +148,22 @@ def test_help_dialogs(qtbot): widget.exit_app() +def test_simulate(qtbot, datadir): + # Smoke test to open up the "Simulate SFG" and run default simulation + # Should really test all different tests + widget = GUI.MainWindow() + qtbot.addWidget(widget) + widget._load_from_file(datadir.join('twotapfir.py')) + assert 'twotapfir' in widget.sfg_dict + widget.simulate_sfg() + qtbot.wait(100) + widget.dialog.save_properties() + qtbot.wait(100) + widget.dialog.close() + + widget.exit_app() + + def test_properties_window_smoke_test(qtbot, datadir): # Smoke test to open up the properties window # Should really check that the contents are correct and changes works etc @@ -159,9 +175,7 @@ def test_properties_window_smoke_test(qtbot, datadir): dragbutton = widget.operationDragDict[op] dragbutton.show_properties_window() assert dragbutton._properties_window.operation == dragbutton - qtbot.mouseClick( - dragbutton._properties_window.ok, QtCore.Qt.MouseButton.LeftButton - ) + qtbot.mouseClick(dragbutton._properties_window.ok, QtCore.Qt.MouseButton.LeftButton) widget.exit_app() @@ -179,9 +193,7 @@ def test_properties_window_change_name(qtbot, datadir): dragbutton.show_properties_window() assert dragbutton._properties_window.edit_name.text() == "cmul2" dragbutton._properties_window.edit_name.setText("cmul73") - qtbot.mouseClick( - dragbutton._properties_window.ok, QtCore.Qt.MouseButton.LeftButton - ) + qtbot.mouseClick(dragbutton._properties_window.ok, QtCore.Qt.MouseButton.LeftButton) dragbutton._properties_window.save_properties() assert dragbutton.name == "cmul73" assert dragbutton.operation.name == "cmul73" diff --git a/test/test_signal_generator.py b/test/test_signal_generator.py index 213e7062..4f9d02c8 100644 --- a/test/test_signal_generator.py +++ b/test/test_signal_generator.py @@ -273,12 +273,15 @@ def test_division(): assert isinstance(g, _DivGenerator) -def test_fromfile(): - absolute_path = os.path.dirname(__file__) - relative_path = "../examples/input.csv" - full_path = os.path.join(absolute_path, relative_path) - g = FromFile(full_path) +def test_fromfile(datadir): + g = FromFile(datadir.join('input.csv')) assert g(-1) == 0.0 assert g(0) == 0 assert g(1) == 1 assert g(2) == 0 + + with pytest.raises(FileNotFoundError, match="tset.py not found"): + g = FromFile(datadir.join('tset.py')) + + with pytest.raises(ValueError, match="could not convert string"): + g = FromFile(datadir.join('test.py')) diff --git a/test/test_signal_generator/input.csv b/test/test_signal_generator/input.csv new file mode 100644 index 00000000..b0917c8e --- /dev/null +++ b/test/test_signal_generator/input.csv @@ -0,0 +1,5 @@ +0 +1 +0 +0 +0 diff --git a/test/test_signal_generator/test.py b/test/test_signal_generator/test.py new file mode 100644 index 00000000..147e61fc --- /dev/null +++ b/test/test_signal_generator/test.py @@ -0,0 +1,25 @@ +""" +B-ASIC automatically generated SFG file. +Name: test +Last saved: 2023-02-15 16:45:16.836909. +""" +from b_asic import SFG, Delay, Input, Output, Signal + +# Inputs: +in1 = Input(name="") + +# Outputs: +out1 = Output(name="") + +# Operations: +t1 = Delay(name="") + +# Signals: + +Signal(source=t1.output(0), destination=out1.input(0)) +Signal(source=in1.output(0), destination=t1.input(0)) +test = SFG(inputs=[in1], outputs=[out1], name='test') + +# SFG Properties: +prop = {'name': test} +positions = {'t1': (114, 38, False), 'in1': (-57, 38, False), 'out1': (304, 38, False)} -- GitLab