Skip to content
Snippets Groups Projects
Commit 26b19e39 authored by Jacob Wahlman's avatar Jacob Wahlman :ok_hand:
Browse files

Added tests and definition of method

parent b8647143
No related branches found
No related tags found
1 merge request!22Resolve "Replacing Operations in SFG"
Pipeline #12932 failed
...@@ -350,6 +350,18 @@ class SFG(AbstractOperation): ...@@ -350,6 +350,18 @@ class SFG(AbstractOperation):
input_values.append(self._evaluate_source(input_src)) input_values.append(self._evaluate_source(input_src))
return src.operation.evaluate_output(src.index, input_values) 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): def __str__(self):
"""Prints operations, inputs and outputs in a SFG """Prints operations, inputs and outputs in a SFG
......
...@@ -114,3 +114,75 @@ class TestComponents: ...@@ -114,3 +114,75 @@ class TestComponents:
assert set([comp.name for comp in mac_sfg.components]) == { assert set([comp.name for comp in mac_sfg.components]) == {
"INP1", "INP2", "INP3", "ADD1", "ADD2", "MUL1", "OUT1", "S1", "S2", "S3", "S4", "S5", "S6", "S7"} "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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment