Skip to content

Commit

Permalink
Cleanup and expand tests test cases.
Browse files Browse the repository at this point in the history
  • Loading branch information
parejkoj committed Aug 18, 2016
1 parent ea54b8c commit 69675b6
Showing 1 changed file with 112 additions and 55 deletions.
167 changes: 112 additions & 55 deletions tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
# see <http://www.lsstcorp.org/LegalNotices/>.
#
import unittest
import numpy
import numpy as np

import lsst.utils.tests

Expand All @@ -32,88 +32,145 @@

class UtilsTestCase(lsst.utils.tests.TestCase):
def setUp(self):
self.a = numpy.zeros((5, 5), dtype=float)
self.b = numpy.zeros((5, 5), dtype=float)
self.large = 100.
self.epsilon = 1e-8
self.zeros = np.zeros((5, 5), dtype=float)
self.zeros2 = np.zeros((5, 5), dtype=float)
self.epsilons = np.zeros((5, 5), dtype=float) + self.epsilon
self.larges = np.zeros((5, 5), dtype=float) + self.large
self.larges2 = np.zeros((5, 5), dtype=float) + self.large
self.largesOneOff = self.larges.copy()
self.largesOneOff[0] += self.epsilon
self.largesEpsilon = np.zeros((5, 5), dtype=float) + self.large + self.epsilon
self.ranges = np.arange(-12., 13.).reshape(5, 5)
self.rangesEpsilon = self.ranges.copy()
self.rangesEpsilon += np.linspace(-1E-4, 1E-4, 5.)

def test_assertFloatsAlmostEqual(self):
# zero scalar tests
self.assertFloatsAlmostEqual(0.0, 0.0)
self.assertFloatsAlmostEqual(0.0, 1E-8, atol=1E-7)
self.assertFloatsAlmostEqual(0.0, 1E-8, atol=1E-7, rtol=None)
self.assertFloatsAlmostEqual(0.0, 1E-8, atol=None, rtol=1E-5, relTo=1E-2)

self.assertFloatsAlmostEqual(100, 100 + 1E-8, rtol=1E-7)
self.assertFloatsAlmostEqual(100, 100 + 1E-8, rtol=1E-7, atol=None)
self.assertFloatsAlmostEqual(100, 100 + 1E-8, rtol=1E-7, relTo=100.0)
# zero array vs. scalar tests
self.assertFloatsAlmostEqual(self.zeros, 0.)
self.assertFloatsAlmostEqual(self.zeros, self.epsilon, atol=1E-7)
self.assertFloatsAlmostEqual(self.zeros, self.epsilon, atol=1E-7, rtol=None)
self.assertFloatsAlmostEqual(self.zeros, self.epsilon, atol=None, rtol=1E-5, relTo=1E-2)

# zero array vs. array tests
self.assertFloatsAlmostEqual(self.zeros, self.zeros2)
self.assertFloatsAlmostEqual(self.zeros, self.zeros2, rtol=None)
self.assertFloatsAlmostEqual(self.zeros, self.zeros2, atol=None)
self.assertFloatsAlmostEqual(self.zeros, self.epsilons, atol=1E-7)
self.assertFloatsAlmostEqual(self.zeros, self.epsilons, atol=1E-7, rtol=None)
self.assertFloatsAlmostEqual(self.zeros, self.epsilons, atol=None, rtol=1E-5, relTo=1E-2)

# invalid value tests
with self.assertRaises(ValueError):
self.assertFloatsAlmostEqual(self.zeros, self.zeros2, atol=None, rtol=None)

# non-zero scalar tests
self.assertFloatsAlmostEqual(self.large, 100.)
self.assertFloatsAlmostEqual(self.large, self.large + self.epsilon, rtol=1E-7)
self.assertFloatsAlmostEqual(self.large, self.large + self.epsilon, rtol=1E-7, atol=None)
self.assertFloatsAlmostEqual(self.large, self.large + self.epsilon, rtol=1E-7, relTo=100.0)

# Non-zero array vs. scalar tests
self.assertFloatsAlmostEqual(self.larges, self.large)
self.assertFloatsAlmostEqual(self.larges, self.large + self.epsilon, rtol=1E-7)
self.assertFloatsAlmostEqual(self.larges, self.large + self.epsilon, rtol=1E-7, atol=None)
self.assertFloatsAlmostEqual(self.larges, self.large + self.epsilon, rtol=1E-7, relTo=100.0)

