def test_array_connections(): graph = Graph() gen = graph.add_component("Generate", GenerateArray) dis1 = graph.add_component("Discard1", Discard) graph.add_component("Discard2", Discard) assert gen.ports['OUT'].get_full_name() == 'Generate.OUT' # non-fixed array ports delay element creation assert gen.ports.OUT.fixed_size is None assert names(gen.outports) == [] # assert list(gen.ports._ports.keys()) == ['OUT', 'NULL'] assert type(gen.ports['OUT']) is OutputArray assert type(dis1.ports['IN']) is InputPort # nothing is connected yet # assert gen.ports['OUT'].is_connected() is False assert dis1.ports['IN'].is_connected() is False # make a connection graph.connect("Generate.OUT[1]", "Discard1.IN") assert names(gen.outports) == ['OUT[1]'] assert gen.ports['OUT'][1].is_connected() is True # uses first unused index (index 0) graph.connect("Generate.OUT", "Discard2.IN") assert names(gen.outports) == ['OUT[0]', 'OUT[1]'] assert gen.ports['OUT'][0].is_connected() is True assert type(gen.ports['OUT']) is OutputArray assert type(gen.ports['OUT'][0]) is OutputPort assert type(dis1.ports['IN']) is InputPort # assert gen.ports['OUT'].is_connected() is False assert dis1.ports['IN'].is_connected() is True
def test_component_with_inheritance(): @inport('IN') @outport('OUT') class A(Component): def execute(self): pass @inport('OPT', type=int) class B(A): pass assert names(B.port_definitions().values(), include_null=True) == [ IN_NULL, 'IN', 'OPT', OUT_NULL, 'OUT'] graph = Graph() b = graph.add_component('b', B) assert names(b.ports, include_null=True) == [ IN_NULL, 'IN', 'OPT', OUT_NULL, 'OUT']
def test_fixed_array_connections(): graph = Graph() gen = graph.add_component("Generate", GenerateFixedSizeArray) dis1 = graph.add_component("Discard1", Discard) graph.add_component("Discard2", Discard) assert gen.ports['OUT'].get_full_name() == 'Generate.OUT' # fixed array ports create their ports immediately assert gen.ports.OUT.fixed_size == 2 assert names(gen.outports) == ['OUT[0]', 'OUT[1]'] # assert list(gen.ports._ports.keys()) == ['OUT', 'NULL'] assert type(gen.ports['OUT']) is OutputArray assert type(dis1.ports['IN']) is InputPort # nothing is connected yet # assert gen.ports['OUT'].is_connected() is False assert dis1.ports['IN'].is_connected() is False # make a connection graph.connect("Generate.OUT[1]", "Discard1.IN") assert names(gen.outports) == ['OUT[0]', 'OUT[1]'] assert gen.ports['OUT'][1].is_connected() is True # uses first unconnected index (index 0) graph.connect("Generate.OUT", "Discard2.IN") assert gen.ports['OUT'][0].is_connected() is True # outports can only have more than one connection graph.connect("Generate.OUT[1]", "Discard2.IN") with pytest.raises(FlowError): # cannot connect outside the fixed range graph.connect("Generate.OUT[2]", "Discard2.IN") assert type(gen.ports['OUT']) is OutputArray assert type(gen.ports['OUT'][0]) is OutputPort assert type(dis1.ports['IN']) is InputPort # assert gen.ports['OUT'].is_connected() is False assert dis1.ports['IN'].is_connected() is True
def test_required_array_error(): """if fixed_size is provided and the array port is required, all elements must be connected""" graph = Graph() gen = graph.add_component("Generate", GenerateFixedSizeArray) assert gen.ports['OUT'].required is True graph.add_component("Discard1", Discard) graph.connect("Generate.OUT[0]", "Discard1.IN") assert names(gen.outports) == ['OUT[0]', 'OUT[1]'] gen.init() with pytest.raises(FlowError): gen.ports.OUT.validate()
def test_basic_connections(): graph = Graph() count = graph.add_component("Count", Counter) dis = graph.add_component("Discard1", Discard) graph.add_component("Discard2", Discard) # ports are stored in the order they are declared assert names(count.outports) == ['OUT', 'COUNT'] # assert list(count.ports._ports.keys()) == ['OUT', 'COUNT', 'NULL'] # nothing is connected yet assert count.ports['OUT'].is_connected() is False assert dis.ports['IN'].is_connected() is False with pytest.raises(FlowError): # non-existent port graph.connect("Count.FOO", "Discard1.IN") with pytest.raises(FlowError): # non-existent Component graph.connect("Foo.FOO", "Discard1.IN") # make a connection graph.connect("Count.OUT", "Discard1.IN") # outports can have more than one connection graph.connect("Count.OUT", "Discard2.IN") with pytest.raises(FlowError): # connected ports cannot be initialized graph.initialize(1, "Discard1.IN") assert type(count.ports['OUT']) is OutputPort assert type(dis.ports['IN']) is InputPort assert count.ports['OUT'].is_connected() is True assert dis.ports['IN'].is_connected() is True # FIXME: move this to a different test net = Network(graph) net.reset() net._build_runners() net._open_ports() assert count.ports['OUT'].component is count assert isinstance(count.ports['OUT'].sender, ComponentRunner) assert dis.ports['IN'].component is dis assert isinstance(dis.ports['IN'].receiver, ComponentRunner)