github.com/jmigpin/editor@v1.6.0/util/imageutil/hsva_test.go (about)

     1  package imageutil
     2  
     3  import (
     4  	"image/color"
     5  	"testing"
     6  )
     7  
     8  func init() {
     9  	//log.SetFlags(log.Llongfile)
    10  	//log.SetFlags(0)
    11  }
    12  
    13  func cmpRgbaHsv(t *testing.T, i int, rgba color.RGBA, hsv HSV) {
    14  	t.Helper()
    15  	c1 := HSVModel.Convert(rgba).(HSV)
    16  	//if c1 != hsv {
    17  	if !similarHsv(c1, hsv) {
    18  		t.Logf("\ninput %v:\n%v\nexpecting:\n%v\ngot:\n%v\n", i, rgba, hsv, c1)
    19  		t.Fatal()
    20  	}
    21  }
    22  
    23  func cmpHsvRgba(t *testing.T, i int, hsv HSV, rgba color.RGBA) {
    24  	t.Helper()
    25  	c1 := color.RGBAModel.Convert(hsv).(color.RGBA)
    26  	//if c1 != rgba {
    27  	if !similarRgba(c1, rgba) {
    28  		t.Logf("\ninput %v:\n%v\nexpecting:\n%v\ngot:\n%v\n", i, hsv, rgba, c1)
    29  		t.Fatal()
    30  	}
    31  }
    32  
    33  func similarHsv(v1, v2 HSV) bool {
    34  	u1 := dabs(int(v1.H), int(v2.H))
    35  	u2 := dabs(int(v1.S), int(v2.S))
    36  	u3 := dabs(int(v1.V), int(v2.V))
    37  	d := 3
    38  	return u1 < d && u2 < d && u3 < d
    39  }
    40  func similarRgba(v1, v2 color.RGBA) bool {
    41  	u1 := dabs(int(v1.R), int(v2.R))
    42  	u2 := dabs(int(v1.G), int(v2.G))
    43  	u3 := dabs(int(v1.B), int(v2.B))
    44  	d := 1
    45  	return u1 < d && u2 < d && u3 < d
    46  }
    47  func dabs(a, b int) int {
    48  	d := a - b
    49  	if d < 0 {
    50  		d = -d
    51  	}
    52  	return d
    53  }
    54  
    55  //------------
    56  
    57  func TestHSV1(t *testing.T) {
    58  	u := []interface{}{
    59  		MakeHSV(0, 0, 20),
    60  		color.RGBA{51, 51, 51, 255},
    61  
    62  		MakeHSV(300, 27, 20),
    63  		color.RGBA{51, 37, 51, 255},
    64  
    65  		MakeHSV(300, 84, 63),
    66  		//color.RGBA{161, 26, 161, 255},
    67  		color.RGBA{160, 25, 160, 255},
    68  
    69  		MakeHSV(130, 61, 89),
    70  		//color.RGBA{89, 227, 112, 255},
    71  		color.RGBA{88, 226, 111, 255},
    72  
    73  		MakeHSV(310, 100, 100),
    74  		//color.RGBA{255, 0, 212, 255},
    75  		color.RGBA{255, 0, 213, 255},
    76  	}
    77  
    78  	for i := 0; i < len(u); i += 2 {
    79  		c1 := u[i].(HSV)
    80  		c2 := u[i+1].(color.RGBA)
    81  
    82  		cmpHsvRgba(t, i/2, c1, c2)
    83  		cmpRgbaHsv(t, i/2, c2, c1)
    84  	}
    85  }