github.com/grumpyhome/grumpy@v0.3.1-0.20201208125205-7b775405bdf1/grumpy-runtime-src/third_party/stdlib/test/test_colorsys.py (about)

     1  import unittest
     2  import colorsys
     3  from test import test_support
     4  
     5  def frange(start, stop, step):
     6      while start <= stop:
     7          yield start
     8          start += step
     9  
    10  class ColorsysTest(unittest.TestCase):
    11  
    12      def assertTripleEqual(self, tr1, tr2):
    13          self.assertEqual(len(tr1), 3)
    14          self.assertEqual(len(tr2), 3)
    15          self.assertAlmostEqual(tr1[0], tr2[0])
    16          self.assertAlmostEqual(tr1[1], tr2[1])
    17          self.assertAlmostEqual(tr1[2], tr2[2])
    18  
    19      def test_hsv_roundtrip(self):
    20          for r in frange(0.0, 1.0, 0.2):
    21              for g in frange(0.0, 1.0, 0.2):
    22                  for b in frange(0.0, 1.0, 0.2):
    23                      rgb = (r, g, b)
    24                      self.assertTripleEqual(
    25                          rgb,
    26                          colorsys.hsv_to_rgb(*colorsys.rgb_to_hsv(*rgb))
    27                      )
    28  
    29      def test_hsv_values(self):
    30          values = [
    31              # rgb, hsv
    32              ((0.0, 0.0, 0.0), (  0  , 0.0, 0.0)), # black
    33              ((0.0, 0.0, 1.0), (4./6., 1.0, 1.0)), # blue
    34              ((0.0, 1.0, 0.0), (2./6., 1.0, 1.0)), # green
    35              ((0.0, 1.0, 1.0), (3./6., 1.0, 1.0)), # cyan
    36              ((1.0, 0.0, 0.0), (  0  , 1.0, 1.0)), # red
    37              ((1.0, 0.0, 1.0), (5./6., 1.0, 1.0)), # purple
    38              ((1.0, 1.0, 0.0), (1./6., 1.0, 1.0)), # yellow
    39              ((1.0, 1.0, 1.0), (  0  , 0.0, 1.0)), # white
    40              ((0.5, 0.5, 0.5), (  0  , 0.0, 0.5)), # grey
    41          ]
    42          for (rgb, hsv) in values:
    43              self.assertTripleEqual(hsv, colorsys.rgb_to_hsv(*rgb))
    44              self.assertTripleEqual(rgb, colorsys.hsv_to_rgb(*hsv))
    45  
    46      def test_hls_roundtrip(self):
    47          for r in frange(0.0, 1.0, 0.2):
    48              for g in frange(0.0, 1.0, 0.2):
    49                  for b in frange(0.0, 1.0, 0.2):
    50                      rgb = (r, g, b)
    51                      self.assertTripleEqual(
    52                          rgb,
    53                          colorsys.hls_to_rgb(*colorsys.rgb_to_hls(*rgb))
    54                      )
    55  
    56      def test_hls_values(self):
    57          values = [
    58              # rgb, hls
    59              ((0.0, 0.0, 0.0), (  0  , 0.0, 0.0)), # black
    60              ((0.0, 0.0, 1.0), (4./6., 0.5, 1.0)), # blue
    61              ((0.0, 1.0, 0.0), (2./6., 0.5, 1.0)), # green
    62              ((0.0, 1.0, 1.0), (3./6., 0.5, 1.0)), # cyan
    63              ((1.0, 0.0, 0.0), (  0  , 0.5, 1.0)), # red
    64              ((1.0, 0.0, 1.0), (5./6., 0.5, 1.0)), # purple
    65              ((1.0, 1.0, 0.0), (1./6., 0.5, 1.0)), # yellow
    66              ((1.0, 1.0, 1.0), (  0  , 1.0, 0.0)), # white
    67              ((0.5, 0.5, 0.5), (  0  , 0.5, 0.0)), # grey
    68          ]
    69          for (rgb, hls) in values:
    70              self.assertTripleEqual(hls, colorsys.rgb_to_hls(*rgb))
    71              self.assertTripleEqual(rgb, colorsys.hls_to_rgb(*hls))
    72  
    73      def test_yiq_roundtrip(self):
    74          for r in frange(0.0, 1.0, 0.2):
    75              for g in frange(0.0, 1.0, 0.2):
    76                  for b in frange(0.0, 1.0, 0.2):
    77                      rgb = (r, g, b)
    78                      self.assertTripleEqual(
    79                          rgb,
    80                          colorsys.yiq_to_rgb(*colorsys.rgb_to_yiq(*rgb))
    81                      )
    82  
    83      def test_yiq_values(self):
    84          values = [
    85              # rgb, yiq
    86              ((0.0, 0.0, 0.0), (0.0, 0.0, 0.0)), # black
    87              ((0.0, 0.0, 1.0), (0.11, -0.3217, 0.3121)), # blue
    88              ((0.0, 1.0, 0.0), (0.59, -0.2773, -0.5251)), # green
    89              ((0.0, 1.0, 1.0), (0.7, -0.599, -0.213)), # cyan
    90              ((1.0, 0.0, 0.0), (0.3, 0.599, 0.213)), # red
    91              ((1.0, 0.0, 1.0), (0.41, 0.2773, 0.5251)), # purple
    92              ((1.0, 1.0, 0.0), (0.89, 0.3217, -0.3121)), # yellow
    93              ((1.0, 1.0, 1.0), (1.0, 0.0, 0.0)), # white
    94              ((0.5, 0.5, 0.5), (0.5, 0.0, 0.0)), # grey
    95          ]
    96          for (rgb, yiq) in values:
    97              self.assertTripleEqual(yiq, colorsys.rgb_to_yiq(*rgb))
    98              self.assertTripleEqual(rgb, colorsys.yiq_to_rgb(*yiq))
    99  
   100  def test_main():
   101      test_support.run_unittest(ColorsysTest)
   102  
   103  if __name__ == "__main__":
   104      test_main()