|
2 | 2 |
|
3 | 3 | from typing import Any
|
4 | 4 |
|
5 |
| -from PIL import Image, ImageMath |
| 5 | +import pytest |
| 6 | + |
| 7 | +from PIL import Image, ImageMath, _imagingmath |
6 | 8 |
|
7 | 9 |
|
8 | 10 | def pixel(im: Image.Image | int) -> str | int:
|
@@ -498,3 +500,31 @@ def test_logical_not_equal() -> None:
|
498 | 500 | )
|
499 | 501 | == "I 1"
|
500 | 502 | )
|
| 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