rgba_test.go raw
1 // SPDX-License-Identifier: Unlicense OR MIT
2
3 package f32color
4
5 import (
6 "image/color"
7 "testing"
8 )
9
10 func TestNRGBAToRGBA_PostAlpha_Boundary(t *testing.T) {
11 for col := 0; col <= 0xFF; col++ {
12 for alpha := 0; alpha <= 0xFF; alpha++ {
13 in := color.NRGBA{R: uint8(col), A: uint8(alpha)}
14 premul := NRGBAToRGBA_PostAlpha(in)
15 if premul.A != uint8(alpha) {
16 t.Errorf("%v: got %v expected %v", in, premul.A, alpha)
17 }
18 if premul.R > premul.A {
19 t.Errorf("%v: R=%v > A=%v", in, premul.R, premul.A)
20 }
21 }
22 }
23 }
24
25 func TestNRGBAToLinearRGBA_Boundary(t *testing.T) {
26 for col := 0; col <= 0xFF; col++ {
27 for alpha := 0; alpha <= 0xFF; alpha++ {
28 in := color.NRGBA{R: uint8(col), A: uint8(alpha)}
29 premul := NRGBAToLinearRGBA(in)
30 if premul.A != uint8(alpha) {
31 t.Errorf("%v: got %v expected %v", in, premul.A, alpha)
32 }
33 if premul.R > premul.A {
34 t.Errorf("%v: R=%v > A=%v", in, premul.R, premul.A)
35 }
36 }
37 }
38 }
39
40 func TestLinearToRGBARoundtrip(t *testing.T) {
41 for col := 0; col <= 0xFF; col++ {
42 for alpha := 0; alpha <= 0xFF; alpha++ {
43 want := color.NRGBA{R: uint8(col), A: uint8(alpha)}
44 if alpha == 0 {
45 want.R = 0
46 }
47 got := LinearFromSRGB(want).SRGB()
48 if want != got {
49 t.Errorf("got %v expected %v", got, want)
50 }
51 }
52 }
53 }
54