summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorDavid Cournapeau <cournape@gmail.com>2009-07-27 08:07:48 +0000
committerDavid Cournapeau <cournape@gmail.com>2009-07-27 08:07:48 +0000
commite8b88c2d0529f2dac153e04537cf05d435a27a07 (patch)
tree5066d19d50bb9bb7c023d8f2c79a88e2f91940dd /numpy
parent56caa44161152ffd4f354757c8d4d42007413f79 (diff)
downloadnumpy-e8b88c2d0529f2dac153e04537cf05d435a27a07.tar.gz
BUG: handle nan/inf in assert_approx_equal.
Diffstat (limited to 'numpy')
-rw-r--r--numpy/testing/tests/test_utils.py56
-rw-r--r--numpy/testing/utils.py14
2 files changed, 70 insertions, 0 deletions
diff --git a/numpy/testing/tests/test_utils.py b/numpy/testing/tests/test_utils.py
index b8aaa4de4..fd07d3985 100644
--- a/numpy/testing/tests/test_utils.py
+++ b/numpy/testing/tests/test_utils.py
@@ -131,6 +131,15 @@ class TestArrayAlmostEqual(_GenericTest, unittest.TestCase):
def setUp(self):
self._assert_func = assert_array_almost_equal
+ def test_simple(self):
+ x = np.array([1234.2222])
+ y = np.array([1234.2223])
+
+ self._assert_func(x, y, decimal=3)
+ self._assert_func(x, y, decimal=4)
+ self.failUnlessRaises(AssertionError,
+ lambda: self._assert_func(x, y, decimal=5))
+
def test_nan(self):
anan = np.array([np.nan])
aone = np.array([1])
@@ -163,6 +172,53 @@ class TestAlmostEqual(_GenericTest, unittest.TestCase):
def test_simple_item(self):
self._test_not_equal(1, 2)
+class TestApproxEqual(unittest.TestCase):
+ def setUp(self):
+ self._assert_func = assert_approx_equal
+
+ def test_simple_arrays(self):
+ x = np.array([1234.22])
+ y = np.array([1234.23])
+
+ self._assert_func(x, y, significant=5)
+ self._assert_func(x, y, significant=6)
+ self.failUnlessRaises(AssertionError,
+ lambda: self._assert_func(x, y, significant=7))
+
+ def test_simple_items(self):
+ x = 1234.22
+ y = 1234.23
+
+ self._assert_func(x, y, significant=4)
+ self._assert_func(x, y, significant=5)
+ self._assert_func(x, y, significant=6)
+ self.failUnlessRaises(AssertionError,
+ lambda: self._assert_func(x, y, significant=7))
+
+ def test_nan_array(self):
+ anan = np.array(np.nan)
+ aone = np.array(1)
+ ainf = np.array(np.inf)
+ self._assert_func(anan, anan)
+ self.failUnlessRaises(AssertionError,
+ lambda : self._assert_func(anan, aone))
+ self.failUnlessRaises(AssertionError,
+ lambda : self._assert_func(anan, ainf))
+ self.failUnlessRaises(AssertionError,
+ lambda : self._assert_func(ainf, anan))
+
+ def test_nan_items(self):
+ anan = np.array(np.nan)
+ aone = np.array(1)
+ ainf = np.array(np.inf)
+ self._assert_func(anan, anan)
+ self.failUnlessRaises(AssertionError,
+ lambda : self._assert_func(anan, aone))
+ self.failUnlessRaises(AssertionError,
+ lambda : self._assert_func(anan, ainf))
+ self.failUnlessRaises(AssertionError,
+ lambda : self._assert_func(ainf, anan))
+
class TestRaises(unittest.TestCase):
def setUp(self):
class MyException(Exception):
diff --git a/numpy/testing/utils.py b/numpy/testing/utils.py
index 9928bbb90..b3a9cebcf 100644
--- a/numpy/testing/utils.py
+++ b/numpy/testing/utils.py
@@ -384,6 +384,20 @@ def assert_approx_equal(actual,desired,significant=7,err_msg='',verbose=True):
header='Items are not equal to %d significant digits:' %
significant,
verbose=verbose)
+ try:
+ # If one of desired/actual is not finite, handle it specially here:
+ # check that both are nan if any is a nan, and test for equality
+ # otherwise
+ if not (gisfinite(desired) and gisfinite(actual)):
+ if gisnan(desired) or gisnan(actual):
+ if not (gisnan(desired) and gisnan(actual)):
+ raise AssertionError(msg)
+ else:
+ if not desired == actual:
+ raise AssertionError(msg)
+ return
+ except TypeError:
+ pass
if math.fabs(sc_desired - sc_actual) >= pow(10.,-(significant-1)) :
raise AssertionError(msg)