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 }