From c7b076928c8d3316f6426a49c9d33ce14c0eaaee Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 29 Dec 2002 17:59:24 +0000 Subject: 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. --- Doc/lib/libunittest.tex | 24 ++++++++++++++++++++++++ Lib/unittest.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/Doc/lib/libunittest.tex b/Doc/lib/libunittest.tex index b1c0918..2d710e8 100644 --- a/Doc/lib/libunittest.tex +++ b/Doc/lib/libunittest.tex @@ -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 diff --git a/Lib/unittest.py b/Lib/unittest.py index 9100a78..31d9cb4 100644 --- a/Lib/unittest.py +++ b/Lib/unittest.py @@ -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 -- cgit v0.12