unittest: Add assertAlmostEqual and assertNotAlmostEqual

pull/44/head
Tom Soulanille 2015-08-30 21:44:41 -07:00 zatwierdzone przez Paul Sokolovsky
rodzic 316d960880
commit 729d5b6446
2 zmienionych plików z 82 dodań i 0 usunięć

Wyświetl plik

@ -14,6 +14,47 @@ class TestUnittestAssertions(unittest.TestCase):
with self.assertRaises(AssertionError):
self.assertEqual([0,1,2], [1,2,3])
def test_AlmostEqual(self):
self.assertAlmostEqual( 1.00000001, 1.0)
self.assertNotAlmostEqual( 1.0000001, 1.0)
with self.assertRaises(AssertionError):
self.assertAlmostEqual(1.0000001, 1.0)
with self.assertRaises(AssertionError):
self.assertNotAlmostEqual(1.00000001, 1.0)
self.assertAlmostEqual(1.1, 1.0, places=0)
with self.assertRaises(AssertionError):
self.assertAlmostEqual(1.1, 1.0, places=1)
self.assertAlmostEqual(0, .1+.1j, places=0)
self.assertNotAlmostEqual(0, .1+.1j, places=1)
with self.assertRaises(AssertionError):
self.assertAlmostEqual(0, .1+.1j, places=1)
with self.assertRaises(AssertionError):
self.assertNotAlmostEqual(0, .1+.1j, places=0)
self.assertAlmostEqual(float('inf'), float('inf'))
with self.assertRaises(AssertionError):
self.assertNotAlmostEqual(float('inf'), float('inf'))
def test_AmostEqualWithDelta(self):
self.assertAlmostEqual(1.1, 1.0, delta=0.5)
self.assertAlmostEqual(1.0, 1.1, delta=0.5)
self.assertNotAlmostEqual(1.1, 1.0, delta=0.05)
self.assertNotAlmostEqual(1.0, 1.1, delta=0.05)
self.assertAlmostEqual(1.0, 1.0, delta=0.5)
with self.assertRaises(AssertionError):
self.assertNotAlmostEqual(1.0, 1.0, delta=0.5)
with self.assertRaises(AssertionError):
self.assertAlmostEqual(1.1, 1.0, delta=0.05)
with self.assertRaises(AssertionError):
self.assertNotAlmostEqual(1.1, 1.0, delta=0.5)
with self.assertRaises(TypeError):
self.assertAlmostEqual(1.1, 1.0, places=2, delta=2)
with self.assertRaises(TypeError):
self.assertNotAlmostEqual(1.1, 1.0, places=2, delta=2)
def testNotEqual(self):
self.assertNotEqual([0,1,2], [0,2,1])
with self.assertRaises(AssertionError):

Wyświetl plik

@ -33,6 +33,46 @@ class TestCase:
msg = "%r not expected to be equal %r" % (x, y)
assert x != y, msg
def assertAlmostEqual(self, x, y, places=None, msg='', delta=None):
if x == y:
return
if delta is not None and places is not None:
raise TypeError("specify delta or places not both")
if delta is not None:
if abs(x - y) <= delta:
return
if not msg:
msg = '%r != %r within %r delta' % (x, y, delta)
else:
if places is None:
places = 7
if round(abs(y-x), places) == 0:
return
if not msg:
msg = '%r != %r within %r places' % (x, y, places)
assert False, msg
def assertNotAlmostEqual(self, x, y, places=None, msg='', delta=None):
if delta is not None and places is not None:
raise TypeError("specify delta or places not both")
if delta is not None:
if not (x == y) and abs(x - y) > delta:
return
if not msg:
msg = '%r == %r within %r delta' % (x, y, delta)
else:
if places is None:
places = 7
if not (x == y) and round(abs(y-x), places) != 0:
return
if not msg:
msg = '%r == %r within %r places' % (x, y, places)
assert False, msg
def assertIs(self, x, y, msg=''):
if not msg:
msg = "%r is not %r" % (x, y)
@ -74,6 +114,7 @@ class TestCase:
raise
def skip(msg):
def _decor(fun):
# We just replace original fun with _inner