9
9
10
10
from numpy .testing import assert_almost_equal
11
11
import pytest
12
+ from pytest import approx
12
13
13
14
from matplotlib .testing .compare import compare_images
14
15
from matplotlib .testing .decorators import _image_directories , image_comparison
19
20
20
21
21
22
# Tests of the image comparison algorithm.
22
- def image_comparison_expect_rms (im1 , im2 , tol , expect_rms ):
23
+ @pytest .mark .parametrize (
24
+ 'im1, im2, tol, expect_rms' ,
25
+ [
26
+ # Comparison of an image and the same image with minor differences.
27
+ # This expects the images to compare equal under normal tolerance, and
28
+ # have a small RMS.
29
+ ('basn3p02.png' , 'basn3p02-minorchange.png' , 10 , None ),
30
+ # Now test with no tolerance.
31
+ ('basn3p02.png' , 'basn3p02-minorchange.png' , 0 , 6.50646 ),
32
+ # Comparison with an image that is shifted by 1px in the X axis.
33
+ ('basn3p02.png' , 'basn3p02-1px-offset.png' , 0 , 90.15611 ),
34
+ # Comparison with an image with half the pixels shifted by 1px in the X
35
+ # axis.
36
+ ('basn3p02.png' , 'basn3p02-half-1px-offset.png' , 0 , 63.75 ),
37
+ # Comparison of an image and the same image scrambled.
38
+ # This expects the images to compare completely different, with a very
39
+ # large RMS.
40
+ # Note: The image has been scrambled in a specific way, by having
41
+ # each color component of each pixel randomly placed somewhere in the
42
+ # image. It contains exactly the same number of pixels of each color
43
+ # value of R, G and B, but in a totally different position.
44
+ # Test with no tolerance to make sure that we pick up even a very small
45
+ # RMS error.
46
+ ('basn3p02.png' , 'basn3p02-scrambled.png' , 0 , 172.63582 ),
47
+ # Comparison of an image and a slightly brighter image.
48
+ # The two images are solid color, with the second image being exactly 1
49
+ # color value brighter.
50
+ # This expects the images to compare equal under normal tolerance, and
51
+ # have an RMS of exactly 1.
52
+ ('all127.png' , 'all128.png' , 0 , 1 ),
53
+ # Now test the reverse comparison.
54
+ ('all128.png' , 'all127.png' , 0 , 1 ),
55
+ ])
56
+ def test_image_comparison_expect_rms (im1 , im2 , tol , expect_rms ):
23
57
"""Compare two images, expecting a particular RMS error.
24
58
25
59
im1 and im2 are filenames relative to the baseline_dir directory.
@@ -43,72 +77,13 @@ def image_comparison_expect_rms(im1, im2, tol, expect_rms):
43
77
assert results is None
44
78
else :
45
79
assert results is not None
46
- assert_almost_equal (expect_rms , results ['rms' ], decimal = 4 )
47
-
48
-
49
- def test_image_compare_basic ():
50
- #: Test comparison of an image and the same image with minor differences.
51
-
52
- # This expects the images to compare equal under normal tolerance, and have
53
- # a small RMS.
54
- im1 = 'basn3p02.png'
55
- im2 = 'basn3p02-minorchange.png'
56
- image_comparison_expect_rms (im1 , im2 , tol = 10 , expect_rms = None )
57
-
58
- # Now test with no tolerance.
59
- image_comparison_expect_rms (im1 , im2 , tol = 0 , expect_rms = 6.50646 )
60
-
61
-
62
- def test_image_compare_1px_offset ():
63
- #: Test comparison with an image that is shifted by 1px in the X axis.
64
- im1 = 'basn3p02.png'
65
- im2 = 'basn3p02-1px-offset.png'
66
- image_comparison_expect_rms (im1 , im2 , tol = 0 , expect_rms = 90.15611 )
80
+ assert results ['rms' ] == approx (expect_rms , abs = 1e-4 )
67
81
68
82
69
- def test_image_compare_half_1px_offset ():
70
- #: Test comparison with an image with half the pixels shifted by 1px in
71
- #: the X axis.
72
- im1 = 'basn3p02.png'
73
- im2 = 'basn3p02-half-1px-offset.png'
74
- image_comparison_expect_rms (im1 , im2 , tol = 0 , expect_rms = 63.75 )
75
-
76
-
77
- def test_image_compare_scrambled ():
78
- #: Test comparison of an image and the same image scrambled.
79
-
80
- # This expects the images to compare completely different, with a very
81
- # large RMS.
82
- # Note: The image has been scrambled in a specific way, by having each
83
- # color component of each pixel randomly placed somewhere in the image. It
84
- # contains exactly the same number of pixels of each color value of R, G
85
- # and B, but in a totally different position.
86
- im1 = 'basn3p02.png'
87
- im2 = 'basn3p02-scrambled.png'
88
- # Test with no tolerance to make sure that we pick up even a very small RMS
89
- # error.
90
- image_comparison_expect_rms (im1 , im2 , tol = 0 , expect_rms = 172.63582 )
91
-
92
-
93
- def test_image_compare_shade_difference ():
94
- #: Test comparison of an image and a slightly brighter image.
95
- # The two images are solid color, with the second image being exactly 1
96
- # color value brighter.
97
- # This expects the images to compare equal under normal tolerance, and have
98
- # an RMS of exactly 1.
99
- im1 = 'all127.png'
100
- im2 = 'all128.png'
101
- image_comparison_expect_rms (im1 , im2 , tol = 0 , expect_rms = 1.0 )
102
-
103
- # Now test the reverse comparison.
104
- image_comparison_expect_rms (im2 , im1 , tol = 0 , expect_rms = 1.0 )
105
-
106
-
107
- #
108
83
# The following tests are used by test_nose_image_comparison to ensure that the
109
84
# image_comparison decorator continues to work with nose. They should not be
110
85
# prefixed by test_ so they don't run with pytest.
111
- #
86
+
112
87
113
88
def nosetest_empty ():
114
89
pass
0 commit comments