Incorporate Skip's suggestion to use SciPy's validation test near

equality.  Note, there is another flavor that compares to a given
number of significant digits rather than decimal places.  If there
is a demand, that could be added at a later date.
This commit is contained in:
Raymond Hettinger 2002-12-29 17:59:24 +00:00
parent 3c736f1a41
commit c7b076928c
2 changed files with 52 additions and 0 deletions

View File

@ -501,6 +501,30 @@ report failures.
\var{second}.
\end{methoddesc}
\begin{methoddesc}[TestCase]{assertAlmostEqual}{first, second\optional{,
places\optional{, msg}}}
\methodline{failUnlessAlmostEqual}{first, second\optional{,
places\optional{, msg}}}
Test that \var{first} and \var{second} are approximately equal
by computing the difference, rounding to the given number of \var{places},
and comparing to zero. Note that comparing a given number of decimal places
is not the same as comparing a given number of significant digits.
If the values do not compare equal, the test will fail with the explanation
given by \var{msg}, or \code{None}.
\end{methoddesc}
\begin{methoddesc}[TestCase]{assertNotAlmostEqual}{first, second\optional{,
places\optional{, msg}}}
\methodline{failIfAlmostEqual}{first, second\optional{,
places\optional{, msg}}}
Test that \var{first} and \var{second} are not approximately equal
by computing the difference, rounding to the given number of \var{places},
and comparing to zero. Note that comparing a given number of decimal places
is not the same as comparing a given number of significant digits.
If the values do not compare equal, the test will fail with the explanation
given by \var{msg}, or \code{None}.
\end{methoddesc}
\begin{methoddesc}[TestCase]{assertRaises}{exception, callable, \moreargs}
\methodline{failUnlessRaises}{exception, callable, \moreargs}
Test that an exception is raised when \var{callable} is called with

View File

@ -300,10 +300,38 @@ class TestCase:
raise self.failureException, \
(msg or '%s == %s' % (`first`, `second`))
def failUnlessAlmostEqual(self, first, second, places=7, msg=None):
"""Fail if the two objects are unequal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero.
Note that decimal places (from zero) is usually not the same
as significant digits (measured from the most signficant digit).
"""
if round(second-first, places) != 0:
raise self.failureException, \
(msg or '%s != %s within %s places' % (`first`, `second`, `places` ))
def failIfAlmostEqual(self, first, second, places=7, msg=None):
"""Fail if the two objects are equal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero.
Note that decimal places (from zero) is usually not the same
as significant digits (measured from the most signficant digit).
"""
if round(second-first, places) == 0:
raise self.failureException, \
(msg or '%s == %s within %s places' % (`first`, `second`, `places`))
assertEqual = assertEquals = failUnlessEqual
assertNotEqual = assertNotEquals = failIfEqual
assertAlmostEqual = assertAlmostEquals = failUnlessAlmostEqual
assertNotAlmostEqual = assertNotAlmostEquals = failIfAlmostEqual
assertRaises = failUnlessRaises
assert_ = failUnless