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

Added some initital tests

parent d4ec822b
No related branches found
No related tags found
No related merge requests found
Pipeline #13342 failed
......@@ -7,7 +7,7 @@ from typing import List, Iterable, Sequence, Dict, Optional, DefaultDict, Set
from numbers import Number
from collections import defaultdict, deque
from b_asic.port import SignalSourceProvider, OutputPort
from b_asic.port import SignalSourceProvider, OutputPort, InputPort
from b_asic.operation import Operation, AbstractOperation, ResultKey, RegisterMap, MutableResultMap, MutableRegisterMap
from b_asic.signal import Signal
from b_asic.graph_component import GraphID, GraphIDNumber, GraphComponent, Name, TypeName
......@@ -367,6 +367,9 @@ class SFG(AbstractOperation):
# Add connected operation to the queue of operations to visit.
op_stack.append(original_connected_op)
def couple_operation(self, src: OutputPort, dest: InputPort):
pass
def _evaluate_source(self, src: OutputPort, results: MutableResultMap, registers: MutableRegisterMap, prefix: str) -> Number:
src_prefix = prefix
if src_prefix:
......
import pytest
from b_asic import Addition, Constant, Signal
from b_asic import Addition, Constant, Signal, SquareRoot
@pytest.fixture
......@@ -58,3 +58,25 @@ def operation_graph_with_cycle():
add1 = Addition(None, Constant(7))
add1.input(0).connect(add1)
return Addition(add1, Constant(6))
@pytest.fixture
def large_operation_tree_one_input():
"""Addition operation connected with a large operation tree with 2 other additions and 3 constants
and one placeholder empty square root operation.
----+
|
v
add---+
^ |
| |
3---+ v
add = ?
4---+ ^
| |
v |
add---+
^
|
5---+
"""
return Addition(Addition(SquareRoot(), Constant(3)), Addition(Constant(4), Constant(5)))
from b_asic import SFG, Operation
from b_asic.signal import Signal
from b_asic.core_operations import Addition, Constant, Multiplication
from b_asic.special_operations import Input, Output
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
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"}
import pytest
from b_asic import SFG, Signal, Input, Output, Constant, Addition, Multiplication
from b_asic import SFG, Signal, Input, Output, Constant, Addition, Multiplication, SquareRoot
class TestConstructor:
......@@ -147,3 +147,24 @@ class TestComponents:
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"}
class TestCoupling:
def test_couple_sfg_with_one_operation(self, large_operation_tree):
sfg = SFG(outputs=[Output(large_operation_tree)])
_sqrt = SquareRoot(name="Sqrt")
sfg = sfg.couple_operation(sfg.output(0), _sqrt.input(0))
assert "Sqrt" in sfg._components_by_name.keys()
def test_couple_sfg_with_operation_tree(self, large_operation_tree, large_operation_tree_one_input):
sfg = SFG(outputs=[Output(large_operation_tree)])
_sqrt = [comp for comp in large_operation_tree_one_input.traverse() if isinstance(comp, SquareRoot)][0]
sfg = sfg.couple_operation(sfg.output(0), _sqrt.input(0))
assert "Sqrt" in sfg._components_by_name.keys()
def test_couple_sfg_with_uneven_ports(self, large_operation_tree):
sfg = SFG(outputs=[Output(large_operation_tree)])
_addition = Addition()
sfg = sfg.couple_operation(sfg.output(0), _addition.input(0))
assert "Sqrt" in sfg._components_by_name.keys()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment