There's some NumPy tests that use a class derived from
unittest.TestCase to contain a set of tests that need to be run on multiple types, and then inherit from that class to implement the generic test, like this:
class LinalgTestCase(NumpyTestCase):
def test_single(self):
a = array([[1.,2.], [3.,4.]], dtype=single)
b = array([2., 1.], dtype=single)
self.do(a, b)
def test_double(self):
a = array([[1.,2.], [3.,4.]], dtype=double)
b = array([2., 1.], dtype=double)
self.do(a, b)
class test_inv(LinalgTestCase):
def do(self, a, b):
a_inv = linalg.inv(a)
assert_almost_equal(dot(a, a_inv), identity(a.shape[0]))
It seems that
nose wants to run the
LinalgTestCase class directly, since it's derived from
TestCase, which of course raises silly errors. So for the time being I'm using the
__test__ attribute to force nose to run the correct class:
class LinalgTestCase(NumpyTestCase):
__test__ = False
def test_single(self):
a = array([[1.,2.], [3.,4.]], dtype=single)
b = array([2., 1.], dtype=single)
self.do(a, b)
def test_double(self):
a = array([[1.,2.], [3.,4.]], dtype=double)
b = array([2., 1.], dtype=double)
self.do(a, b)
class test_inv(LinalgTestCase):
__test__ = True
def do(self, a, b):
a_inv = linalg.inv(a)
assert_almost_equal(dot(a, a_inv), identity(a.shape[0]))
This seems like an ugly way to make the tests run properly, but it works for the moment. If I can find a prettier method later I'll switch to it.