@@ -93,6 +93,70 @@ def test_timebase(self): |
93 | 93 | self.assertEqual(timebase(self.siso_tf3d), True); |
94 | 94 | self.assertEqual(timebase(self.siso_tf3d, strict=False), 1); |
95 | 95 |
|
| 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 | + |
96 | 160 | def testisdtime(self): |
97 | 161 | # Constant |
98 | 162 | self.assertEqual(isdtime(1), True); |
|