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 }