# Non-zero array vs. array tests
self.assertFloatsAlmostEqual(self.larges, self.larges2)
self.assertFloatsAlmostEqual(self.larges, self.largesEpsilon, rtol=1E-7)
self.assertFloatsAlmostEqual(self.larges, self.largesEpsilon, rtol=1E-7, atol=None)
self.assertFloatsAlmostEqual(self.larges, self.largesEpsilon, rtol=1E-7, relTo=100.0)
self.assertFloatsAlmostEqual(self.larges, self.largesOneOff, atol=1e-7)
self.assertFloatsAlmostEqual(self.ranges, self.rangesEpsilon, rtol=1E-3, atol=1E-4)

self.assertFloatsAlmostEqual(self.a, self.b)
self.assertFloatsAlmostEqual(self.a, self.b, rtol=None)
self.assertFloatsAlmostEqual(self.a, self.b, atol=None)
self.assertRaises(ValueError, self.assertFloatsAlmostEqual, self.a, self.b, atol=None, rtol=None)

self.b[:, :] = 1E-8
self.assertFloatsNotEqual(self.a, self.b, atol=1E-9)
self.assertFloatsNotEqual(self.a, self.b, atol=1E-9, rtol=None)
if display:
# should see failures on the center row of the 5x5 image, but not the very center point
nonzeroCenter = self.zeros.copy()
nonzeroCenter[2, :] = 1e-5
with self.assertRaises(AssertionError):
self.assertFloatsAlmostEqual(self.zeros, nonzeroCenter, rtol=1E-6, plotOnFailure=True)

self.a[:, :] = 100.0
self.b[:, :] = 100.0 + 1E-8
self.assertFloatsNotEqual(self.a, self.b, rtol=1E-12)
self.assertFloatsNotEqual(self.a, self.b, rtol=1E-12, atol=None)
self.assertFloatsNotEqual(self.a, self.b, rtol=1E-12, relTo=100.0)
with self.assertRaises(AssertionError) as cm:
self.assertFloatsAlmostEqual(10, 0, msg="This is an error message.")
self.assertIn("This is an error message.", str(cm.exception))
self.assertIn("10 != 0; diff=10/10=1.0 with rtol=", str(cm.exception))

def test_assertFloatsNotEqual(self):
# zero scalar tests
self.assertFloatsNotEqual(0.0, 1.0)
self.assertFloatsNotEqual(0.0, 1E-8, atol=1E-9)
self.assertFloatsNotEqual(0.0, 1E-8, atol=1E-9, rtol=None)
self.assertFloatsNotEqual(0.0, 1E-8, atol=None, rtol=1E-7, relTo=1E-2)

self.assertFloatsNotEqual(100, 100 + 1E-8, rtol=1E-12)
self.assertFloatsNotEqual(100, 100 + 1E-8, rtol=1E-12, atol=None)
self.assertFloatsNotEqual(100, 100 + 1E-8, rtol=1E-12, relTo=100.0)

self.b[:, :] = 1E-8
self.assertFloatsAlmostEqual(self.a, self.b, atol=1E-7)
self.assertFloatsAlmostEqual(self.a, 1E-8, atol=1E-7)
self.assertFloatsAlmostEqual(self.a, self.b, atol=1E-7, rtol=None)

self.a[:, :] = 100.0
self.b[:, :] = 100.0 + 1E-8
self.assertFloatsAlmostEqual(self.a, self.b, rtol=1E-7)
self.assertFloatsAlmostEqual(self.a, 100.0 + 1E-8, rtol=1E-7)
self.assertFloatsAlmostEqual(self.a, self.b, rtol=1E-7, atol=None)
self.assertFloatsAlmostEqual(self.a, self.b, rtol=1E-7, relTo=100.0)
self.a[:, :] = numpy.arange(-12, 13).reshape(5, 5)
self.b[:, :] = self.a
self.b[2, :] += numpy.linspace(-1E-4, 1E-4, 5)
self.assertFloatsAlmostEqual(self.a, self.b, rtol=1E-3, atol=1E-4)
# zero array vs. scalar tests
self.assertFloatsNotEqual(self.zeros, 1.)
self.assertFloatsNotEqual(self.zeros, self.epsilon, atol=1E-9)
self.assertFloatsNotEqual(self.zeros, self.epsilon, atol=1E-9, rtol=None)
self.assertFloatsNotEqual(self.zeros, self.epsilon, atol=None, rtol=1E-7, relTo=1E-2)

