@@ -19,6 +19,7 @@ def setUp(self):
19
19
self .siso_ss1c = StateSpace (sys .A , sys .B , sys .C , sys .D , 0.0 )
20
20
self .siso_ss1d = StateSpace (sys .A , sys .B , sys .C , sys .D , 0.1 )
21
21
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 )
22
23
23
24
# Two input, two output continuous time system
24
25
A = [[- 3. , 4. , 2. ], [- 1. , - 3. , 0. ], [2. , 5. , 3. ]]
@@ -39,19 +40,35 @@ def setUp(self):
39
40
self .siso_tf1c = TransferFunction ([1 , 1 ], [1 , 2 , 1 ], 0 )
40
41
self .siso_tf1d = TransferFunction ([1 , 1 ], [1 , 2 , 1 ], 0.1 )
41
42
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 )
42
56
43
57
def testSystemInitialization (self ):
44
58
# Check to make sure systems are discrete time with proper variables
45
59
self .assertEqual (self .siso_ss1 .dt , None )
46
60
self .assertEqual (self .siso_ss1c .dt , 0 )
47
61
self .assertEqual (self .siso_ss1d .dt , 0.1 )
48
62
self .assertEqual (self .siso_ss2d .dt , 0.2 )
63
+ self .assertEqual (self .siso_ss3d .dt , True )
49
64
self .assertEqual (self .mimo_ss1c .dt , 0 )
50
65
self .assertEqual (self .mimo_ss1d .dt , 0.1 )
51
66
self .assertEqual (self .mimo_ss2d .dt , 0.2 )
52
67
self .assertEqual (self .siso_tf1 .dt , None )
53
68
self .assertEqual (self .siso_tf1c .dt , 0 )
54
69
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 )
55
72
56
73
def testCopyConstructor (self ):
57
74
for sys in (self .siso_ss1 , self .siso_ss1c , self .siso_ss1d ):
@@ -66,9 +83,11 @@ def testTimebase(self):
66
83
self .assertEqual (timebase (self .siso_ss1 ), None );
67
84
self .assertEqual (timebase (self .siso_ss1c ), 'ctime' );
68
85
self .assertEqual (timebase (self .siso_ss1d ), 'dtime' );
86
+ self .assertEqual (timebase (self .siso_ss3d ), 'dtime' );
69
87
self .assertEqual (timebase (self .siso_tf1 ), None );
70
88
self .assertEqual (timebase (self .siso_tf1c ), 'ctime' );
71
89
self .assertEqual (timebase (self .siso_tf1d ), 'dtime' );
90
+ self .assertEqual (timebase (self .siso_tf3d ), 'dtime' );
72
91
73
92
def testisdtime (self ):
74
93
# Constant
@@ -82,6 +101,7 @@ def testisdtime(self):
82
101
self .assertEqual (isdtime (self .siso_ss1c , strict = True ), False );
83
102
self .assertEqual (isdtime (self .siso_ss1d ), True );
84
103
self .assertEqual (isdtime (self .siso_ss1d , strict = True ), True );
104
+ self .assertEqual (isdtime (self .siso_ss3d , strict = True ), True );
85
105
86
106
# Transfer function
87
107
self .assertEqual (isdtime (self .siso_tf1 ), True );
@@ -90,6 +110,7 @@ def testisdtime(self):
90
110
self .assertEqual (isdtime (self .siso_tf1c , strict = True ), False );
91
111
self .assertEqual (isdtime (self .siso_tf1d ), True );
92
112
self .assertEqual (isdtime (self .siso_tf1d , strict = True ), True );
113
+ self .assertEqual (isdtime (self .siso_tf3d , strict = True ), True );
93
114
94
115
def testisctime (self ):
95
116
# Constant
@@ -103,14 +124,16 @@ def testisctime(self):
103
124
self .assertEqual (isctime (self .siso_ss1c , strict = True ), True );
104
125
self .assertEqual (isctime (self .siso_ss1d ), False );
105
126
self .assertEqual (isctime (self .siso_ss1d , strict = True ), False );
127
+ self .assertEqual (isctime (self .siso_ss3d , strict = True ), False );
106
128
107
129
# 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 );
114
137
115
138
def testAddition (self ):
116
139
# State space addition
@@ -120,10 +143,13 @@ def testAddition(self):
120
143
sys = self .siso_ss1d + self .siso_ss1
121
144
sys = self .siso_ss1c + self .siso_ss1c
122
145
sys = self .siso_ss1d + self .siso_ss1d
146
+ sys = self .siso_ss3d + self .siso_ss3d
123
147
self .assertRaises (ValueError , StateSpace .__add__ , self .mimo_ss1c ,
124
148
self .mimo_ss1d )
125
149
self .assertRaises (ValueError , StateSpace .__add__ , self .mimo_ss1d ,
126
150
self .mimo_ss2d )
151
+ self .assertRaises (ValueError , StateSpace .__add__ , self .siso_ss1d ,
152
+ self .siso_ss3d )
127
153
128
154
# Transfer function addition
129
155
sys = self .siso_tf1 + self .siso_tf1d
@@ -132,10 +158,13 @@ def testAddition(self):
132
158
sys = self .siso_tf1d + self .siso_tf1
133
159
sys = self .siso_tf1c + self .siso_tf1c
134
160
sys = self .siso_tf1d + self .siso_tf1d
161
+ sys = self .siso_tf2d + self .siso_tf2d
135
162
self .assertRaises (ValueError , TransferFunction .__add__ , self .siso_tf1c ,
136
163
self .siso_tf1d )
137
164
self .assertRaises (ValueError , TransferFunction .__add__ , self .siso_tf1d ,
138
165
self .siso_tf2d )
166
+ self .assertRaises (ValueError , TransferFunction .__add__ , self .siso_tf1d ,
167
+ self .siso_tf3d )
139
168
140
169
# State space + transfer function
141
170
sys = self .siso_ss1c + self .siso_tf1c
@@ -157,6 +186,8 @@ def testMultiplication(self):
157
186
self .mimo_ss1d )
158
187
self .assertRaises (ValueError , StateSpace .__mul__ , self .mimo_ss1d ,
159
188
self .mimo_ss2d )
189
+ self .assertRaises (ValueError , StateSpace .__mul__ , self .siso_ss1d ,
190
+ self .siso_ss3d )
160
191
161
192
# Transfer function addition
162
193
sys = self .siso_tf1 * self .siso_tf1d
@@ -169,6 +200,8 @@ def testMultiplication(self):
169
200
self .siso_tf1d )
170
201
self .assertRaises (ValueError , TransferFunction .__mul__ , self .siso_tf1d ,
171
202
self .siso_tf2d )
203
+ self .assertRaises (ValueError , TransferFunction .__mul__ , self .siso_tf1d ,
204
+ self .siso_tf3d )
172
205
173
206
# State space * transfer function
174
207
sys = self .siso_ss1c * self .siso_tf1c
@@ -189,6 +222,7 @@ def testFeedback(self):
189
222
sys = feedback (self .siso_ss1d , self .siso_ss1d )
190
223
self .assertRaises (ValueError , feedback , self .mimo_ss1c , self .mimo_ss1d )
191
224
self .assertRaises (ValueError , feedback , self .mimo_ss1d , self .mimo_ss2d )
225
+ self .assertRaises (ValueError , feedback , self .siso_ss1d , self .siso_ss3d )
192
226
193
227
# Transfer function addition
194
228
sys = feedback (self .siso_tf1 , self .siso_tf1d )
@@ -199,6 +233,7 @@ def testFeedback(self):
199
233
sys = feedback (self .siso_tf1d , self .siso_tf1d )
200
234
self .assertRaises (ValueError , feedback , self .siso_tf1c , self .siso_tf1d )
201
235
self .assertRaises (ValueError , feedback , self .siso_tf1d , self .siso_tf2d )
236
+ self .assertRaises (ValueError , feedback , self .siso_tf1d , self .siso_tf3d )
202
237
203
238
# State space, transfer function
204
239
sys = feedback (self .siso_ss1c , self .siso_tf1c )
0 commit comments