refactoring slice protocol tests

This commit is contained in:
John Evans 2014-09-12 10:05:40 -04:00
commit 3adb09e6f4

View file

@ -52,74 +52,92 @@ def load_tests(loader, tests, ignore):
return tests return tests
class TestJp2k(unittest.TestCase): class TestSliceProtocol(unittest.TestCase):
"""These tests should be run by just about all configuration.""" """
Test slice protocol, i.e. when using [ ] to read image data.
"""
def setUp(self): def setUp(self):
self.jp2file = glymur.data.nemo() self.jp2file = glymur.data.nemo()
self.j2kfile = glymur.data.goodstuff() self.j2k = Jp2k(glymur.data.goodstuff())
self.jpxfile = glymur.data.jpxfile() self.jpxfile = glymur.data.jpxfile()
def tearDown(self): def tearDown(self):
pass pass
def test_slice_protocol_negative(self): def test_resolution_strides_cannot_differ(self):
"""
"""
j = Jp2k(self.j2kfile)
with self.assertRaises(IndexError): with self.assertRaises(IndexError):
# Strides in x/y directions cannot differ. # Strides in x/y directions cannot differ.
d = j[::2, ::3] self.j2k[::2, ::3]
def test_resolution_strides_must_be_powers_of_two(self):
with self.assertRaises(IndexError): with self.assertRaises(IndexError):
# Strides in x/y direction must be powers of 2. self.j2k[::3, ::3]
d = j[::3, ::3]
# start and stop are not supported when slicing on Jp2k object def test_start_and_resolution_stride_not_allowed_at_same_time(self):
with self.assertRaises(IndexError): with self.assertRaises(IndexError):
d = j[2::2, 2::2] self.j2k[2::2, 2::2]
with self.assertRaises(IndexError):
d = j[:8:2, :8:2]
with self.assertRaises(IndexError):
d = j[2:8:2, 2:8:2]
def test_slice_protocol_3d(self): def test_stop_and_resolution_stride_not_allowed_at_same_time(self):
""" with self.assertRaises(IndexError):
""" self.j2k[:8:2, :8:2]
j = Jp2k(self.j2kfile)
all = j.read()
d = j[:,:,0] def test_integer_index_in_3d(self):
all = self.j2k.read()
d = self.j2k[:,:,0]
np.testing.assert_array_equal(all[:,:,0], d) np.testing.assert_array_equal(all[:,:,0], d)
d = j[:,:,1] d = self.j2k[:,:,1]
np.testing.assert_array_equal(all[:,:,1], d) np.testing.assert_array_equal(all[:,:,1], d)
d = j[:,:,2] d = self.j2k[:,:,2]
np.testing.assert_array_equal(all[:,:,2], d) np.testing.assert_array_equal(all[:,:,2], d)
d = j[:,:,1:3] def test_slice_in_third_dimension(self):
all = self.j2k.read()
d = self.j2k[:,:,1:3]
np.testing.assert_array_equal(all[:,:,1:3], d) np.testing.assert_array_equal(all[:,:,1:3], d)
d = j[::2, ::2, 1:3] def test_reduce_resolution_and_slice_in_third_dimension(self):
d = self.j2k[::2, ::2, 1:3]
all = j.read(rlevel=1) all = j.read(rlevel=1)
np.testing.assert_array_equal(all[:,:,1:3], d) np.testing.assert_array_equal(all[:,:,1:3], d)
def test_slice_protocol_2d(self): def test_full_resolution_upper_left_quarter(self):
""" all = self.jp2[:]
""" d = j[:728, :1296]
j = Jp2k(self.j2kfile) np.testing.assert_array_equal(all[:728, :1296], d)
d = j[:] def test_full_resolution_lower_left_quarter(self):
all = self.jp2[:]
d = j[728:, :1296]
np.testing.assert_array_equal(all[728:, :1296], d)
def test_full_resolution_upper_right_quarter(self):
"""
Slice protocol should work when not reducing resolution.
"""
all = j[:]
d = j[:728, 1296:]
np.testing.assert_array_equal(all[:728, 1296:], d)
def test_full_resolution_lower_right_quarter(self):
all = j[:]
d = j[728:, 1296:]
np.testing.assert_array_equal(all[728:, :1296:], d)
def test_slice_protocol_2d_reduce_resolution(self):
d = self.j2k[:]
self.assertEqual(d.shape, (800, 480, 3)) self.assertEqual(d.shape, (800, 480, 3))
# Stride of one.
d = j[::1, ::1] d = j[::1, ::1]
self.assertEqual(d.shape, (800, 480, 3)) self.assertEqual(d.shape, (800, 480, 3))
# Stride of 2.
d = j[::2, ::2] d = j[::2, ::2]
self.assertEqual(d.shape, (400, 240, 3)) self.assertEqual(d.shape, (400, 240, 3))
@ -135,6 +153,18 @@ class TestJp2k(unittest.TestCase):
d = j[::32, ::32] d = j[::32, ::32]
self.assertEqual(d.shape, (25, 15, 3)) self.assertEqual(d.shape, (25, 15, 3))
class TestJp2k(unittest.TestCase):
"""These tests should be run by just about all configuration."""
def setUp(self):
self.jp2file = glymur.data.nemo()
self.j2kfile = glymur.data.goodstuff()
self.jpxfile = glymur.data.jpxfile()
def tearDown(self):
pass
@unittest.skipIf(os.name == "nt", "Unexplained failure on windows") @unittest.skipIf(os.name == "nt", "Unexplained failure on windows")
def test_irreversible(self): def test_irreversible(self):
"""Irreversible""" """Irreversible"""