Home | History | Annotate | Download | only in test
      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 += step
      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()
     77