Skip to content
Snippets Groups Projects
test_sfg.py 3.79 KiB
Newer Older
  • Learn to ignore specific revisions
  • Ivar Härnqvist's avatar
    Ivar Härnqvist committed
    from b_asic import SFG
    from b_asic.signal import Signal
    
    from b_asic.core_operations import Addition, Constant, Multiplication
    
    Ivar Härnqvist's avatar
    Ivar Härnqvist committed
    from b_asic.special_operations import Input, Output
    
    
    Ivar Härnqvist's avatar
    Ivar Härnqvist committed
    class TestConstructor:
    
        def test_direct_input_to_output_sfg_construction(self):
            inp = Input("INP1")
            out = Output(None, "OUT1")
            out.input(0).connect(inp, "S1")
    
            sfg = SFG(inputs=[inp], outputs=[out])
    
            assert len(list(sfg.components)) == 3
            assert sfg.input_count == 1
            assert sfg.output_count == 1
    
        def test_same_signal_input_and_output_sfg_construction(self):
            add1 = Addition(None, None, "ADD1")
            add2 = Addition(None, None, "ADD2")
    
            sig1 = add2.input(0).connect(add1, "S1")
    
            sfg = SFG(input_signals=[sig1], output_signals=[sig1])
    
            assert len(list(sfg.components)) == 3
            assert sfg.input_count == 1
            assert sfg.output_count == 1
    
    
    Ivar Härnqvist's avatar
    Ivar Härnqvist committed
        def test_outputs_construction(self, operation_tree):
            outp = Output(operation_tree)
            sfg = SFG(outputs=[outp])
    
            assert len(list(sfg.components)) == 7
            assert sfg.input_count == 0
            assert sfg.output_count == 1
    
        def test_signals_construction(self, operation_tree):
            outs = Signal(source=operation_tree.output(0))
            sfg = SFG(output_signals=[outs])
    
            assert len(list(sfg.components)) == 7
            assert sfg.input_count == 0
            assert sfg.output_count == 1
    
    
    
    class TestDeepCopy:
        def test_deep_copy_no_duplicates(self):
            inp1 = Input("INP1")
            inp2 = Input("INP2")
            inp3 = Input("INP3")
            add1 = Addition(inp1, inp2, "ADD1")
            mul1 = Multiplication(add1, inp3, "MUL1")
            out1 = Output(mul1, "OUT1")
    
            mac_sfg = SFG(inputs=[inp1, inp2],
                          outputs=[out1], name="mac_sfg")
    
            mac_sfg_deep_copy = mac_sfg.deep_copy()
    
            for g_id, component in mac_sfg._components_by_id.items():
                component_copy = mac_sfg_deep_copy.find_by_id(g_id)
                assert component.name == component_copy.name
    
        def test_deep_copy(self):
            inp1 = Input("INP1")
            inp2 = Input("INP2")
            inp3 = Input("INP3")
            add1 = Addition(None, None, "ADD1")
            add2 = Addition(None, None, "ADD2")
            mul1 = Multiplication(None, None, "MUL1")
            out1 = Output(None, "OUT1")
    
            add1.input(0).connect(inp1, "S1")
            add1.input(1).connect(inp2, "S2")
            add2.input(0).connect(add1, "S4")
            add2.input(1).connect(inp3, "S3")
            mul1.input(0).connect(add1, "S5")
            mul1.input(1).connect(add2, "S6")
            out1.input(0).connect(mul1, "S7")
    
            mac_sfg = SFG(inputs=[inp1, inp2],
                          outputs=[out1], name="mac_sfg")
    
            mac_sfg_deep_copy = mac_sfg.deep_copy()
    
            for g_id, component in mac_sfg._components_by_id.items():
                component_copy = mac_sfg_deep_copy.find_by_id(g_id)
                assert component.name == component_copy.name
    
    
    class TestComponents:
    
        def test_advanced_components(self):
            inp1 = Input("INP1")
            inp2 = Input("INP2")
            inp3 = Input("INP3")
            add1 = Addition(None, None, "ADD1")
            add2 = Addition(None, None, "ADD2")
            mul1 = Multiplication(None, None, "MUL1")
            out1 = Output(None, "OUT1")
    
            add1.input(0).connect(inp1, "S1")
            add1.input(1).connect(inp2, "S2")
            add2.input(0).connect(add1, "S4")
            add2.input(1).connect(inp3, "S3")
            mul1.input(0).connect(add1, "S5")
            mul1.input(1).connect(add2, "S6")
            out1.input(0).connect(mul1, "S7")
    
            mac_sfg = SFG(inputs=[inp1, inp2],
                          outputs=[out1], name="mac_sfg")
    
            assert set([comp.name for comp in mac_sfg.components]) == {
                "INP1", "INP2", "INP3", "ADD1", "ADD2", "MUL1", "OUT1", "S1", "S2", "S3", "S4", "S5", "S6", "S7"}