diff --git a/Tests/test_lib_image.py b/Tests/test_lib_image.py index 447f90b4d..445f806ef 100644 --- a/Tests/test_lib_image.py +++ b/Tests/test_lib_image.py @@ -1,5 +1,7 @@ from __future__ import annotations +import itertools + import pytest from PIL import Image @@ -44,7 +46,24 @@ def test_equal(mode): assert img_a.im == img_b.im -@pytest.mark.parametrize("mode", Image.MODES) +# With mode "1" different bytes can map to the same value, +# so we have to be more specific with the values we use. +@pytest.mark.parametrize( + "bytes_a, bytes_b", + itertools.permutations( + (bytes(x) for x in itertools.product(b"\x00\xff", repeat=4)), 2 + ), +) +def test_not_equal_mode_1(bytes_a, bytes_b): + # Use rawmode "1;8" so that each full byte is interpreted as a value + # instead of the bits in the bytes being interpreted as values. + img_a = Image.frombytes("1", (2, 2), bytes_a, "raw", "1;8") + img_b = Image.frombytes("1", (2, 2), bytes_b, "raw", "1;8") + assert img_a.tobytes() != img_b.tobytes() + assert img_a.im != img_b.im + + +@pytest.mark.parametrize("mode", [mode for mode in Image.MODES if mode != "1"]) def test_not_equal(mode): num_img_bytes = len(Image.new(mode, (2, 2)).tobytes()) data_a = bytes(range(ord("A"), ord("A") + num_img_bytes))