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