Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | import unittest, test.test_support |
2 | import colorsys | |
3 | ||
4 | def frange(start, stop, step): | |
5 | while start <= stop: | |
6 | yield start | |
7 | start += stop | |
8 | ||
9 | class ColorsysTest(unittest.TestCase): | |
10 | ||
11 | def assertTripleEqual(self, tr1, tr2): | |
12 | self.assertEqual(len(tr1), 3) | |
13 | self.assertEqual(len(tr2), 3) | |
14 | self.assertAlmostEqual(tr1[0], tr2[0]) | |
15 | self.assertAlmostEqual(tr1[1], tr2[1]) | |
16 | self.assertAlmostEqual(tr1[2], tr2[2]) | |
17 | ||
18 | def test_hsv_roundtrip(self): | |
19 | for r in frange(0.0, 1.0, 0.2): | |
20 | for g in frange(0.0, 1.0, 0.2): | |
21 | for b in frange(0.0, 1.0, 0.2): | |
22 | rgb = (r, g, b) | |
23 | self.assertTripleEqual( | |
24 | rgb, | |
25 | colorsys.hsv_to_rgb(*colorsys.rgb_to_hsv(*rgb)) | |
26 | ) | |
27 | ||
28 | def test_hsv_values(self): | |
29 | values = [ | |
30 | # rgb, hsv | |
31 | ((0.0, 0.0, 0.0), ( 0 , 0.0, 0.0)), # black | |
32 | ((0.0, 0.0, 1.0), (4./6., 1.0, 1.0)), # blue | |
33 | ((0.0, 1.0, 0.0), (2./6., 1.0, 1.0)), # green | |
34 | ((0.0, 1.0, 1.0), (3./6., 1.0, 1.0)), # cyan | |
35 | ((1.0, 0.0, 0.0), ( 0 , 1.0, 1.0)), # red | |
36 | ((1.0, 0.0, 1.0), (5./6., 1.0, 1.0)), # purple | |
37 | ((1.0, 1.0, 0.0), (1./6., 1.0, 1.0)), # yellow | |
38 | ((1.0, 1.0, 1.0), ( 0 , 0.0, 1.0)), # white | |
39 | ((0.5, 0.5, 0.5), ( 0 , 0.0, 0.5)), # grey | |
40 | ] | |
41 | for (rgb, hsv) in values: | |
42 | self.assertTripleEqual(hsv, colorsys.rgb_to_hsv(*rgb)) | |
43 | self.assertTripleEqual(rgb, colorsys.hsv_to_rgb(*hsv)) | |
44 | ||
45 | def test_hls_roundtrip(self): | |
46 | for r in frange(0.0, 1.0, 0.2): | |
47 | for g in frange(0.0, 1.0, 0.2): | |
48 | for b in frange(0.0, 1.0, 0.2): | |
49 | rgb = (r, g, b) | |
50 | self.assertTripleEqual( | |
51 | rgb, | |
52 | colorsys.hls_to_rgb(*colorsys.rgb_to_hls(*rgb)) | |
53 | ) | |
54 | ||
55 | def test_hls_values(self): | |
56 | values = [ | |
57 | # rgb, hls | |
58 | ((0.0, 0.0, 0.0), ( 0 , 0.0, 0.0)), # black | |
59 | ((0.0, 0.0, 1.0), (4./6., 0.5, 1.0)), # blue | |
60 | ((0.0, 1.0, 0.0), (2./6., 0.5, 1.0)), # green | |
61 | ((0.0, 1.0, 1.0), (3./6., 0.5, 1.0)), # cyan | |
62 | ((1.0, 0.0, 0.0), ( 0 , 0.5, 1.0)), # red | |
63 | ((1.0, 0.0, 1.0), (5./6., 0.5, 1.0)), # purple | |
64 | ((1.0, 1.0, 0.0), (1./6., 0.5, 1.0)), # yellow | |
65 | ((1.0, 1.0, 1.0), ( 0 , 1.0, 0.0)), # white | |
66 | ((0.5, 0.5, 0.5), ( 0 , 0.5, 0.0)), # grey | |
67 | ] | |
68 | for (rgb, hls) in values: | |
69 | self.assertTripleEqual(hls, colorsys.rgb_to_hls(*rgb)) | |
70 | self.assertTripleEqual(rgb, colorsys.hls_to_rgb(*hls)) | |
71 | ||
72 | def test_main(): | |
73 | test.test_support.run_unittest(ColorsysTest) | |
74 | ||
75 | if __name__ == "__main__": | |
76 | test_main() |