improve CoreResampleAccuracy test. Use all bands configurations

This commit is contained in:
homm 2016-05-27 07:09:49 +03:00
parent 8180b0f4c3
commit a1b12f792a

View File

@ -35,7 +35,7 @@ class TestImagingResampleVulnerability(PillowTestCase):
class TestImagingCoreResampleAccuracy(PillowTestCase): class TestImagingCoreResampleAccuracy(PillowTestCase):
def make_case(self, size, color): def make_case(self, mode, size, color):
"""Makes a sample image with two dark and two bright squares. """Makes a sample image with two dark and two bright squares.
For example: For example:
e0 e0 1f 1f e0 e0 1f 1f
@ -50,7 +50,7 @@ class TestImagingCoreResampleAccuracy(PillowTestCase):
rectangle = ImageDraw.Draw(i).rectangle rectangle = ImageDraw.Draw(i).rectangle
rectangle((0, 0, size[0] // 2 - 1, size[1] // 2 - 1), bright) rectangle((0, 0, size[0] // 2 - 1, size[1] // 2 - 1), bright)
rectangle((size[0] // 2, size[1] // 2, size[0], size[1]), bright) rectangle((size[0] // 2, size[1] // 2, size[0], size[1]), bright)
return i return i.convert(mode)
def make_sample(self, data, size): def make_sample(self, data, size):
"""Restores a sample image from given data string which contains """Restores a sample image from given data string which contains
@ -70,17 +70,16 @@ class TestImagingCoreResampleAccuracy(PillowTestCase):
return sample return sample
def check_case(self, case, sample): def check_case(self, case, sample):
for channel in case.split(): s_px = sample.load()
s_px = sample.load() c_px = case.load()
c_px = channel.load() for y in range(case.size[1]):
for y in range(case.size[1]): for x in range(case.size[0]):
for x in range(case.size[0]): if c_px[x, y] != s_px[x, y]:
if c_px[x, y] != s_px[x, y]: message = '\nHave: \n{}\n\nExpected: \n{}'.format(
message = '\nHave: \n{}\n\nExpected: \n{}'.format( self.serialize_image(case),
self.serialize_image(channel), self.serialize_image(sample),
self.serialize_image(sample), )
) self.assertEqual(s_px[x, y], c_px[x, y], message)
self.assertEqual(s_px[x, y], c_px[x, y], message)
def serialize_image(self, image): def serialize_image(self, image):
s_px = image.load() s_px = image.load()
@ -93,61 +92,67 @@ class TestImagingCoreResampleAccuracy(PillowTestCase):
) )
def test_reduce_bilinear(self): def test_reduce_bilinear(self):
case = self.make_case((8, 8), 0xe1) for mode in ['RGBX', 'RGB', 'L']:
data = ('e1 c9' case = self.make_case(mode, (8, 8), 0xe1)
'c9 b7') case = case.resize((4, 4), Image.BILINEAR)
self.check_case( data = ('e1 c9'
case.resize((4, 4), Image.BILINEAR), 'c9 b7')
self.make_sample(data, (4, 4))) for channel in case.split():
self.check_case(channel, self.make_sample(data, (4, 4)))
def test_reduce_bicubic(self): def test_reduce_bicubic(self):
case = self.make_case((12, 12), 0xe1) for mode in ['RGBX', 'RGB', 'L']:
data = ('e1 e3 d4' case = self.make_case(mode, (12, 12), 0xe1)
'e3 e5 d6' case = case.resize((6, 6), Image.BICUBIC)
'd4 d6 c9') data = ('e1 e3 d4'
self.check_case( 'e3 e5 d6'
case.resize((6, 6), Image.BICUBIC), 'd4 d6 c9')
self.make_sample(data, (6, 6))) for channel in case.split():
self.check_case(channel, self.make_sample(data, (6, 6)))
def test_reduce_lanczos(self): def test_reduce_lanczos(self):
case = self.make_case((16, 16), 0xe1) for mode in ['RGBX', 'RGB', 'L']:
data = ('e1 e0 e4 d7' case = self.make_case(mode, (16, 16), 0xe1)
'e0 df e3 d6' case = case.resize((8, 8), Image.LANCZOS)
'e4 e3 e7 da' data = ('e1 e0 e4 d7'
'd7 d6 d9 ce') 'e0 df e3 d6'
self.check_case( 'e4 e3 e7 da'
case.resize((8, 8), Image.LANCZOS), 'd7 d6 d9 ce')
self.make_sample(data, (8, 8))) for channel in case.split():
self.check_case(channel, self.make_sample(data, (8, 8)))
def test_enlarge_bilinear(self): def test_enlarge_bilinear(self):
case = self.make_case((2, 2), 0xe1) for mode in ['RGBX', 'RGB', 'L']:
data = ('e1 b0' case = self.make_case(mode, (2, 2), 0xe1)
'b0 98') case = case.resize((4, 4), Image.BILINEAR)
self.check_case( data = ('e1 b0'
case.resize((4, 4), Image.BILINEAR), 'b0 98')
self.make_sample(data, (4, 4))) for channel in case.split():
self.check_case(channel, self.make_sample(data, (4, 4)))
def test_enlarge_bicubic(self): def test_enlarge_bicubic(self):
case = self.make_case((4, 4), 0xe1) for mode in ['RGBX', 'RGB', 'L']:
data = ('e1 e5 ee b9' case = self.make_case(mode, (4, 4), 0xe1)
'e5 e9 f3 bc' case = case.resize((8, 8), Image.BICUBIC)
'ee f3 fd c1' data = ('e1 e5 ee b9'
'b9 bc c1 a2') 'e5 e9 f3 bc'
self.check_case( 'ee f3 fd c1'
case.resize((8, 8), Image.BICUBIC), 'b9 bc c1 a2')
self.make_sample(data, (8, 8))) for channel in case.split():
self.check_case(channel, self.make_sample(data, (8, 8)))
def test_enlarge_lanczos(self): def test_enlarge_lanczos(self):
case = self.make_case((6, 6), 0xe1) for mode in ['RGBX', 'RGB', 'L']:
data = ('e1 e0 db ed f5 b8' case = self.make_case(mode, (6, 6), 0xe1)
'e0 df da ec f3 b7' case = case.resize((12, 12), Image.LANCZOS)
'db db d6 e7 ee b5' data = ('e1 e0 db ed f5 b8'
'ed ec e6 fb ff bf' 'e0 df da ec f3 b7'
'f5 f4 ee ff ff c4' 'db db d6 e7 ee b5'
'b8 b7 b4 bf c4 a0') 'ed ec e6 fb ff bf'
self.check_case( 'f5 f4 ee ff ff c4'
case.resize((12, 12), Image.LANCZOS), 'b8 b7 b4 bf c4 a0')
self.make_sample(data, (12, 12))) for channel in case.split():
self.check_case(channel, self.make_sample(data, (12, 12)))
class CoreResampleConsistencyTest(PillowTestCase): class CoreResampleConsistencyTest(PillowTestCase):