pkg.re/essentialkaos/ek@v12.36.0+incompatible/color/color_test.go (about)

     1  // +build 386 amd64
     2  
     3  package color
     4  
     5  // ////////////////////////////////////////////////////////////////////////////////// //
     6  //                                                                                    //
     7  //                         Copyright (c) 2021 ESSENTIAL KAOS                          //
     8  //      Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>     //
     9  //                                                                                    //
    10  // ////////////////////////////////////////////////////////////////////////////////// //
    11  
    12  import (
    13  	"testing"
    14  
    15  	. "pkg.re/essentialkaos/check.v1"
    16  )
    17  
    18  // ////////////////////////////////////////////////////////////////////////////////// //
    19  
    20  func Test(t *testing.T) { TestingT(t) }
    21  
    22  type ColorSuite struct{}
    23  
    24  // ////////////////////////////////////////////////////////////////////////////////// //
    25  
    26  var _ = Suite(&ColorSuite{})
    27  
    28  // ////////////////////////////////////////////////////////////////////////////////// //
    29  
    30  func (s *ColorSuite) TestParse(c *C) {
    31  	color, err := Parse("violet")
    32  	c.Assert(err, IsNil)
    33  	c.Assert(color, Equals, Hex(0xEE82EE))
    34  
    35  	color, err = Parse("#ff6347")
    36  	c.Assert(err, IsNil)
    37  	c.Assert(color, Equals, Hex(0xFF6347))
    38  
    39  	color, err = Parse("#FF6347")
    40  	c.Assert(err, IsNil)
    41  	c.Assert(color, Equals, Hex(0xFF6347))
    42  
    43  	color, err = Parse("FF6347")
    44  	c.Assert(err, IsNil)
    45  	c.Assert(color, Equals, Hex(0xFF6347))
    46  
    47  	color, err = Parse("#b3f")
    48  	c.Assert(err, IsNil)
    49  	c.Assert(color, Equals, Hex(0xBB33FF))
    50  
    51  	color, err = Parse("#FF6347AA")
    52  	c.Assert(err, IsNil)
    53  	c.Assert(color, Equals, Hex(0xFF6347AA))
    54  
    55  	color, err = Parse("#b3fa")
    56  	c.Assert(err, IsNil)
    57  	c.Assert(color, Equals, Hex(0xBB33FFAA))
    58  
    59  	color, err = Parse("")
    60  	c.Assert(err, NotNil)
    61  
    62  	color, err = Parse("TEST")
    63  	c.Assert(err, NotNil)
    64  }
    65  
    66  func (s *ColorSuite) TestRGB(c *C) {
    67  	c.Assert(RGB{0, 0, 0}.ToHex(), DeepEquals, Hex(0x000000))
    68  	c.Assert(RGB{255, 255, 255}.ToHex(), DeepEquals, Hex(0xFFFFFF))
    69  	c.Assert(RGB{127, 127, 127}.ToHex(), DeepEquals, Hex(0x7F7F7F))
    70  
    71  	c.Assert(RGB{23, 182, 89}.String(), Equals, "RGB{R:23 G:182 B:89}")
    72  }
    73  
    74  func (s *ColorSuite) TestHex(c *C) {
    75  	c.Assert(Hex(0x000000).ToRGB(), DeepEquals, RGB{0x00, 0x00, 0x00})
    76  	c.Assert(Hex(0xFFFFFF).ToRGB(), DeepEquals, RGB{0xFF, 0xFF, 0xFF})
    77  	c.Assert(Hex(0x49d62d).ToRGB(), DeepEquals, RGB{0x49, 0xd6, 0x2d})
    78  
    79  	c.Assert(Hex(0x49d62d).String(), Equals, "Hex{#49D62D}")
    80  	c.Assert(Hex(0x49d62df7).String(), Equals, "Hex{#49D62DF7}")
    81  	c.Assert(Hex(0x49d62d).ToWeb(false), Equals, "#49d62d")
    82  	c.Assert(Hex(0x49d62df7).ToWeb(true), Equals, "#49D62DF7")
    83  	c.Assert(Hex(0xFFAA44).ToWeb(true), Equals, "#FA4")
    84  	c.Assert(Hex(0x0).ToWeb(true), Equals, "#000")
    85  }
    86  
    87  func (s *ColorSuite) TestRGBA(c *C) {
    88  	c.Assert(RGBA{0, 0, 0, 0}.ToHex(), DeepEquals, Hex(0x00000000))
    89  	c.Assert(RGBA{255, 255, 255, 0}.ToHex(), DeepEquals, Hex(0xFFFFFF00))
    90  	c.Assert(RGBA{255, 255, 255, 255}.ToHex(), DeepEquals, Hex(0xFFFFFFFF))
    91  	c.Assert(RGBA{127, 127, 127, 127}.ToHex(), DeepEquals, Hex(0x7F7F7F7F))
    92  
    93  	c.Assert(Hex(0x00000000).ToRGBA(), DeepEquals, RGBA{0, 0, 0, 0})
    94  	c.Assert(Hex(0xFFFFFFFF).ToRGBA(), DeepEquals, RGBA{0xFF, 0xFF, 0xFF, 0xFF})
    95  	c.Assert(Hex(0x7F7F7F7F).ToRGBA(), DeepEquals, RGBA{0x7F, 0x7F, 0x7F, 0x7F})
    96  
    97  	c.Assert(Hex(0xFFAABB).IsRGBA(), Equals, false)
    98  	c.Assert(Hex(0xFFAABB01).IsRGBA(), Equals, true)
    99  
   100  	c.Assert(RGBA{23, 182, 89, 130}.String(), Equals, "RGBA{R:23 G:182 B:89 A:0.51}")
   101  }
   102  
   103  func (s *ColorSuite) TestCMYK(c *C) {
   104  	c.Assert(RGB{0, 0, 0}.ToCMYK(), DeepEquals, CMYK{0.0, 0.0, 0.0, 1.0})
   105  	c.Assert(RGB{255, 255, 255}.ToCMYK(), DeepEquals, CMYK{0.0, 0.0, 0.0, 0.0})
   106  	c.Assert(RGB{102, 102, 102}.ToCMYK(), DeepEquals, CMYK{0.0, 0.0, 0.0, 0.6})
   107  	c.Assert(RGB{102, 0, 0}.ToCMYK(), DeepEquals, CMYK{0.0, 1.0, 1.0, 0.6})
   108  
   109  	c.Assert(CMYK{0.0, 0.0, 0.0, 0.0}.ToRGB(), DeepEquals, RGB{255, 255, 255})
   110  	c.Assert(CMYK{0.0, 0.0, 0.0, 1.0}.ToRGB(), DeepEquals, RGB{0, 0, 0})
   111  	c.Assert(CMYK{0.64, 0.77, 0, 0.17}.ToRGB(), DeepEquals, RGB{76, 48, 211})
   112  
   113  	c.Assert(CMYK{0.64, 0.77, 0, 0.17}.String(), Equals, "CMYK{C:64% M:77% Y:0% K:17%}")
   114  }
   115  
   116  func (s *ColorSuite) TestHSV(c *C) {
   117  	c.Assert(RGB{0, 0, 0}.ToHSV(), DeepEquals, HSV{0.0, 0.0, 0.0})
   118  	c.Assert(RGB{255, 255, 255}.ToHSV(), DeepEquals, HSV{0.0, 0.0, 1.0})
   119  	c.Assert(RGB{255, 0, 0}.ToHSV(), DeepEquals, HSV{0.0, 1.0, 1.0})
   120  	c.Assert(RGB{0, 255, 0}.ToHSV(), DeepEquals, HSV{1.0 / 3.0, 1.0, 1.0})
   121  	c.Assert(RGB{0, 0, 255}.ToHSV(), DeepEquals, HSV{2.0 / 3.0, 1.0, 1.0})
   122  
   123  	c.Assert(HSV{0.0, 0.0, 0.0}.ToRGB(), DeepEquals, RGB{0, 0, 0})
   124  	c.Assert(HSV{0.0, 0.0, 1.0}.ToRGB(), DeepEquals, RGB{255, 255, 255})
   125  
   126  	c.Assert(HSV{0.17, 0.0, 1.0}.ToRGB(), DeepEquals, RGB{255, 255, 255})
   127  	c.Assert(HSV{0.33, 0.0, 1.0}.ToRGB(), DeepEquals, RGB{255, 255, 255})
   128  	c.Assert(HSV{0.49, 0.0, 1.0}.ToRGB(), DeepEquals, RGB{255, 255, 255})
   129  	c.Assert(HSV{0.65, 0.0, 1.0}.ToRGB(), DeepEquals, RGB{255, 255, 255})
   130  	c.Assert(HSV{0.81, 0.0, 1.0}.ToRGB(), DeepEquals, RGB{255, 255, 255})
   131  	c.Assert(HSV{0.97, 0.0, 1.0}.ToRGB(), DeepEquals, RGB{255, 255, 255})
   132  
   133  	c.Assert(RGB{73, 158, 105}.ToHSV().String(), Equals, "HSV{H:143° S:54% V:62%}")
   134  }
   135  
   136  func (s *ColorSuite) TestHSL(c *C) {
   137  	c.Assert(RGB{255, 0, 0}.ToHSL(), DeepEquals, HSL{0.0, 1.0, 0.5})
   138  	c.Assert(RGB{0, 0, 0}.ToHSL(), DeepEquals, HSL{0.0, 0.0, 0.0})
   139  	c.Assert(RGB{63, 191, 191}.ToHSL(), DeepEquals, HSL{0.5, 0.5039370078740157, 0.4980392156862745})
   140  	c.Assert(RGB{255, 201, 201}.ToHSL(), DeepEquals, HSL{0.0, 1.0, 0.8941176470588235})
   141  	c.Assert(RGB{255, 130, 245}.ToHSL(), DeepEquals, HSL{0.8466666666666667, 1.0, 0.7549019607843137})
   142  	c.Assert(RGB{46, 196, 255}.ToHSL(), DeepEquals, HSL{0.5470494417862839, 1.0, 0.5901960784313726})
   143  
   144  	c.Assert(HSL{0.0, 0.0, 0.0}.ToRGB(), DeepEquals, RGB{0, 0, 0})
   145  	c.Assert(HSL{0.0, 1.0, 0.5}.ToRGB(), DeepEquals, RGB{255, 0, 0})
   146  	c.Assert(HSL{0.6833333333333332, 0.7079646017699115, 0.5568627450980392}.ToRGB(), DeepEquals, RGB{77, 62, 222})
   147  
   148  	c.Assert(RGB{146, 93, 176}.ToHSL().String(), Equals, "HSL{H:278° S:34% L:53%}")
   149  }
   150  
   151  func (s *ColorSuite) TestHUE(c *C) {
   152  	c.Assert(HUE2RGB(0.6, 0.3, 0.12), Equals, 0.384)
   153  	c.Assert(HUE2RGB(0.6, 0.3, 0.35), Equals, 0.3)
   154  	c.Assert(HUE2RGB(0.6, 0.3, 0.584), Equals, 0.4512)
   155  	c.Assert(HUE2RGB(0.6, 0.3, 0.85), Equals, 0.6)
   156  }
   157  
   158  func (s *ColorSuite) TestTerm(c *C) {
   159  	c.Assert(RGB{0, 175, 175}.ToTerm(), Equals, 37)
   160  	c.Assert(RGB{255, 255, 0}.ToTerm(), Equals, 226)
   161  	c.Assert(RGB{135, 175, 215}.ToTerm(), Equals, 110)
   162  	// grayscale
   163  	c.Assert(RGB{175, 175, 175}.ToTerm(), Equals, 145)
   164  	c.Assert(RGB{18, 18, 18}.ToTerm(), Equals, 233)
   165  	c.Assert(RGB{48, 48, 48}.ToTerm(), Equals, 236)
   166  	c.Assert(RGB{238, 238, 238}.ToTerm(), Equals, 255)
   167  }
   168  
   169  func (s *ColorSuite) TestLuminance(c *C) {
   170  	c.Assert(Luminance(Hex(0xffffff).ToRGB()), Equals, 1.0)
   171  	c.Assert(Luminance(Hex(0x000000).ToRGB()), Equals, 0.0)
   172  	c.Assert(Luminance(Hex(0x808080).ToRGB()), Equals, 0.2158605001138992)
   173  	c.Assert(Luminance(Hex(0x2861bd).ToRGB()), Equals, 0.12674627666892935)
   174  }
   175  
   176  func (s *ColorSuite) TestContrast(c *C) {
   177  	c.Assert(Contrast(Hex(0xffffff), Hex(0x000000)), Equals, 21.0)
   178  	c.Assert(Contrast(Hex(0x000000), Hex(0x000000)), Equals, 1.0)
   179  	c.Assert(Contrast(Hex(0x755757), Hex(0x63547c)), Equals, 1.0542371982635754)
   180  	c.Assert(Contrast(Hex(0x333333), Hex(0xd0b5ff)), Equals, 7.0606832983463805)
   181  }