Skip to content

Commit d80cf0e

Browse files
authored
Improve ImageMath test coverage (#9087)
2 parents 7b1ba29 + a8bb757 commit d80cf0e

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

Tests/test_imagemath_lambda_eval.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
from typing import Any
44

5-
from PIL import Image, ImageMath
5+
import pytest
6+
7+
from PIL import Image, ImageMath, _imagingmath
68

79

810
def pixel(im: Image.Image | int) -> str | int:
@@ -498,3 +500,31 @@ def test_logical_not_equal() -> None:
498500
)
499501
== "I 1"
500502
)
503+
504+
505+
def test_reflected_operands() -> None:
506+
assert pixel(ImageMath.lambda_eval(lambda args: 1 + args["A"], **images)) == "I 2"
507+
assert pixel(ImageMath.lambda_eval(lambda args: 1 - args["A"], **images)) == "I 0"
508+
assert pixel(ImageMath.lambda_eval(lambda args: 1 * args["A"], **images)) == "I 1"
509+
assert pixel(ImageMath.lambda_eval(lambda args: 1 / args["A"], **images)) == "I 1"
510+
assert pixel(ImageMath.lambda_eval(lambda args: 1 % args["A"], **images)) == "I 0"
511+
assert pixel(ImageMath.lambda_eval(lambda args: 1 ** args["A"], **images)) == "I 1"
512+
assert pixel(ImageMath.lambda_eval(lambda args: 1 & args["A"], **images)) == "I 1"
513+
assert pixel(ImageMath.lambda_eval(lambda args: 1 | args["A"], **images)) == "I 1"
514+
assert pixel(ImageMath.lambda_eval(lambda args: 1 ^ args["A"], **images)) == "I 0"
515+
516+
517+
def test_unsupported_mode() -> None:
518+
im = Image.new("RGB", (1, 1))
519+
with pytest.raises(ValueError, match="unsupported mode: RGB"):
520+
ImageMath.lambda_eval(lambda args: args["im"] + 1, im=im)
521+
522+
523+
def test_bad_operand_type(monkeypatch: pytest.MonkeyPatch) -> None:
524+
monkeypatch.delattr(_imagingmath, "abs_I")
525+
with pytest.raises(TypeError, match="bad operand type for 'abs'"):
526+
ImageMath.lambda_eval(lambda args: abs(args["I"]), I=I)
527+
528+
monkeypatch.delattr(_imagingmath, "max_F")
529+
with pytest.raises(TypeError, match="bad operand type for 'max'"):
530+
ImageMath.lambda_eval(lambda args: args["max"](args["I"], args["F"]), I=I, F=F)

0 commit comments

Comments
 (0)