mirror of https://github.com/commaai/rednose.git
Convert tests to use pytest instead of unittest (#43)
* Convert tests to use pytest instead of unittest * Augment PYTHONPATH for pytest via pyproject.toml * cleanup --------- Co-authored-by: Maxime Desroches <desroches.maxime@gmail.com>
This commit is contained in:
parent
72b3479bab
commit
3ad6816953
|
@ -17,7 +17,7 @@ jobs:
|
||||||
- name: Static analysis
|
- name: Static analysis
|
||||||
run: ${{ env.RUN }} "git init && git add -A && pre-commit run --all"
|
run: ${{ env.RUN }} "git init && git add -A && pre-commit run --all"
|
||||||
- name: Unit Tests
|
- name: Unit Tests
|
||||||
run: ${{ env.RUN }} "cd /project/examples; python -m unittest discover"
|
run: ${{ env.RUN }} "pytest"
|
||||||
|
|
||||||
docker_push:
|
docker_push:
|
||||||
name: docker push
|
name: docker push
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
import pytest
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import sympy as sp
|
import sympy as sp
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import unittest
|
|
||||||
|
|
||||||
if __name__ == '__main__': # generating sympy code
|
if __name__ == '__main__': # generating sympy code
|
||||||
from rednose.helpers.ekf_sym import gen_code
|
from rednose.helpers.ekf_sym import gen_code
|
||||||
|
@ -83,7 +83,7 @@ class CompareFilter:
|
||||||
return R
|
return R
|
||||||
|
|
||||||
|
|
||||||
class TestCompare(unittest.TestCase):
|
class TestCompare:
|
||||||
def test_compare(self):
|
def test_compare(self):
|
||||||
np.random.seed(0)
|
np.random.seed(0)
|
||||||
|
|
||||||
|
@ -115,9 +115,9 @@ class TestCompare(unittest.TestCase):
|
||||||
kf.filter_py.predict_and_update_batch(t, ObservationKind.POSITION, z, R)
|
kf.filter_py.predict_and_update_batch(t, ObservationKind.POSITION, z, R)
|
||||||
kf.filter_pyx.predict_and_update_batch(t, ObservationKind.POSITION, z, R)
|
kf.filter_pyx.predict_and_update_batch(t, ObservationKind.POSITION, z, R)
|
||||||
|
|
||||||
self.assertAlmostEqual(kf.filter_py.get_filter_time(), kf.filter_pyx.get_filter_time())
|
assert kf.filter_py.get_filter_time() == pytest.approx(kf.filter_pyx.get_filter_time())
|
||||||
self.assertTrue(np.allclose(kf.filter_py.state(), kf.filter_pyx.state()))
|
assert np.allclose(kf.filter_py.state(), kf.filter_pyx.state())
|
||||||
self.assertTrue(np.allclose(kf.filter_py.covs(), kf.filter_pyx.covs()))
|
assert np.allclose(kf.filter_py.covs(), kf.filter_pyx.covs())
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
|
import pytest
|
||||||
import os
|
import os
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import unittest
|
|
||||||
|
|
||||||
from kinematic_kf import KinematicKalman, ObservationKind, States # pylint: disable=import-error
|
from .kinematic_kf import KinematicKalman, ObservationKind, States
|
||||||
|
|
||||||
GENERATED_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), 'generated'))
|
GENERATED_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), 'generated'))
|
||||||
|
|
||||||
class TestKinematic(unittest.TestCase):
|
class TestKinematic:
|
||||||
def test_kinematic_kf(self):
|
def test_kinematic_kf(self):
|
||||||
np.random.seed(0)
|
np.random.seed(0)
|
||||||
|
|
||||||
|
@ -49,10 +49,10 @@ class TestKinematic(unittest.TestCase):
|
||||||
|
|
||||||
xs, xs_meas, xs_kf, vs_kf, xs_kf_std, vs_kf_std = (np.asarray(a) for a in (xs, xs_meas, xs_kf, vs_kf, xs_kf_std, vs_kf_std))
|
xs, xs_meas, xs_kf, vs_kf, xs_kf_std, vs_kf_std = (np.asarray(a) for a in (xs, xs_meas, xs_kf, vs_kf, xs_kf_std, vs_kf_std))
|
||||||
|
|
||||||
self.assertAlmostEqual(xs_kf[-1], -0.010866289677966417)
|
assert xs_kf[-1] == pytest.approx(-0.010866289677966417)
|
||||||
self.assertAlmostEqual(xs_kf_std[-1], 0.04477103863330089)
|
assert xs_kf_std[-1] == pytest.approx(0.04477103863330089)
|
||||||
self.assertAlmostEqual(vs_kf[-1], -0.8553720537261753)
|
assert vs_kf[-1] == pytest.approx(-0.8553720537261753)
|
||||||
self.assertAlmostEqual(vs_kf_std[-1], 0.6695762270974388)
|
assert vs_kf_std[-1] == pytest.approx(0.6695762270974388)
|
||||||
|
|
||||||
if "PLOT" in os.environ:
|
if "PLOT" in os.environ:
|
||||||
import matplotlib.pyplot as plt # pylint: disable=import-error
|
import matplotlib.pyplot as plt # pylint: disable=import-error
|
||||||
|
@ -80,7 +80,3 @@ class TestKinematic(unittest.TestCase):
|
||||||
plt.legend()
|
plt.legend()
|
||||||
|
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
unittest.main()
|
|
||||||
|
|
|
@ -7,3 +7,10 @@ target-version="py311"
|
||||||
select = ["E", "F", "W", "PIE", "C4", "ISC", "RUF100", "A"]
|
select = ["E", "F", "W", "PIE", "C4", "ISC", "RUF100", "A"]
|
||||||
ignore = ["W292", "E741", "E402", "C408", "ISC003"]
|
ignore = ["W292", "E741", "E402", "C408", "ISC003"]
|
||||||
flake8-implicit-str-concat.allow-multiline=false
|
flake8-implicit-str-concat.allow-multiline=false
|
||||||
|
|
||||||
|
[tool.ruff.lint.flake8-tidy-imports.banned-api]
|
||||||
|
"pytest.main".msg = "pytest.main requires special handling that is easy to mess up!"
|
||||||
|
"unittest".msg = "Use pytest"
|
||||||
|
|
||||||
|
[tool.pytest.ini_options]
|
||||||
|
addopts = "--durations=10 -n auto"
|
||||||
|
|
|
@ -7,3 +7,5 @@ cffi
|
||||||
scons
|
scons
|
||||||
pre-commit
|
pre-commit
|
||||||
Cython
|
Cython
|
||||||
|
pytest
|
||||||
|
pytest-xdist
|
||||||
|
|
Loading…
Reference in New Issue