Search code examples
pythonunit-testingpytestassert

pytest: assert almost equal


How to do assert almost equal with pytest for floats without resorting to something like:

assert x - 0.00001 <= y <= x + 0.00001

More specifically it will be useful to know a neat solution for quickly comparing pairs of float, without unpacking them:

assert (1.32, 2.4) == i_return_tuple_of_two_floats()

Solution

  • I noticed that this question specifically asked about pytest. pytest 3.0 includes an approx() function (well, really class) that is very useful for this purpose.

    import pytest
    
    assert 2.2 == pytest.approx(2.3)
    # fails, default is ± 2.3e-06
    assert 2.2 == pytest.approx(2.3, 0.1)
    # passes
    
    # also works the other way, in case you were worried:
    assert pytest.approx(2.3, 0.1) == 2.2
    # passes