Skip to content

Commit 2ce24b6

Browse files
committed
add delta argument to assert_almost_equal
Fixes #1
1 parent f1336d7 commit 2ce24b6

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

asserts.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,21 @@ def assert_not_equal(first, second, msg=None):
7272
fail(msg or "{!r} == {!r}".format(first, second))
7373

7474

75-
def assert_almost_equal(first, second, places=7, msg=None):
75+
def assert_almost_equal(first, second, places=None, msg=None, delta=None):
7676
"""Fail if the two objects are unequal when rounded."""
77-
if round(second - first, places):
78-
fail(msg or "{!r} != {!r} within {} places".format(first, second,
79-
places))
77+
if delta is not None and places is not None:
78+
raise TypeError("'places' and 'delta' are mutually exclusive")
79+
if delta is not None:
80+
diff = second - first
81+
success = diff < delta
82+
detail_msg = "with delta={}".format(delta)
83+
else:
84+
if places is None:
85+
places = 7
86+
success = not round(second - first, places)
87+
detail_msg = "within {} places".format(places)
88+
if not success:
89+
fail(msg or "{!r} != {!r} ".format(first, second) + detail_msg)
8090

8191

8292
def assert_regex(text, regex, msg=None):

test_asserts.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,13 +180,27 @@ def test_assert_not_equal__equal__custom_message(self):
180180
def test_assert_almost_equal__same(self):
181181
assert_almost_equal(5, 5)
182182

183-
def test_assert_almost_equal__similar(self):
183+
def test_assert_almost_equal__similar__defaults(self):
184+
assert_almost_equal(5, 5.00000001)
185+
186+
def test_assert_almost_equal__similar__places(self):
184187
assert_almost_equal(5, 5.0001, places=3)
185188

189+
def test_assert_almost_equal__similar__delta(self):
190+
assert_almost_equal(5, 5.001, delta=0.1)
191+
186192
def test_assert_almost_equal__not_similar__default_message(self):
187193
with _assert_raises_assertion("5 != 5.0001 within 7 places"):
188194
assert_almost_equal(5, 5.0001)
189195

196+
def test_assert_almost_equal__not_similar__places__default_message(self):
197+
with _assert_raises_assertion("5 != 6 within 3 places"):
198+
assert_almost_equal(5, 6, places=3)
199+
200+
def test_assert_almost_equal__not_similar__delta__default_message(self):
201+
with _assert_raises_assertion("5 != 6 with delta=0.1"):
202+
assert_almost_equal(5, 6, delta=0.1)
203+
190204
def test_assert_almost_equal__not_similar__custom_message(self):
191205
with _assert_raises_assertion("test message"):
192206
assert_almost_equal(5, -5, msg="test message")
@@ -199,6 +213,14 @@ def test_assert_almost_equal__wrong_types(self):
199213
else:
200214
raise AssertionError("TypeError not raised")
201215

216+
def test_assert_almost_equal__places_and_delta(self):
217+
try:
218+
assert_almost_equal(5, 5, places=3, delta=0.0003)
219+
except TypeError:
220+
pass
221+
else:
222+
raise AssertionError("TypeError not raised")
223+
202224
def test_assert_regex__matches_string(self):
203225
assert_regex("This is a test text", "is.*test")
204226

0 commit comments

Comments
 (0)