From 26b19e3989ba481b0b433a2c8c3fadbce3914b29 Mon Sep 17 00:00:00 2001 From: Jacob Wahlman <jacwa448@student.liu.se> Date: Wed, 15 Apr 2020 09:52:18 +0200 Subject: [PATCH] Added tests and definition of method --- b_asic/signal_flow_graph.py | 12 +++++++ test/test_sfg.py | 72 +++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py index 2f2a0240..324ffb7d 100644 --- a/b_asic/signal_flow_graph.py +++ b/b_asic/signal_flow_graph.py @@ -350,6 +350,18 @@ class SFG(AbstractOperation): input_values.append(self._evaluate_source(input_src)) return src.operation.evaluate_output(src.index, input_values) + def replace_component(self, component_type, _id=None, _type=None): + """Find and replace all components matching either on GraphID, Type or both. + Then return a new deepcopy of the sfg with the replaced component. + + Arguments: + component_type: The type of the new component, e.g Multiplication + + Keyword arguments: + _id: The GraphID to match the component to replace. + _type: The Type to match the component to replace. + """ + pass def __str__(self): """Prints operations, inputs and outputs in a SFG diff --git a/test/test_sfg.py b/test/test_sfg.py index af9dfe17..a133c087 100644 --- a/test/test_sfg.py +++ b/test/test_sfg.py @@ -114,3 +114,75 @@ class TestComponents: assert set([comp.name for comp in mac_sfg.components]) == { "INP1", "INP2", "INP3", "ADD1", "ADD2", "MUL1", "OUT1", "S1", "S2", "S3", "S4", "S5", "S6", "S7"} + + +class TestReplaceComponents: + + def test_replace_addition(self, operation_tree): + sfg = SFG(outputs=[Output(operation_tree)]) + component_id = "add3" + + sfg = sfg.replace_component(Multiplication(name="Multi"), _id=component_id) + assert component_id not in sfg._components_by_id.keys() + assert "Multi" in sfg._components_by_name.keys() + + def test_replace_addition_large_tree(self, large_operation_tree): + sfg = SFG(outputs=[Output(large_operation_tree)]) + component_id = "add2" + + sfg = sfg.replace_component(Multiplication(name="Multi"), _id=component_id) + assert component_id not in sfg._components_by_id.keys() + assert "Multi" in sfg._components_by_name.keys() + + def test_replace_no_input_component(self, operation_tree): + sfg = SFG(outputs=[Output(operation_tree)]) + component_id = "c1" + + sfg = sfg.replace_component(Constant(10), _id=component_id) + assert component_id not in sfg._components_by_id.keys() + + def test_replace_no_destination_component(self, operation_tree): + sfg = SFG(outputs=[Output(operation_tree)]) + component_id = "add1" + + sfg.replace_component(Multiplication(name="Multi"), _id=component_id) + assert component_id not in sfg._components_by_id.keys() + assert "Multi" in sfg._components_by_name.keys() + + def test_replace_several_components(self, large_operation_tree): + sfg = SFG(outputs=[Output(large_operation_tree)]) + component_id = ("add1", "add2", "add3") + + sfg = sfg.replace_component(Multiplication(name="Multi"), _id=component_id) + assert all([_id not in sfg._components_by_id.keys() for _id in component_id]) + assert "Multi" in sfg._components_by_name.keys() + assert len(sfg._components_by_name["Multi"]) == 3 + + def test_replace_all_of_type_components(self, large_operation_tree): + sfg = SFG(outputs=[Output(large_operation_tree)]) + component_type = Addition + + sfg.replace_component(Multiplication(name="Multi"), _type=component_type) + assert all([not isinstance(_type, Addition) for _type in sfg.components]) + assert "Multi" in sfg._components_by_name.keys() + assert len(sfg._components_by_name["Multi"]) == 3 + + def test_no_match_on_replace(self, large_operation_tree): + sfg = SFG(outputs=[Output(large_operation_tree)]) + component_id = "addd1" + + _sfg = sfg.replace_component(Multiplication(name="Multi"), _id=component_id) + assert all([comp in sfg.components for comp in _sfg]) + assert "Multi" not in sfg._components_by_name.keys() + + def test_not_equal_input(self, large_operation_tree): + sfg = SFG(outputs=[Output(large_operation_tree)]) + component_id = "c1" + + # Couldn't import pytest.raises + try: + sfg = sfg.replace_component(Multiplication(name="Multi"), component_id) + except AssertionError: + assert True + + assert False -- GitLab