v2 / vlib / gg / color_test.v
102 lines · 88 sloc · 2.73 KB · bbb61ab3687afe512a1fa12492c876d011626107
Raw
1// vtest build: !musl? // gx now transitively imports sokol, and that needs GL/gl.h, which is not installed on the musl CIs
2import gg
3
4fn test_hex() {
5 // valid colors
6 // a := gg.hex(0x6c5ce7ff)
7 // b := gg.rgba(108, 92, 231, 255)
8 assert gg.hex(0xff6600) == gg.rgb(255, 102, 0) // orange
9 // doesn't give right value with short hex value
10 short := gg.hex(0xfff)
11 assert short != gg.white
12 // assert short == gg.Color{0, 0, 15, 255}
13}
14
15fn test_add() {
16 a := gg.rgba(100, 100, 100, 100)
17 b := gg.rgba(100, 100, 100, 100)
18 r := gg.rgba(200, 200, 200, 200)
19 assert (a + b) == r
20
21 assert gg.red + gg.green == gg.yellow
22 assert gg.red + gg.blue == gg.magenta
23 assert gg.green + gg.blue == gg.cyan
24}
25
26fn test_sub() {
27 a := gg.rgba(100, 100, 100, 50)
28 b := gg.rgba(100, 100, 100, 100)
29 r := gg.rgba(0, 0, 0, 100)
30 assert (a - b) == r
31
32 assert gg.white - gg.green == gg.magenta
33 assert gg.white - gg.blue == gg.yellow
34 assert gg.white - gg.red == gg.cyan
35}
36
37fn test_mult() {
38 a := gg.rgba(10, 10, 10, 10)
39 b := gg.rgba(10, 10, 10, 10)
40 r := gg.rgba(100, 100, 100, 100)
41 assert (a * b) == r
42}
43
44fn test_div() {
45 a := gg.rgba(100, 100, 100, 100)
46 b := gg.rgba(10, 10, 10, 10)
47 r := gg.rgba(10, 10, 10, 10)
48 assert (a / b) == r
49}
50
51fn test_rgba8() {
52 assert gg.white.rgba8() == -1
53 assert gg.black.rgba8() == 255
54 assert gg.red.rgba8() == -16776961
55 assert gg.green.rgba8() == 16711935
56 assert gg.blue.rgba8() == 65535
57}
58
59fn test_bgra8() {
60 assert gg.white.bgra8() == -1
61 assert gg.black.bgra8() == 255
62 assert gg.red.bgra8() == 65535
63 assert gg.green.bgra8() == 16711935
64 assert gg.blue.bgra8() == -16776961
65}
66
67fn test_abgr8() {
68 assert gg.white.abgr8() == -1
69 assert gg.black.abgr8() == -16777216
70 assert gg.red.abgr8() == -16776961
71 assert gg.green.abgr8() == -16711936
72 assert gg.blue.abgr8() == -65536
73}
74
75fn test_over() {
76 // shorten names:
77 r := gg.red
78 g := gg.green
79 b := gg.blue
80 y := gg.yellow
81 semi_r := gg.Color{255, 0, 0, 128}
82 semi_g := gg.Color{0, 255, 0, 128}
83 semi_b := gg.Color{0, 0, 255, 128}
84 // fully opaque colors, should be preserved when laid *over* any others:
85 assert b.over(g) == b
86 assert r.over(g) == r
87 assert y.over(r) == y
88 assert g.over(r) == g
89
90 // half transparent pure colors, *over* pure colors, should preserve them correspondingly:
91 assert semi_r.over(r) == gg.Color{255, 0, 0, 255} // preserve pure red
92 assert semi_r.over(g) == gg.Color{128, 126, 0, 255}
93 assert semi_r.over(b) == gg.Color{128, 0, 126, 255}
94
95 assert semi_g.over(r) == gg.Color{126, 128, 0, 255}
96 assert semi_g.over(g) == gg.Color{0, 255, 0, 255} // preserve pure green
97 assert semi_g.over(b) == gg.Color{0, 128, 126, 255}
98
99 assert semi_b.over(r) == gg.Color{126, 0, 128, 255}
100 assert semi_b.over(g) == gg.Color{0, 126, 128, 255}
101 assert semi_b.over(b) == gg.Color{0, 0, 255, 255} // preserve pure blue
102}
103