43 lines
1005 B
Python
43 lines
1005 B
Python
import pytest
|
|
import numpy as np
|
|
|
|
from PythonLinearNonlinearControl.envs.first_order_lag import FirstOrderLagEnv
|
|
|
|
class TestFirstOrderLagEnv():
|
|
|
|
def test_step(self):
|
|
env = FirstOrderLagEnv()
|
|
|
|
curr_x = np.ones(4)
|
|
|
|
env.reset(init_x=curr_x)
|
|
|
|
u = np.ones(2) * 0.1
|
|
|
|
next_x, _, _, _ = env.step(u)
|
|
|
|
dx = np.dot(env.A, curr_x[:, np.newaxis])
|
|
du = np.dot(env.B, u[:, np.newaxis])
|
|
|
|
expected = (dx + du).flatten()
|
|
|
|
assert next_x == pytest.approx(expected, abs=1e-5)
|
|
|
|
def test_bound_step(self):
|
|
env = FirstOrderLagEnv()
|
|
|
|
curr_x = np.ones(4)
|
|
|
|
env.reset(init_x=curr_x)
|
|
|
|
u = np.ones(2) * 1e5
|
|
|
|
next_x, _, _, _ = env.step(u)
|
|
|
|
dx = np.dot(env.A, curr_x[:, np.newaxis])
|
|
du = np.dot(env.B,
|
|
np.array(env.config["input_upper_bound"])[:, np.newaxis])
|
|
|
|
expected = (dx + du).flatten()
|
|
|
|
assert next_x == pytest.approx(expected, abs=1e-5) |