From 07aa1a56bbddd79128a81584eb0ec8f903c5192f Mon Sep 17 00:00:00 2001 From: hugovk Date: Thu, 5 Jun 2014 15:31:22 +0300 Subject: [PATCH] Save test_cffi for another day --- Tests/test_cffi.py | 99 ++++++++++++++++++++++++++++++ Tests/test_image_getpixel.py | 49 +++++++++++++++ Tests/test_image_putpixel.py | 45 ++++++++++++++ test/test_cffi.py | 113 ----------------------------------- test/test_image_getpixel.py | 54 ----------------- test/test_image_putpixel.py | 50 ---------------- 6 files changed, 193 insertions(+), 217 deletions(-) create mode 100644 Tests/test_cffi.py create mode 100644 Tests/test_image_getpixel.py create mode 100644 Tests/test_image_putpixel.py delete mode 100644 test/test_cffi.py delete mode 100644 test/test_image_getpixel.py delete mode 100644 test/test_image_putpixel.py diff --git a/Tests/test_cffi.py b/Tests/test_cffi.py new file mode 100644 index 000000000..1c0d8d31e --- /dev/null +++ b/Tests/test_cffi.py @@ -0,0 +1,99 @@ +from tester import * + +try: + import cffi +except: + skip() + +from PIL import Image, PyAccess + +import test_image_putpixel as put +import test_image_getpixel as get + + +Image.USE_CFFI_ACCESS = True + +def test_put(): + put.test_sanity() + +def test_get(): + get.test_basic() + get.test_signedness() + +def _test_get_access(im): + """ Do we get the same thing as the old pixel access """ + + """ Using private interfaces, forcing a capi access and a pyaccess for the same image """ + caccess = im.im.pixel_access(False) + access = PyAccess.new(im, False) + + w,h = im.size + for x in range(0,w,10): + for y in range(0,h,10): + assert_equal(access[(x,y)], caccess[(x,y)]) + +def test_get_vs_c(): + _test_get_access(lena('RGB')) + _test_get_access(lena('RGBA')) + _test_get_access(lena('L')) + _test_get_access(lena('LA')) + _test_get_access(lena('1')) + _test_get_access(lena('P')) + #_test_get_access(lena('PA')) # PA -- how do I make a PA image??? + _test_get_access(lena('F')) + + im = Image.new('I;16', (10,10), 40000) + _test_get_access(im) + im = Image.new('I;16L', (10,10), 40000) + _test_get_access(im) + im = Image.new('I;16B', (10,10), 40000) + _test_get_access(im) + + im = Image.new('I', (10,10), 40000) + _test_get_access(im) + # These don't actually appear to be modes that I can actually make, + # as unpack sets them directly into the I mode. + #im = Image.new('I;32L', (10,10), -2**10) + #_test_get_access(im) + #im = Image.new('I;32B', (10,10), 2**10) + #_test_get_access(im) + + + +def _test_set_access(im, color): + """ Are we writing the correct bits into the image? """ + + """ Using private interfaces, forcing a capi access and a pyaccess for the same image """ + caccess = im.im.pixel_access(False) + access = PyAccess.new(im, False) + + w,h = im.size + for x in range(0,w,10): + for y in range(0,h,10): + access[(x,y)] = color + assert_equal(color, caccess[(x,y)]) + +def test_set_vs_c(): + _test_set_access(lena('RGB'), (255, 128,0) ) + _test_set_access(lena('RGBA'), (255, 192, 128, 0)) + _test_set_access(lena('L'), 128) + _test_set_access(lena('LA'), (128,128)) + _test_set_access(lena('1'), 255) + _test_set_access(lena('P') , 128) + ##_test_set_access(i, (128,128)) #PA -- undone how to make + _test_set_access(lena('F'), 1024.0) + + im = Image.new('I;16', (10,10), 40000) + _test_set_access(im, 45000) + im = Image.new('I;16L', (10,10), 40000) + _test_set_access(im, 45000) + im = Image.new('I;16B', (10,10), 40000) + _test_set_access(im, 45000) + + + im = Image.new('I', (10,10), 40000) + _test_set_access(im, 45000) +# im = Image.new('I;32L', (10,10), -(2**10)) +# _test_set_access(im, -(2**13)+1) + #im = Image.new('I;32B', (10,10), 2**10) + #_test_set_access(im, 2**13-1) diff --git a/Tests/test_image_getpixel.py b/Tests/test_image_getpixel.py new file mode 100644 index 000000000..da3d8115e --- /dev/null +++ b/Tests/test_image_getpixel.py @@ -0,0 +1,49 @@ +from tester import * + +from PIL import Image + +Image.USE_CFFI_ACCESS=False + +def color(mode): + bands = Image.getmodebands(mode) + if bands == 1: + return 1 + else: + return tuple(range(1, bands+1)) + + + +def check(mode, c=None): + if not c: + c = color(mode) + + #check putpixel + im = Image.new(mode, (1, 1), None) + im.putpixel((0, 0), c) + assert_equal(im.getpixel((0, 0)), c, + "put/getpixel roundtrip failed for mode %s, color %s" % + (mode, c)) + + # check inital color + im = Image.new(mode, (1, 1), c) + assert_equal(im.getpixel((0, 0)), c, + "initial color failed for mode %s, color %s " % + (mode, color)) + +def test_basic(): + for mode in ("1", "L", "LA", "I", "I;16", "I;16B", "F", + "P", "PA", "RGB", "RGBA", "RGBX", "CMYK","YCbCr"): + check(mode) + +def test_signedness(): + # see https://github.com/python-pillow/Pillow/issues/452 + # pixelaccess is using signed int* instead of uint* + for mode in ("I;16", "I;16B"): + check(mode, 2**15-1) + check(mode, 2**15) + check(mode, 2**15+1) + check(mode, 2**16-1) + + + + diff --git a/Tests/test_image_putpixel.py b/Tests/test_image_putpixel.py new file mode 100644 index 000000000..5f19237cb --- /dev/null +++ b/Tests/test_image_putpixel.py @@ -0,0 +1,45 @@ +from tester import * + +from PIL import Image + +Image.USE_CFFI_ACCESS=False + +def test_sanity(): + + im1 = lena() + im2 = Image.new(im1.mode, im1.size, 0) + + for y in range(im1.size[1]): + for x in range(im1.size[0]): + pos = x, y + im2.putpixel(pos, im1.getpixel(pos)) + + assert_image_equal(im1, im2) + + im2 = Image.new(im1.mode, im1.size, 0) + im2.readonly = 1 + + for y in range(im1.size[1]): + for x in range(im1.size[0]): + pos = x, y + im2.putpixel(pos, im1.getpixel(pos)) + + assert_false(im2.readonly) + assert_image_equal(im1, im2) + + im2 = Image.new(im1.mode, im1.size, 0) + + pix1 = im1.load() + pix2 = im2.load() + + for y in range(im1.size[1]): + for x in range(im1.size[0]): + pix2[x, y] = pix1[x, y] + + assert_image_equal(im1, im2) + + + + +# see test_image_getpixel for more tests + diff --git a/test/test_cffi.py b/test/test_cffi.py deleted file mode 100644 index 638386ac4..000000000 --- a/test/test_cffi.py +++ /dev/null @@ -1,113 +0,0 @@ -from helper import unittest, PillowTestCase, lena - -try: - import cffi - - from PIL import Image, PyAccess - - from test_image_putpixel import TestImagePutPixel - from test_image_getpixel import TestImageGetPixel - - Image.USE_CFFI_ACCESS = True - - class TestCffiPutPixel(TestImagePutPixel): - - def test_put(self): - self.test_sanity() - - class TestCffiGetPixel(TestImageGetPixel): - - def test_get(self): - self.test_basic() - self.test_signedness() - - class TestCffi(PillowTestCase): - - def _test_get_access(self, im): - """ Do we get the same thing as the old pixel access """ - - """ Using private interfaces, forcing a capi access and a pyaccess - for the same image """ - caccess = im.im.pixel_access(False) - access = PyAccess.new(im, False) - - w, h = im.size - for x in range(0, w, 10): - for y in range(0, h, 10): - self.assertEqual(access[(x, y)], caccess[(x, y)]) - - def test_get_vs_c(self): - self._test_get_access(lena('RGB')) - self._test_get_access(lena('RGBA')) - self._test_get_access(lena('L')) - self._test_get_access(lena('LA')) - self._test_get_access(lena('1')) - self._test_get_access(lena('P')) - # PA -- how do I make a PA image??? - # self._test_get_access(lena('PA')) - self._test_get_access(lena('F')) - - im = Image.new('I;16', (10, 10), 40000) - self._test_get_access(im) - im = Image.new('I;16L', (10, 10), 40000) - self._test_get_access(im) - im = Image.new('I;16B', (10, 10), 40000) - self._test_get_access(im) - - im = Image.new('I', (10, 10), 40000) - self._test_get_access(im) - # These don't actually appear to be modes that I can actually make, - # as unpack sets them directly into the I mode. - # im = Image.new('I;32L', (10, 10), -2**10) - # self._test_get_access(im) - # im = Image.new('I;32B', (10, 10), 2**10) - # self._test_get_access(im) - - def _test_set_access(self, im, color): - """ Are we writing the correct bits into the image? """ - - """ Using private interfaces, forcing a capi access and a pyaccess - for the same image """ - caccess = im.im.pixel_access(False) - access = PyAccess.new(im, False) - - w, h = im.size - for x in range(0, w, 10): - for y in range(0, h, 10): - access[(x, y)] = color - self.assertEqual(color, caccess[(x, y)]) - - def test_set_vs_c(self): - self._test_set_access(lena('RGB'), (255, 128, 0)) - self._test_set_access(lena('RGBA'), (255, 192, 128, 0)) - self._test_set_access(lena('L'), 128) - self._test_set_access(lena('LA'), (128, 128)) - self._test_set_access(lena('1'), 255) - self._test_set_access(lena('P'), 128) - # self._test_set_access(i, (128, 128)) #PA -- undone how to make - self._test_set_access(lena('F'), 1024.0) - - im = Image.new('I;16', (10, 10), 40000) - self._test_set_access(im, 45000) - im = Image.new('I;16L', (10, 10), 40000) - self._test_set_access(im, 45000) - im = Image.new('I;16B', (10, 10), 40000) - self._test_set_access(im, 45000) - - im = Image.new('I', (10, 10), 40000) - self._test_set_access(im, 45000) - # im = Image.new('I;32L', (10, 10), -(2**10)) - # self._test_set_access(im, -(2**13)+1) - # im = Image.new('I;32B', (10, 10), 2**10) - # self._test_set_access(im, 2**13-1) - -except ImportError: - class TestCffi(PillowTestCase): - def test_skip(self): - self.skipTest("ImportError") - - -if __name__ == '__main__': - unittest.main() - -# End of file diff --git a/test/test_image_getpixel.py b/test/test_image_getpixel.py deleted file mode 100644 index 9749ba836..000000000 --- a/test/test_image_getpixel.py +++ /dev/null @@ -1,54 +0,0 @@ -from helper import unittest, PillowTestCase - -from PIL import Image - -Image.USE_CFFI_ACCESS = False - - -class TestImageGetPixel(PillowTestCase): - - def color(self, mode): - bands = Image.getmodebands(mode) - if bands == 1: - return 1 - else: - return tuple(range(1, bands+1)) - - def check(self, mode, c=None): - if not c: - c = self.color(mode) - - # check putpixel - im = Image.new(mode, (1, 1), None) - im.putpixel((0, 0), c) - self.assertEqual( - im.getpixel((0, 0)), c, - "put/getpixel roundtrip failed for mode %s, color %s" % - (mode, c)) - - # check inital color - im = Image.new(mode, (1, 1), c) - self.assertEqual( - im.getpixel((0, 0)), c, - "initial color failed for mode %s, color %s " % - (mode, self.color)) - - def test_basic(self): - for mode in ("1", "L", "LA", "I", "I;16", "I;16B", "F", - "P", "PA", "RGB", "RGBA", "RGBX", "CMYK", "YCbCr"): - self.check(mode) - - def test_signedness(self): - # see https://github.com/python-pillow/Pillow/issues/452 - # pixelaccess is using signed int* instead of uint* - for mode in ("I;16", "I;16B"): - self.check(mode, 2**15-1) - self.check(mode, 2**15) - self.check(mode, 2**15+1) - self.check(mode, 2**16-1) - - -if __name__ == '__main__': - unittest.main() - -# End of file diff --git a/test/test_image_putpixel.py b/test/test_image_putpixel.py deleted file mode 100644 index a7f5dc2bb..000000000 --- a/test/test_image_putpixel.py +++ /dev/null @@ -1,50 +0,0 @@ -from helper import unittest, PillowTestCase, lena - -from PIL import Image - -Image.USE_CFFI_ACCESS = False - - -class TestImagePutPixel(PillowTestCase): - - def test_sanity(self): - - im1 = lena() - im2 = Image.new(im1.mode, im1.size, 0) - - for y in range(im1.size[1]): - for x in range(im1.size[0]): - pos = x, y - im2.putpixel(pos, im1.getpixel(pos)) - - self.assert_image_equal(im1, im2) - - im2 = Image.new(im1.mode, im1.size, 0) - im2.readonly = 1 - - for y in range(im1.size[1]): - for x in range(im1.size[0]): - pos = x, y - im2.putpixel(pos, im1.getpixel(pos)) - - self.assertFalse(im2.readonly) - self.assert_image_equal(im1, im2) - - im2 = Image.new(im1.mode, im1.size, 0) - - pix1 = im1.load() - pix2 = im2.load() - - for y in range(im1.size[1]): - for x in range(im1.size[0]): - pix2[x, y] = pix1[x, y] - - self.assert_image_equal(im1, im2) - - # see test_image_getpixel for more tests - - -if __name__ == '__main__': - unittest.main() - -# End of file