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

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