Skip to content

Commit b0397e0

Browse files
committed
add unit tests for consistent systems repr() processing
1 parent 4cedb6c commit b0397e0

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

control/tests/iosys_test.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2339,3 +2339,54 @@ def test_signal_prefixing(fcn):
23392339
assert sys.output_labels == ['yy[0]']
23402340
if sys.nstates:
23412341
assert sys.state_labels == ['xx[0]', 'xx[1]']
2342+
2343+
@slycotonly
2344+
@pytest.mark.parametrize("fcn, spec, expected, missing", [
2345+
(ct.ss, {}, "\nstates=4, outputs=3, inputs=2", r"dt|name"),
2346+
(ct.tf, {}, "\noutputs=3, inputs=2", r"dt|name|states"),
2347+
(ct.frd, {}, "\noutputs=3, inputs=2", r"dt|states|name"),
2348+
(ct.ss, {'dt': 0.1}, ".*\ndt=0.1,\nstates=4, outputs=3, inputs=2", r"name"),
2349+
(ct.tf, {'dt': 0.1}, ".*\ndt=0.1,\noutputs=3, inputs=2", r"name|states"),
2350+
(ct.frd, {'dt': 0.1},
2351+
".*\ndt=0.1,\noutputs=3, inputs=2", r"name|states"),
2352+
(ct.ss, {'dt': True}, "\ndt=True,\nstates=4, outputs=3, inputs=2", r"name"),
2353+
(ct.ss, {'dt': None}, "\ndt=None,\nstates=4, outputs=3, inputs=2", r"name"),
2354+
(ct.ss, {'dt': 0}, "\nstates=4, outputs=3, inputs=2", r"dt|name"),
2355+
(ct.ss, {'name': 'mysys'}, "\nname='mysys',", r"dt"),
2356+
(ct.tf, {'name': 'mysys'}, "\nname='mysys',", r"dt|states"),
2357+
(ct.frd, {'name': 'mysys'}, "\nname='mysys',", r"dt|states"),
2358+
(ct.ss, {'inputs': ['u1']},
2359+
r"[\n]states=4, outputs=3, inputs=\['u1'\]", r"dt|name"),
2360+
(ct.tf, {'inputs': ['u1']},
2361+
r"[\n]outputs=3, inputs=\['u1'\]", r"dt|name"),
2362+
(ct.frd, {'inputs': ['u1'], 'name': 'sampled'},
2363+
r"[\n]name='sampled', outputs=3, inputs=\['u1'\]", r"dt"),
2364+
(ct.ss, {'outputs': ['y1']},
2365+
r"[\n]states=4, outputs=\['y1'\], inputs=2", r"dt|name"),
2366+
(ct.ss, {'name': 'mysys', 'inputs': ['u1']},
2367+
r"[\n]name='mysys', states=4, outputs=3, inputs=\['u1'\]", r"dt"),
2368+
(ct.ss, {'name': 'mysys', 'states': [
2369+
'long_state_1', 'long_state_2', 'long_state_3']},
2370+
r"[\n]name='.*', states=\[.*\],[\n]outputs=3, inputs=2\)", r"dt"),
2371+
])
2372+
def test_system_repr(fcn, spec, expected, missing):
2373+
spec['outputs'] = spec.get('outputs', 3)
2374+
spec['inputs'] = spec.get('inputs', 2)
2375+
if fcn is ct.ss:
2376+
spec['states'] = spec.get('states', 4)
2377+
2378+
sys = ct.rss(**spec)
2379+
match fcn:
2380+
case ct.frd:
2381+
omega = np.logspace(-1, 1)
2382+
sys = fcn(sys, omega, name=spec.get('name'))
2383+
case ct.tf:
2384+
sys = fcn(sys, name=spec.get('name'))
2385+
2386+
assert sys.shape == (sys.noutputs, sys.ninputs)
2387+
2388+
out = repr(sys)
2389+
assert re.search(expected, out) != None
2390+
2391+
if missing is not None:
2392+
assert re.search(missing, out) is None

0 commit comments

Comments
 (0)