From 002b2a28e1ffc0019e443d23fc0ec8307dc06611 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Wed, 27 Nov 2019 11:48:50 +0000 Subject: [PATCH] fix test suite for the new jpg sample image --- test/test-suite/images/sample.jpg | Bin 22662 -> 22951 bytes test/test-suite/test_colour.py | 4 +-- test/test-suite/test_foreign.py | 54 ++++++++++++++++-------------- test/test-suite/test_histogram.py | 2 +- test/test-suite/test_resample.py | 26 ++++++++------ test/test-suite/test_stream.py | 8 ++--- 6 files changed, 51 insertions(+), 43 deletions(-) diff --git a/test/test-suite/images/sample.jpg b/test/test-suite/images/sample.jpg index 6c80d789e3123eaa5cb6ac0870582b72a3a8f337..0b20daa12e171579bccfc2de90bf3fd45a2393e4 100644 GIT binary patch delta 21509 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 diff --git a/test/test-suite/test_colour.py b/test/test-suite/test_colour.py index f441bb79..4d4034cd 100644 --- a/test/test-suite/test_colour.py +++ b/test/test-suite/test_colour.py @@ -169,8 +169,8 @@ class TestColour: im = test.colourspace("cmyk").colourspace("srgb") - before = test(582, 210) - after = im(582, 210) + before = test(150, 210) + after = im(150, 210) assert_almost_equal_objects(before, after, threshold=10) diff --git a/test/test-suite/test_foreign.py b/test/test-suite/test_foreign.py index 6af9654a..729514df 100644 --- a/test/test-suite/test_foreign.py +++ b/test/test-suite/test_foreign.py @@ -124,11 +124,11 @@ class TestForeign: def test_jpeg(self): def jpeg_valid(im): a = im(10, 10) - assert_almost_equal_objects(a, [6, 5, 3]) + assert_almost_equal_objects(a, [141, 127, 90]) profile = im.get("icc-profile-data") - assert len(profile) == 1352 - assert im.width == 1024 - assert im.height == 768 + assert len(profile) == 564 + assert im.width == 290 + assert im.height == 442 assert im.bands == 3 self.file_loader("jpegload", JPEG_FILE, jpeg_valid) @@ -726,10 +726,10 @@ class TestForeign: self.colour.dzsave(filename, suffix=".png") # test horizontal overlap ... expect 256 step, overlap 1 - x = pyvips.Image.new_from_file(filename + "_files/10/0_0.png") + x = pyvips.Image.new_from_file(filename + "_files/9/0_0.png") assert x.width == 255 - y = pyvips.Image.new_from_file(filename + "_files/10/1_0.png") - assert y.width == 256 + y = pyvips.Image.new_from_file(filename + "_files/9/1_0.png") + assert y.width == 37 # the right two columns of x should equal the left two columns of y left = x.crop(x.width - 2, 0, 2, x.height) @@ -738,8 +738,8 @@ class TestForeign: # test vertical overlap assert x.height == 255 - y = pyvips.Image.new_from_file(filename + "_files/10/0_1.png") - assert y.height == 256 + y = pyvips.Image.new_from_file(filename + "_files/9/0_1.png") + assert y.height == 189 # the bottom two rows of x should equal the top two rows of y top = x.crop(0, x.height - 2, x.width, 2) @@ -751,19 +751,19 @@ class TestForeign: assert x.width == 1 assert x.height == 1 - # 10 should be the final layer - assert not os.path.isdir(filename + "_files/11") + # 9 should be the final layer + assert not os.path.isdir(filename + "_files/10") # default google layout filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, layout="google") # test bottom-right tile ... default is 256x256 tiles, overlap 0 - x = pyvips.Image.new_from_file(filename + "/2/2/3.jpg") + x = pyvips.Image.new_from_file(filename + "/1/1/1.jpg") assert x.width == 256 assert x.height == 256 - assert not os.path.exists(filename + "/2/2/4.jpg") - assert not os.path.exists(filename + "/3") + assert not os.path.exists(filename + "/1/1/2.jpg") + assert not os.path.exists(filename + "/2") x = pyvips.Image.new_from_file(filename + "/blank.png") assert x.width == 256 assert x.height == 256 @@ -773,8 +773,10 @@ class TestForeign: # overlap 1, 510x510 pixels, 256 pixel tiles, should be exactly 2x2 # tiles, though in fact the bottom and right edges will be white filename = temp_filename(self.tempdir, '') - self.colour.crop(0, 0, 510, 510).dzsave(filename, layout="google", - overlap=1, depth="one") + self.colour \ + .replicate(2, 2) \ + .crop(0, 0, 510, 510) \ + .dzsave(filename, layout="google", overlap=1, depth="one") x = pyvips.Image.new_from_file(filename + "/0/1/1.jpg") assert x.width == 256 @@ -784,8 +786,10 @@ class TestForeign: # with 511x511, it'll fit exactly into 2x2 -- we we actually generate # 3x3, since we output the overlaps filename = temp_filename(self.tempdir, '') - self.colour.crop(0, 0, 511, 511).dzsave(filename, layout="google", - overlap=1, depth="one") + self.colour \ + .replicate(2, 2) \ + .crop(0, 0, 511, 511) \ + .dzsave(filename, layout="google", overlap=1, depth="one") x = pyvips.Image.new_from_file(filename + "/0/2/2.jpg") assert x.width == 256 @@ -798,7 +802,7 @@ class TestForeign: # 256x256 tiles, no overlap assert os.path.exists(filename + "/ImageProperties.xml") - x = pyvips.Image.new_from_file(filename + "/TileGroup0/2-3-2.jpg") + x = pyvips.Image.new_from_file(filename + "/TileGroup0/1-0-0.jpg") assert x.width == 256 assert x.height == 256 @@ -819,23 +823,23 @@ class TestForeign: filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, suffix=".png") - x = pyvips.Image.new_from_file(filename + "_files/10/0_0.png") + x = pyvips.Image.new_from_file(filename + "_files/9/0_0.png") assert x.width == 255 # test overlap filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, overlap=200) - y = pyvips.Image.new_from_file(filename + "_files/10/1_1.jpeg") - assert y.width == 654 + y = pyvips.Image.new_from_file(filename + "_files/9/1_1.jpeg") + assert y.width == 236 # test tile-size filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, tile_size=512) - y = pyvips.Image.new_from_file(filename + "_files/10/0_0.jpeg") - assert y.width == 513 - assert y.height == 513 + y = pyvips.Image.new_from_file(filename + "_files/9/0_0.jpeg") + assert y.width == 290 + assert y.height == 442 # test save to memory buffer filename = temp_filename(self.tempdir, '.zip') diff --git a/test/test-suite/test_histogram.py b/test/test-suite/test_histogram.py index a709dcfa..9c0ed1ed 100644 --- a/test/test-suite/test_histogram.py +++ b/test/test-suite/test_histogram.py @@ -96,7 +96,7 @@ class TestHistogram: ent = im.hist_find().hist_entropy() - assert pytest.approx(ent, 0.01) == 4.37 + assert pytest.approx(ent, 0.01) == 6.67 def test_stdif(self): im = pyvips.Image.new_from_file(JPEG_FILE) diff --git a/test/test-suite/test_resample.py b/test/test-suite/test_resample.py index 791a30c7..abd4a61d 100644 --- a/test/test-suite/test_resample.py +++ b/test/test-suite/test_resample.py @@ -103,8 +103,10 @@ class TestResample: def test_resize(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.resize(0.25) - assert im2.width == round(im.width / 4.0) - assert im2.height == round(im.height / 4.0) + # in py3, round() does not round to nearest in the obvious way, so we + # have to do it by hand + assert im2.width == int(im.width / 4.0 + 0.5) + assert im2.height == int(im.height / 4.0 + 0.5) # test geometry rounding corner case im = pyvips.Image.black(100, 1) @@ -115,13 +117,15 @@ class TestResample: def test_shrink(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.shrink(4, 4) - assert im2.width == round(im.width / 4.0) - assert im2.height == round(im.height / 4.0) + # in py3, round() does not round to nearest in the obvious way, so we + # have to do it by hand + assert im2.width == int(im.width / 4.0 + 0.5) + assert im2.height == int(im.height / 4.0 + 0.5) assert abs(im.avg() - im2.avg()) < 1 im2 = im.shrink(2.5, 2.5) - assert im2.width == round(im.width / 2.5) - assert im2.height == round(im.height / 2.5) + assert im2.width == int(im.width / 2.5 + 0.5) + assert im2.height == int(im.height / 2.5 + 0.5) assert abs(im.avg() - im2.avg()) < 1 @pytest.mark.skipif(not pyvips.at_least_libvips(8, 5), @@ -129,7 +133,7 @@ class TestResample: def test_thumbnail(self): im = pyvips.Image.thumbnail(JPEG_FILE, 100) - assert im.width == 100 + assert im.height == 100 assert im.bands == 3 assert im.bands == 3 @@ -138,9 +142,9 @@ class TestResample: assert abs(im_orig.avg() - im.avg()) < 1 # make sure we always get the right width - for width in range(1000, 1, -13): - im = pyvips.Image.thumbnail(JPEG_FILE, width) - assert im.width == width + for height in range(440, 1, -13): + im = pyvips.Image.thumbnail(JPEG_FILE, height) + assert im.height == height # should fit one of width or height im = pyvips.Image.thumbnail(JPEG_FILE, 100, height=300) @@ -196,7 +200,7 @@ class TestResample: # distorted, but the rest should not be too bad a = r.crop(50, 0, im.width - 50, im.height).gaussblur(2) b = im.crop(50, 0, im.width - 50, im.height).gaussblur(2) - assert (a - b).abs().max() < 20 + assert (a - b).abs().max() < 40 # this was a bug at one point, strangely, if executed with debug # enabled diff --git a/test/test-suite/test_stream.py b/test/test-suite/test_stream.py index c1389fd2..fb5c99fe 100644 --- a/test/test-suite/test_stream.py +++ b/test/test-suite/test_stream.py @@ -49,8 +49,8 @@ class TestStream: x = pyvips.Streami.new_from_file(JPEG_FILE) y = pyvips.Image.new_from_stream(x, "") - assert y.width == 1024 - assert y.height == 768 + assert y.width == 290 + assert y.height == 442 def test_streamo_new_to_file(self): filename = temp_filename(self.tempdir, ".jpg") @@ -81,8 +81,8 @@ class TestStream: x = pyvips.Streami.new_from_memory(data) y = pyvips.Image.new_from_stream(x, "") - assert y.width == 1024 - assert y.height == 768 + assert y.width == 290 + assert y.height == 442 def test_streamo_new_memory(self): x = pyvips.Streamo.new_to_memory()