[Python-Dev] Optional delta argument for assertAlmostEqual (original) (raw)

Steven D'Aprano steve at pearwood.info
Sun Mar 28 09:06:06 CEST 2010


On Sun, 28 Mar 2010 02:54:19 pm Charles McCreary wrote:

Perhaps not just absolute but relative tolerance, e.g.:

def isclose(x, y, rtol=1.e-5, atol=1.e-8): return abs(x-y) <= atol + rtol * abs(y)

I'm not sure why you add the tolerances like that. Surely a more appropriate approach is to compare the values against the tolerances individually, and return True if they meet either condition.

For what it's worth, here's a recipe I wrote for approximately equal, following someone's complaint on comp.lang.python that Python has no approximately-equal operator.

http://code.activestate.com/recipes/577124-approximately-equal/

Comments and criticism welcome.

I've never found unittest.TestCase.assertAlmostEqual to be useful. I generally write my own comparison function, then call:

assert_(compare(x, y))

as needed. I'm +0.5 on Michael's suggested change -- it will make assertAlmostEqual marginally more useful, which is a plus, but I'm not sure that absolute tolerances are better than relative. But how general do we want to be? "Almost equal" means something different to everyone.

On Fri, Mar 26, 2010 at 7:59 PM, Michael Foord <fuzzyman at voidspace.org.uk>wrote: > Hello all, > > A user has suggested an optional argument to > unittest.TestCase.assertAlmostEqual for specifying a maximum > difference between the expected and actual values, instead of using > rounding. [snip]

-- Steven D'Aprano



More information about the Python-Dev mailing list