@@ -19,6 +19,7 @@ def setUp(self):
1919 self .siso_ss1c = StateSpace (sys .A , sys .B , sys .C , sys .D , 0.0 )
2020 self .siso_ss1d = StateSpace (sys .A , sys .B , sys .C , sys .D , 0.1 )
2121 self .siso_ss2d = StateSpace (sys .A , sys .B , sys .C , sys .D , 0.2 )
22+ self .siso_ss3d = StateSpace (sys .A , sys .B , sys .C , sys .D , True )
2223
2324 # Two input, two output continuous time system
2425 A = [[- 3. , 4. , 2. ], [- 1. , - 3. , 0. ], [2. , 5. , 3. ]]
@@ -39,19 +40,35 @@ def setUp(self):
3940 self .siso_tf1c = TransferFunction ([1 , 1 ], [1 , 2 , 1 ], 0 )
4041 self .siso_tf1d = TransferFunction ([1 , 1 ], [1 , 2 , 1 ], 0.1 )
4142 self .siso_tf2d = TransferFunction ([1 , 1 ], [1 , 2 , 1 ], 0.2 )
43+ self .siso_tf3d = TransferFunction ([1 , 1 ], [1 , 2 , 1 ], True )
44+
45+ def testTimebaseEqual (self ):
46+ self .assertEqual (timebaseEqual (None , None ), True )
47+ self .assertEqual (timebaseEqual (1 , 1 ), True )
48+ self .assertEqual (timebaseEqual (1 , 1.0 ), True )
49+ self .assertEqual (timebaseEqual (True , True ), True )
50+
51+ self .assertEqual (timebaseEqual (1 , 0.1 ), False )
52+ self .assertEqual (timebaseEqual (None , 0.1 ), False )
53+ self .assertEqual (timebaseEqual (None , True ), False )
54+ self .assertEqual (timebaseEqual (None , 0 ), False )
55+ self .assertEqual (timebaseEqual (1 , True ), False )
4256
4357 def testSystemInitialization (self ):
4458 # Check to make sure systems are discrete time with proper variables
4559 self .assertEqual (self .siso_ss1 .dt , None )
4660 self .assertEqual (self .siso_ss1c .dt , 0 )
4761 self .assertEqual (self .siso_ss1d .dt , 0.1 )
4862 self .assertEqual (self .siso_ss2d .dt , 0.2 )
63+ self .assertEqual (self .siso_ss3d .dt , True )
4964 self .assertEqual (self .mimo_ss1c .dt , 0 )
5065 self .assertEqual (self .mimo_ss1d .dt , 0.1 )
5166 self .assertEqual (self .mimo_ss2d .dt , 0.2 )
5267 self .assertEqual (self .siso_tf1 .dt , None )
5368 self .assertEqual (self .siso_tf1c .dt , 0 )
5469 self .assertEqual (self .siso_tf1d .dt , 0.1 )
70+ self .assertEqual (self .siso_tf2d .dt , 0.2 )
71+ self .assertEqual (self .siso_tf3d .dt , True )
5572
5673 def testCopyConstructor (self ):
5774 for sys in (self .siso_ss1 , self .siso_ss1c , self .siso_ss1d ):
@@ -66,9 +83,11 @@ def testTimebase(self):
6683 self .assertEqual (timebase (self .siso_ss1 ), None );
6784 self .assertEqual (timebase (self .siso_ss1c ), 'ctime' );
6885 self .assertEqual (timebase (self .siso_ss1d ), 'dtime' );
86+ self .assertEqual (timebase (self .siso_ss3d ), 'dtime' );
6987 self .assertEqual (timebase (self .siso_tf1 ), None );
7088 self .assertEqual (timebase (self .siso_tf1c ), 'ctime' );
7189 self .assertEqual (timebase (self .siso_tf1d ), 'dtime' );
90+ self .assertEqual (timebase (self .siso_tf3d ), 'dtime' );
7291
7392 def testisdtime (self ):
7493 # Constant
@@ -82,6 +101,7 @@ def testisdtime(self):
82101 self .assertEqual (isdtime (self .siso_ss1c , strict = True ), False );
83102 self .assertEqual (isdtime (self .siso_ss1d ), True );
84103 self .assertEqual (isdtime (self .siso_ss1d , strict = True ), True );
104+ self .assertEqual (isdtime (self .siso_ss3d , strict = True ), True );
85105
86106 # Transfer function
87107 self .assertEqual (isdtime (self .siso_tf1 ), True );
@@ -90,6 +110,7 @@ def testisdtime(self):
90110 self .assertEqual (isdtime (self .siso_tf1c , strict = True ), False );
91111 self .assertEqual (isdtime (self .siso_tf1d ), True );
92112 self .assertEqual (isdtime (self .siso_tf1d , strict = True ), True );
113+ self .assertEqual (isdtime (self .siso_tf3d , strict = True ), True );
93114
94115 def testisctime (self ):
95116 # Constant
@@ -103,14 +124,16 @@ def testisctime(self):
103124 self .assertEqual (isctime (self .siso_ss1c , strict = True ), True );
104125 self .assertEqual (isctime (self .siso_ss1d ), False );
105126 self .assertEqual (isctime (self .siso_ss1d , strict = True ), False );
127+ self .assertEqual (isctime (self .siso_ss3d , strict = True ), False );
106128
107129 # Transfer Function
108- self .assertEqual (isctime (self .siso_ss1 ), True );
109- self .assertEqual (isctime (self .siso_ss1 , strict = True ), False );
110- self .assertEqual (isctime (self .siso_ss1c ), True );
111- self .assertEqual (isctime (self .siso_ss1c , strict = True ), True );
112- self .assertEqual (isctime (self .siso_ss1d ), False );
113- self .assertEqual (isctime (self .siso_ss1d , strict = True ), False );
130+ self .assertEqual (isctime (self .siso_tf1 ), True );
131+ self .assertEqual (isctime (self .siso_tf1 , strict = True ), False );
132+ self .assertEqual (isctime (self .siso_tf1c ), True );
133+ self .assertEqual (isctime (self .siso_tf1c , strict = True ), True );
134+ self .assertEqual (isctime (self .siso_tf1d ), False );
135+ self .assertEqual (isctime (self .siso_tf1d , strict = True ), False );
136+ self .assertEqual (isctime (self .siso_tf3d , strict = True ), False );
114137
115138 def testAddition (self ):
116139 # State space addition
@@ -120,10 +143,13 @@ def testAddition(self):
120143 sys = self .siso_ss1d + self .siso_ss1
121144 sys = self .siso_ss1c + self .siso_ss1c
122145 sys = self .siso_ss1d + self .siso_ss1d
146+ sys = self .siso_ss3d + self .siso_ss3d
123147 self .assertRaises (ValueError , StateSpace .__add__ , self .mimo_ss1c ,
124148 self .mimo_ss1d )
125149 self .assertRaises (ValueError , StateSpace .__add__ , self .mimo_ss1d ,
126150 self .mimo_ss2d )
151+ self .assertRaises (ValueError , StateSpace .__add__ , self .siso_ss1d ,
152+ self .siso_ss3d )
127153
128154 # Transfer function addition
129155 sys = self .siso_tf1 + self .siso_tf1d
@@ -132,10 +158,13 @@ def testAddition(self):
132158 sys = self .siso_tf1d + self .siso_tf1
133159 sys = self .siso_tf1c + self .siso_tf1c
134160 sys = self .siso_tf1d + self .siso_tf1d
161+ sys = self .siso_tf2d + self .siso_tf2d
135162 self .assertRaises (ValueError , TransferFunction .__add__ , self .siso_tf1c ,
136163 self .siso_tf1d )
137164 self .assertRaises (ValueError , TransferFunction .__add__ , self .siso_tf1d ,
138165 self .siso_tf2d )
166+ self .assertRaises (ValueError , TransferFunction .__add__ , self .siso_tf1d ,
167+ self .siso_tf3d )
139168
140169 # State space + transfer function
141170 sys = self .siso_ss1c + self .siso_tf1c
@@ -157,6 +186,8 @@ def testMultiplication(self):
157186 self .mimo_ss1d )
158187 self .assertRaises (ValueError , StateSpace .__mul__ , self .mimo_ss1d ,
159188 self .mimo_ss2d )
189+ self .assertRaises (ValueError , StateSpace .__mul__ , self .siso_ss1d ,
190+ self .siso_ss3d )
160191
161192 # Transfer function addition
162193 sys = self .siso_tf1 * self .siso_tf1d
@@ -169,6 +200,8 @@ def testMultiplication(self):
169200 self .siso_tf1d )
170201 self .assertRaises (ValueError , TransferFunction .__mul__ , self .siso_tf1d ,
171202 self .siso_tf2d )
203+ self .assertRaises (ValueError , TransferFunction .__mul__ , self .siso_tf1d ,
204+ self .siso_tf3d )
172205
173206 # State space * transfer function
174207 sys = self .siso_ss1c * self .siso_tf1c
@@ -189,6 +222,7 @@ def testFeedback(self):
189222 sys = feedback (self .siso_ss1d , self .siso_ss1d )
190223 self .assertRaises (ValueError , feedback , self .mimo_ss1c , self .mimo_ss1d )
191224 self .assertRaises (ValueError , feedback , self .mimo_ss1d , self .mimo_ss2d )
225+ self .assertRaises (ValueError , feedback , self .siso_ss1d , self .siso_ss3d )
192226
193227 # Transfer function addition
194228 sys = feedback (self .siso_tf1 , self .siso_tf1d )
@@ -199,6 +233,7 @@ def testFeedback(self):
199233 sys = feedback (self .siso_tf1d , self .siso_tf1d )
200234 self .assertRaises (ValueError , feedback , self .siso_tf1c , self .siso_tf1d )
201235 self .assertRaises (ValueError , feedback , self .siso_tf1d , self .siso_tf2d )
236+ self .assertRaises (ValueError , feedback , self .siso_tf1d , self .siso_tf3d )
202237
203238 # State space, transfer function
204239 sys = feedback (self .siso_ss1c , self .siso_tf1c )
0 commit comments