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 }