# zero array vs. array tests
self.assertFloatsNotEqual(self.zeros, self.larges)
self.assertFloatsNotEqual(self.zeros, self.epsilon, atol=1E-9, rtol=None)
self.assertFloatsNotEqual(self.zeros, self.epsilon, atol=None, rtol=1e-5, relTo=1e-5)
self.assertFloatsNotEqual(self.zeros, self.epsilons, atol=1E-9)
self.assertFloatsNotEqual(self.zeros, self.epsilons, atol=1E-9, rtol=None)
self.assertFloatsNotEqual(self.zeros, self.epsilons, atol=None, rtol=1E-7, relTo=1E-2)

# invalid value tests
with self.assertRaises(ValueError):
self.assertFloatsNotEqual(self.zeros, self.zeros2, atol=None, rtol=None)

# non-zero scalar tests
self.assertFloatsNotEqual(self.large, 1.)
self.assertFloatsNotEqual(self.large, self.large + self.epsilon, atol=1E-9)
self.assertFloatsNotEqual(self.large, self.large + self.epsilon, rtol=1E-11, atol=None)
self.assertFloatsNotEqual(self.large, self.large + self.epsilon, rtol=1E-12, relTo=1.)

# Non-zero array vs. scalar tests
self.assertFloatsNotEqual(self.larges, self.large + self.epsilon, atol=1e-9)
self.assertFloatsNotEqual(self.larges, self.large + self.epsilon, atol=1e-9, rtol=None)
self.assertFloatsNotEqual(self.larges, self.large + self.epsilon, rtol=1E-11, atol=None)
self.assertFloatsNotEqual(self.larges, self.large + self.epsilon, rtol=1E-12, relTo=1.)

# Non-zero array vs. array tests
self.assertFloatsNotEqual(self.larges, self.zeros)
self.assertFloatsNotEqual(self.larges, self.largesEpsilon, rtol=1E-12)
self.assertFloatsNotEqual(self.larges, self.largesEpsilon, rtol=1E-12, atol=None)
self.assertFloatsNotEqual(self.larges, self.largesEpsilon, rtol=1E-11, relTo=100.0)
self.assertFloatsNotEqual(self.larges, self.largesOneOff, atol=1e-9)
self.assertFloatsNotEqual(self.larges, self.largesOneOff, atol=1e-9, rtol=None)
self.assertFloatsNotEqual(self.ranges, self.rangesEpsilon)

with self.assertRaises(AssertionError) as cm:
self.assertFloatsAlmostEqual(-1., 0, msg="This is an error message.")
self.assertFloatsNotEqual(10, 10, msg="This is an error message.")
self.assertIn("This is an error message.", str(cm.exception))

if display:
# should see failures on the center row of the 5x5 image, but not the very center point
self.assertFloatsAlmostEqual(self.a, self.b, rtol=1E-6, plotOnFailure=True)
self.assertIn("10 == 10; diff=0/10=0.0 with rtol=", str(cm.exception))

def test_assertFloatsEqual(self):
self.assertFloatsEqual(0, 0)
self.assertFloatsEqual(0., 0.)
self.assertFloatsEqual(1, 1)
self.assertFloatsEqual(1., 1.)
self.assertFloatsEqual(self.a, self.b)
self.assertFloatsEqual(self.a, 0)
self.assertFloatsEqual(self.a, 0)
self.a[:, :] = 5.
self.assertFloatsEqual(self.a, 5)
self.assertFloatsEqual(self.a, 5.)
self.assertFloatsEqual(self.zeros, self.zeros2)
self.assertFloatsEqual(self.zeros, 0)
self.assertFloatsEqual(self.zeros, 0.)
self.assertFloatsEqual(self.larges, self.large)
with self.assertRaises(AssertionError):
self.assertFloatsEqual(self.a, 0)
self.assertFloatsEqual(self.larges, 0.)
with self.assertRaises(AssertionError):
self.assertFloatsEqual(self.a, 0.)
self.assertFloatsEqual(self.larges, self.largesEpsilon)
with self.assertRaises(AssertionError):
self.assertFloatsEqual(self.a, self.b)
self.b[:, :] = 5
self.b[2, :] += 1e-9
self.assertFloatsEqual(self.larges, self.zeros)
with self.assertRaises(AssertionError):
self.assertFloatsEqual(self.a, self.b)
self.assertFloatsEqual(self.larges, self.largesEpsilon)


class TestMemory(lsst.utils.tests.MemoryTestCase):
Expand Down

0 comments on commit 69675b6

Please sign in to comment.