@@ -59,7 +59,7 @@ def sys_dict():
5959rtype_list = ['ss' , 'tf' , 'frd' , 'lio' , 'ios' , 'arr' , 'flt' ]
6060conversion_table = [
6161 # op left ss tf frd lio ios arr flt
62- ('add' , 'ss' , ['ss' , 'ss' , 'frd' , 'ss' , 'ios' , 'ss' , 'ss' ]),
62+ ('add' , 'ss' , ['ss' , 'ss' , 'frd' , 'lio' , 'ios' , 'ss' , 'ss' ]),
6363 ('add' , 'tf' , ['tf' , 'tf' , 'frd' , 'lio' , 'ios' , 'tf' , 'tf' ]),
6464 ('add' , 'frd' , ['frd' , 'frd' , 'frd' , 'frd' , 'E' , 'frd' , 'frd' ]),
6565 ('add' , 'lio' , ['lio' , 'lio' , 'xrd' , 'lio' , 'ios' , 'lio' , 'lio' ]),
@@ -68,7 +68,7 @@ def sys_dict():
6868 ('add' , 'flt' , ['ss' , 'tf' , 'frd' , 'lio' , 'ios' , 'arr' , 'flt' ]),
6969
7070 # op left ss tf frd lio ios arr flt
71- ('sub' , 'ss' , ['ss' , 'ss' , 'frd' , 'ss' , 'ios' , 'ss' , 'ss' ]),
71+ ('sub' , 'ss' , ['ss' , 'ss' , 'frd' , 'lio' , 'ios' , 'ss' , 'ss' ]),
7272 ('sub' , 'tf' , ['tf' , 'tf' , 'frd' , 'lio' , 'ios' , 'tf' , 'tf' ]),
7373 ('sub' , 'frd' , ['frd' , 'frd' , 'frd' , 'frd' , 'E' , 'frd' , 'frd' ]),
7474 ('sub' , 'lio' , ['lio' , 'lio' , 'xrd' , 'lio' , 'ios' , 'lio' , 'lio' ]),
@@ -77,7 +77,7 @@ def sys_dict():
7777 ('sub' , 'flt' , ['ss' , 'tf' , 'frd' , 'lio' , 'ios' , 'arr' , 'flt' ]),
7878
7979 # op left ss tf frd lio ios arr flt
80- ('mul' , 'ss' , ['ss' , 'ss' , 'frd' , 'ss' , 'ios' , 'ss' , 'ss' ]),
80+ ('mul' , 'ss' , ['ss' , 'ss' , 'frd' , 'lio' , 'ios' , 'ss' , 'ss' ]),
8181 ('mul' , 'tf' , ['tf' , 'tf' , 'frd' , 'lio' , 'ios' , 'tf' , 'tf' ]),
8282 ('mul' , 'frd' , ['frd' , 'frd' , 'frd' , 'frd' , 'E' , 'frd' , 'frd' ]),
8383 ('mul' , 'lio' , ['lio' , 'lio' , 'xrd' , 'lio' , 'ios' , 'lio' , 'lio' ]),
@@ -191,3 +191,39 @@ def test_binary_op_type_conversions(opname, ltype, rtype, sys_dict):
191191 assert len (result .output_labels ) == result .noutputs
192192 if result .nstates is not None :
193193 assert len (result .state_labels ) == result .nstates
194+
195+ @pytest .mark .parametrize (
196+ "typelist, connections, inplist, outlist, expected" , [
197+ (['lio' , 'lio' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'lio' ),
198+ (['lio' , 'ss' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'lio' ),
199+ (['ss' , 'lio' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'lio' ),
200+ (['ss' , 'ss' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'lio' ),
201+ (['lio' , 'tf' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'lio' ),
202+ (['lio' , 'frd' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'E' ),
203+ (['ios' , 'ios' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'ios' ),
204+ (['lio' , 'ios' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'ios' ),
205+ (['ss' , 'ios' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'ios' ),
206+ (['tf' , 'ios' ], [[(1 , 0 ), (0 , 0 )]], [[(0 , 0 )]], [[(1 , 0 )]], 'ios' ),
207+ (['lio' , 'ss' , 'tf' ],
208+ [[(1 , 0 ), (0 , 0 )], [(2 , 0 ), (1 , 0 )]], [[(0 , 0 )]], [[(2 , 0 )]], 'lio' ),
209+ (['ios' , 'ss' , 'tf' ],
210+ [[(1 , 0 ), (0 , 0 )], [(2 , 0 ), (1 , 0 )]], [[(0 , 0 )]], [[(2 , 0 )]], 'ios' ),
211+ ])
212+ def test_interconnect (
213+ typelist , connections , inplist , outlist , expected , sys_dict ):
214+ # Create the system list
215+ syslist = [sys_dict [_type ] for _type in typelist ]
216+
217+ # Make copies of any duplicates
218+ for sysidx , sys in enumerate (syslist ):
219+ if sys == syslist [0 ]:
220+ syslist [sysidx ] = sys .copy ()
221+
222+ # Make sure we get the right result
223+ if expected == 'E' or expected [0 ] == 'x' :
224+ # Exception expected
225+ with pytest .raises (TypeError ):
226+ result = ct .interconnect (syslist , connections , inplist , outlist )
227+ else :
228+ result = ct .interconnect (syslist , connections , inplist , outlist )
229+ assert isinstance (result , type_dict [expected ])
0 commit comments