Skip to content

Commit a007fcc

Browse files
authored
Merge pull request #221 from murrayrm/test_timebase
TST: add unit tests for timebase conversions
2 parents 11bf14c + 03d6e05 commit a007fcc

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

control/tests/discrete_test.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,70 @@ def test_timebase(self):
9393
self.assertEqual(timebase(self.siso_tf3d), True);
9494
self.assertEqual(timebase(self.siso_tf3d, strict=False), 1);
9595

96+
def test_timebase_conversions(self):
97+
'''Check to make sure timebases transfer properly'''
98+
tf1 = TransferFunction([1,1],[1,2,3]) # unspecified
99+
tf2 = TransferFunction([1,1],[1,2,3], 0) # cont time
100+
tf3 = TransferFunction([1,1],[1,2,3], True) # dtime, unspec
101+
tf4 = TransferFunction([1,1],[1,2,3], 1) # dtime, dt=1
102+
103+
# Make sure unspecified timebase is converted correctly
104+
self.assertEqual(timebase(tf1*tf1), timebase(tf1))
105+
self.assertEqual(timebase(tf1*tf2), timebase(tf2))
106+
self.assertEqual(timebase(tf1*tf3), timebase(tf3))
107+
self.assertEqual(timebase(tf1*tf4), timebase(tf4))
108+
self.assertEqual(timebase(tf2*tf1), timebase(tf2))
109+
self.assertEqual(timebase(tf3*tf1), timebase(tf3))
110+
self.assertEqual(timebase(tf4*tf1), timebase(tf4))
111+
self.assertEqual(timebase(tf1+tf1), timebase(tf1))
112+
self.assertEqual(timebase(tf1+tf2), timebase(tf2))
113+
self.assertEqual(timebase(tf1+tf3), timebase(tf3))
114+
self.assertEqual(timebase(tf1+tf4), timebase(tf4))
115+
self.assertEqual(timebase(feedback(tf1, tf1)), timebase(tf1))
116+
self.assertEqual(timebase(feedback(tf1, tf2)), timebase(tf2))
117+
self.assertEqual(timebase(feedback(tf1, tf3)), timebase(tf3))
118+
self.assertEqual(timebase(feedback(tf1, tf4)), timebase(tf4))
119+
120+
# Make sure discrete time without sampling is converted correctly
121+
self.assertEqual(timebase(tf3*tf3), timebase(tf3))
122+
self.assertEqual(timebase(tf3*tf4), timebase(tf4))
123+
self.assertEqual(timebase(tf3+tf3), timebase(tf3))
124+
self.assertEqual(timebase(tf3+tf3), timebase(tf4))
125+
self.assertEqual(timebase(feedback(tf3, tf3)), timebase(tf3))
126+
self.assertEqual(timebase(feedback(tf3, tf4)), timebase(tf4))
127+
128+
# Make sure all other combinations are errors
129+
try:
130+
tf2*tf3 # Error; incompatible timebases
131+
raise ValueError("incompatible operation allowed")
132+
except ValueError:
133+
pass
134+
try:
135+
tf2*tf4 # Error; incompatible timebases
136+
raise ValueError("incompatible operation allowed")
137+
except ValueError:
138+
pass
139+
try:
140+
tf2+tf3 # Error; incompatible timebases
141+
raise ValueError("incompatible operation allowed")
142+
except ValueError:
143+
pass
144+
try:
145+
tf2+tf4 # Error; incompatible timebases
146+
raise ValueError("incompatible operation allowed")
147+
except ValueError:
148+
pass
149+
try:
150+
feedback(tf2, tf3) # Error; incompatible timebases
151+
raise ValueError("incompatible operation allowed")
152+
except ValueError:
153+
pass
154+
try:
155+
feedback(tf2, tf4) # Error; incompatible timebases
156+
raise ValueError("incompatible operation allowed")
157+
except ValueError:
158+
pass
159+
96160
def testisdtime(self):
97161
# Constant
98162
self.assertEqual(isdtime(1), True);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy