Improve ImageMath test coverage (#9087)

This commit is contained in:
Hugo van Kemenade 2025-07-11 20:35:36 +03:00 committed by GitHub
commit d80cf0ee1b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,7 +2,9 @@ from __future__ import annotations
from typing import Any
from PIL import Image, ImageMath
import pytest
from PIL import Image, ImageMath, _imagingmath
def pixel(im: Image.Image | int) -> str | int:
@ -498,3 +500,31 @@ def test_logical_not_equal() -> None:
)
== "I 1"
)
def test_reflected_operands() -> None:
assert pixel(ImageMath.lambda_eval(lambda args: 1 + args["A"], **images)) == "I 2"
assert pixel(ImageMath.lambda_eval(lambda args: 1 - args["A"], **images)) == "I 0"
assert pixel(ImageMath.lambda_eval(lambda args: 1 * args["A"], **images)) == "I 1"
assert pixel(ImageMath.lambda_eval(lambda args: 1 / args["A"], **images)) == "I 1"
assert pixel(ImageMath.lambda_eval(lambda args: 1 % args["A"], **images)) == "I 0"
assert pixel(ImageMath.lambda_eval(lambda args: 1 ** args["A"], **images)) == "I 1"
assert pixel(ImageMath.lambda_eval(lambda args: 1 & args["A"], **images)) == "I 1"
assert pixel(ImageMath.lambda_eval(lambda args: 1 | args["A"], **images)) == "I 1"
assert pixel(ImageMath.lambda_eval(lambda args: 1 ^ args["A"], **images)) == "I 0"
def test_unsupported_mode() -> None:
im = Image.new("RGB", (1, 1))
with pytest.raises(ValueError, match="unsupported mode: RGB"):
ImageMath.lambda_eval(lambda args: args["im"] + 1, im=im)
def test_bad_operand_type(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.delattr(_imagingmath, "abs_I")
with pytest.raises(TypeError, match="bad operand type for 'abs'"):
ImageMath.lambda_eval(lambda args: abs(args["I"]), I=I)
monkeypatch.delattr(_imagingmath, "max_F")
with pytest.raises(TypeError, match="bad operand type for 'max'"):
ImageMath.lambda_eval(lambda args: args["max"](args["I"], args["F"]), I=I, F=F)