diff --git a/test/conftest.py b/test/conftest.py index 66ee9630ea4ac0a05b446f4dedbfe68549a1191e..64f39843c53a4369781a269fd7fc30ad9aa1d255 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -1,3 +1,4 @@ +from test.fixtures.signal import signal, signals +from test.fixtures.operation_tree import * +from test.fixtures.port import * import pytest -from test.fixtures.signal import * -from test.fixtures.operation_tree import * \ No newline at end of file diff --git a/test/fixtures/operation_tree.py b/test/fixtures/operation_tree.py index 74d3b8c6f34cce87878f82e539c798a8a6dc9b0a..df3fcac35cc495d14bed06ccdfc2a3ebed25616e 100644 --- a/test/fixtures/operation_tree.py +++ b/test/fixtures/operation_tree.py @@ -17,11 +17,10 @@ def create_operation(_type, dest_oper, index, **kwargs): @pytest.fixture def operation_tree(): - """ - Return a addition operation connected with 2 constants. - >---C---+ - ---A - >---C---+ + """Return a addition operation connected with 2 constants. + ---C---+ + ---A + ---C---+ """ add_oper = Addition() create_operation(Constant, add_oper, 0, value=2) @@ -30,15 +29,14 @@ def operation_tree(): @pytest.fixture def large_operation_tree(): - """ - Return a constant operation connected with a large operation tree with 3 other constants and 3 additions. - >---C---+ - ---A---+ - >---C---+ | - +---A - >---C---+ | - ---A---+ - >---C---+ + """Return a constant operation connected with a large operation tree with 3 other constants and 3 additions. + ---C---+ + ---A---+ + ---C---+ | + +---A + ---C---+ | + ---A---+ + ---C---+ """ add_oper = Addition() add_oper_2 = Addition() diff --git a/test/fixtures/port.py b/test/fixtures/port.py new file mode 100644 index 0000000000000000000000000000000000000000..4019b3a2016aa418daeca771f9a2d8bcc4ca6652 --- /dev/null +++ b/test/fixtures/port.py @@ -0,0 +1,10 @@ +import pytest +from b_asic.port import InputPort, OutputPort + +@pytest.fixture +def input_port(): + return InputPort(0, None) + +@pytest.fixture +def output_port(): + return OutputPort(0, None) diff --git a/test/graph_id/test_graph_id_generator.py b/test/graph_id/test_graph_id_generator.py deleted file mode 100644 index 85fb088d3409432e173a8b649c7eb3e4c191d423..0000000000000000000000000000000000000000 --- a/test/graph_id/test_graph_id_generator.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -B-ASIC test suite for graph id generator. -""" - -from b_asic.graph_id import GraphIDGenerator, GraphID - -import pytest - -@pytest.fixture -def graph_id_generator(): - return GraphIDGenerator() - -def test_empty_string_generator(graph_id_generator): - """Test the graph id generator for an empty string type.""" - assert graph_id_generator.get_next_id("") == "1" - assert graph_id_generator.get_next_id("") == "2" - - -def test_normal_string_generator(graph_id_generator): - """"Test the graph id generator for a normal string type.""" - assert graph_id_generator.get_next_id("add") == "add1" - assert graph_id_generator.get_next_id("add") == "add2" - -def test_different_strings_generator(graph_id_generator): - """Test the graph id generator for different strings.""" - assert graph_id_generator.get_next_id("sub") == "sub1" - assert graph_id_generator.get_next_id("mul") == "mul1" - assert graph_id_generator.get_next_id("sub") == "sub2" - assert graph_id_generator.get_next_id("mul") == "mul2" diff --git a/test/port/test_outputport.py b/test/port/test_outputport.py deleted file mode 100644 index ac50818e105f97c094a02b7fb19592dc85e67e33..0000000000000000000000000000000000000000 --- a/test/port/test_outputport.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -B-ASIC test suite for OutputPort -TODO: More info -""" -from b_asic import InputPort, OutputPort -import pytest - -@pytest.fixture -def inp_ports(): - return [InputPort(_, None) for _ in range(0,3)] - -def test_connect_multiple_signals(inp_ports): - """Can multiple ports connect to an output port?""" - out_port = OutputPort(0, None) - - for port in inp_ports: - out_port.connect(port) - - assert out_port.signal_count() == len(inp_ports) - -def test_disconnect_multiple_signals(inp_ports): - """Can multiple signals disconnect from an output port?""" - out_port = OutputPort(0, None) - - sigs = [] - - for port in inp_ports: - sigs.append(out_port.connect(port)) - - for sig in sigs: - out_port.remove_signal(sig) - - assert out_port.signal_count() == 0 - -def test_disconnect_mulitple_ports(inp_ports): - """Can multiple ports be disconnected from an output port?""" - out_port = OutputPort(0, None) - - for port in inp_ports: - out_port.connect(port) - - for port in inp_ports: - out_port.disconnect(port) - - assert out_port.signal_count() == 3 - assert len(out_port.connected_ports) == 0 \ No newline at end of file diff --git a/test/signal_flow_graph/test_signal_flow_graph.py b/test/signal_flow_graph/test_signal_flow_graph.py deleted file mode 100644 index d18d2da555df3cc01e62971dcc043fbd25567a22..0000000000000000000000000000000000000000 --- a/test/signal_flow_graph/test_signal_flow_graph.py +++ /dev/null @@ -1,10 +0,0 @@ -from b_asic.signal_flow_graph import SFG -from b_asic.core_operations import Addition, Constant -from b_asic.signal import Signal -from b_asic.signal_flow_graph import SFG - -import pytest - -def test_adding_to_sfg(): - pass - diff --git a/test/core_operations/test_core_operations.py b/test/test_core_operations.py similarity index 99% rename from test/core_operations/test_core_operations.py rename to test/test_core_operations.py index 1d33bfe10fd27e59aaabf2f733c05178ee5507b1..b176b2a6506cc5a1297813f6ddcb6d3589492838 100644 --- a/test/core_operations/test_core_operations.py +++ b/test/test_core_operations.py @@ -3,8 +3,6 @@ B-ASIC test suite for the core operations. """ from b_asic.core_operations import Constant, Addition, Subtraction, Multiplication, Division, SquareRoot, ComplexConjugate, Max, Min, Absolute, ConstantMultiplication, ConstantAddition, ConstantSubtraction, ConstantDivision -from b_asic.signal import Signal -import pytest # Constant tests. def test_constant(): diff --git a/test/test_graph_id_generator.py b/test/test_graph_id_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..b14597eabe6c15695c5c452f69f3deeab56e36d5 --- /dev/null +++ b/test/test_graph_id_generator.py @@ -0,0 +1,28 @@ +""" +B-ASIC test suite for graph id generator. +""" + +from b_asic.graph_id import GraphIDGenerator, GraphID +import pytest + +@pytest.fixture +def graph_id_generator(): + return GraphIDGenerator() + +class TestGetNextId: + def test_empty_string_generator(self, graph_id_generator): + """Test the graph id generator for an empty string type.""" + assert graph_id_generator.get_next_id("") == "1" + assert graph_id_generator.get_next_id("") == "2" + + def test_normal_string_generator(self, graph_id_generator): + """"Test the graph id generator for a normal string type.""" + assert graph_id_generator.get_next_id("add") == "add1" + assert graph_id_generator.get_next_id("add") == "add2" + + def test_different_strings_generator(self, graph_id_generator): + """Test the graph id generator for different strings.""" + assert graph_id_generator.get_next_id("sub") == "sub1" + assert graph_id_generator.get_next_id("mul") == "mul1" + assert graph_id_generator.get_next_id("sub") == "sub2" + assert graph_id_generator.get_next_id("mul") == "mul2" diff --git a/test/port/test_inputport.py b/test/test_inputport.py similarity index 100% rename from test/port/test_inputport.py rename to test/test_inputport.py diff --git a/test/test_operation.py b/test/test_operation.py new file mode 100644 index 0000000000000000000000000000000000000000..6c37e30bddd0b55ea69ae5b95a341c1ddeb56847 --- /dev/null +++ b/test/test_operation.py @@ -0,0 +1,31 @@ +from b_asic.core_operations import Constant, Addition +from b_asic.signal import Signal +from b_asic.port import InputPort, OutputPort + +import pytest + +class TestTraverse: + def test_traverse_single_tree(self, operation): + """Traverse a tree consisting of one operation.""" + constant = Constant(None) + assert list(constant.traverse()) == [constant] + + def test_traverse_tree(self, operation_tree): + """Traverse a basic addition tree with two constants.""" + assert len(list(operation_tree.traverse())) == 3 + + def test_traverse_large_tree(self, large_operation_tree): + """Traverse a larger tree.""" + assert len(list(large_operation_tree.traverse())) == 7 + + def test_traverse_type(self, large_operation_tree): + traverse = list(large_operation_tree.traverse()) + assert len(list(filter(lambda type_: isinstance(type_, Addition), traverse))) == 3 + assert len(list(filter(lambda type_: isinstance(type_, Constant), traverse))) == 4 + + def test_traverse_loop(self, operation_tree): + add_oper_signal = Signal() + operation_tree._output_ports[0].add_signal(add_oper_signal) + operation_tree._input_ports[0].remove_signal(add_oper_signal) + operation_tree._input_ports[0].add_signal(add_oper_signal) + assert len(list(operation_tree.traverse())) == 2 diff --git a/test/test_outputport.py b/test/test_outputport.py new file mode 100644 index 0000000000000000000000000000000000000000..deed7a1e06836600254e3903b8b45a3d05f17cbe --- /dev/null +++ b/test/test_outputport.py @@ -0,0 +1,80 @@ +""" +B-ASIC test suite for OutputPort. +""" +from b_asic import OutputPort, InputPort, Signal +import pytest + +@pytest.fixture +def output_port(): + return OutputPort(0, None) + +@pytest.fixture +def input_port(): + return InputPort(0, None) + +@pytest.fixture +def list_of_input_ports(): + return [InputPort(_, None) for _ in range(0,3)] + +class TestConnect: + def test_multiple_ports(self, output_port, list_of_input_ports): + """Can multiple ports connect to an output port?""" + for port in list_of_input_ports: + output_port.connect(port) + + assert output_port.signal_count() == len(list_of_input_ports) + + def test_same_port(self, output_port, list_of_input_ports): + """Check error handing.""" + output_port.connect(list_of_input_ports[0]) + with pytest.raises(AssertionError): + output_port.connect(list_of_input_ports[0]) + + assert output_port.signal_count() == 2 + +class TestAddSignal: + def test_dangling(self, output_port): + s = Signal() + output_port.add_signal(s) + + assert output_port.signal_count() == 1 + + def test_with_destination(self, output_port, input_port): + s = Signal(destination=input_port) + output_port.add_signal(s) + + assert output_port.connected_ports == [s.destination] + +class TestDisconnect: + def test_multiple_ports(self, output_port, list_of_input_ports): + """Can multiple ports disconnect from OutputPort?""" + for port in list_of_input_ports: + output_port.connect(port) + + for port in list_of_input_ports: + output_port.disconnect(port) + + assert output_port.signal_count() == 3 + assert output_port.connected_ports == [] + +class TestRemoveSignal: + def test_one_signal(self, output_port, input_port): + s = output_port.connect(input_port) + output_port.remove_signal(s) + + assert output_port.signal_count() == 0 + assert output_port.signals == [] + assert output_port.connected_ports == [] + + def test_multiple_signals(self, output_port, list_of_input_ports): + """Can multiple signals disconnect from OutputPort?""" + sigs = [] + + for port in list_of_input_ports: + sigs.append(output_port.connect(port)) + + for sig in sigs: + output_port.remove_signal(sig) + + assert output_port.signal_count() == 0 + assert output_port.signals == [] diff --git a/test/signal/test_signal.py b/test/test_signal.py similarity index 100% rename from test/signal/test_signal.py rename to test/test_signal.py diff --git a/test/traverse/test_traverse_tree.py b/test/traverse/test_traverse_tree.py deleted file mode 100644 index 031aeec76eebacb1b54b21a53023326dcbefee08..0000000000000000000000000000000000000000 --- a/test/traverse/test_traverse_tree.py +++ /dev/null @@ -1,30 +0,0 @@ -from b_asic.core_operations import Constant, Addition -from b_asic.signal import Signal -from b_asic.port import InputPort, OutputPort - -import pytest - -def test_traverse_single_tree(operation): - """Traverse a tree consisting of one operation.""" - constant = Constant(None) - assert list(constant.traverse()) == [constant] - -def test_traverse_tree(operation_tree): - """Traverse a basic addition tree with two constants.""" - assert len(list(operation_tree.traverse())) == 3 - -def test_traverse_large_tree(large_operation_tree): - """Traverse a larger tree.""" - assert len(list(large_operation_tree.traverse())) == 7 - -def test_traverse_type(large_operation_tree): - traverse = list(large_operation_tree.traverse()) - assert len(list(filter(lambda type_: isinstance(type_, Addition), traverse))) == 3 - assert len(list(filter(lambda type_: isinstance(type_, Constant), traverse))) == 4 - -def test_traverse_loop(operation_tree): - add_oper_signal = Signal() - operation_tree._output_ports[0].add_signal(add_oper_signal) - operation_tree._input_ports[0].remove_signal(add_oper_signal) - operation_tree._input_ports[0].add_signal(add_oper_signal) - assert len(list(operation_tree.traverse())) == 2