def test_vector_system_overrides(self): dt = 0.5 for is_discrete in [False, True]: system = CustomVectorSystem(is_discrete) context = system.CreateDefaultContext() u = np.array([1.]) context.FixInputPort(0, BasicVector(u)) # Dispatch virtual calls from C++. output = call_vector_system_overrides(system, context, is_discrete, dt) self.assertTrue(system.HasAnyDirectFeedthrough()) # Check call order. update_type = is_discrete and "discrete" or "continuous" self.assertEqual( system.has_called, [update_type, "feedthrough", "output", "feedthrough"]) # Check values. state = context.get_state() x = (is_discrete and state.get_discrete_state() or state.get_continuous_state()).get_vector().get_value() x0 = [0., 0.] c = is_discrete and 2 or 1 * dt x_expected = x0 + c * u self.assertTrue(np.allclose(x, x_expected)) # Check output. y_expected = np.hstack([u, x]) y = output.get_vector_data(0).get_value() self.assertTrue(np.allclose(y, y_expected))
def test_vector_system_overrides(self): dt = 0.5 for is_discrete in [False, True]: system = CustomVectorSystem(is_discrete) context = system.CreateDefaultContext() u = np.array([1.]) context.FixInputPort(0, BasicVector(u)) # Dispatch virtual calls from C++. output = call_vector_system_overrides( system, context, is_discrete, dt) self.assertTrue(system.HasAnyDirectFeedthrough()) # Check call order. update_type = is_discrete and "discrete" or "continuous" self.assertEqual( system.has_called, [update_type, "feedthrough", "output", "feedthrough"]) # Check values. state = context.get_state() x = (is_discrete and state.get_discrete_state() or state.get_continuous_state()).get_vector().get_value() x0 = [0., 0.] c = is_discrete and 2 or 1*dt x_expected = x0 + c*u self.assertTrue(np.allclose(x, x_expected)) # Check output. y_expected = np.hstack([u, x]) y = output.get_vector_data(0).get_value() self.assertTrue(np.allclose(y, y_expected))