mirror of
https://github.com/nxshock/colorcrop.git
synced 2025-07-01 00:13:44 +05:00
107 lines
3.4 KiB
Go
107 lines
3.4 KiB
Go
package colorcrop
|
|
|
|
import (
|
|
"image/color"
|
|
"math"
|
|
"testing"
|
|
)
|
|
|
|
func TestLinearComparators(t *testing.T) {
|
|
comparators := []comparator{CmpEuclidean, CmpRGBComponents}
|
|
|
|
tests := []struct {
|
|
color1 color.Color
|
|
color2 color.Color
|
|
exp float64
|
|
got float64
|
|
}{
|
|
{color1: color.RGBA{0, 0, 0, 255}, color2: color.RGBA{0, 0, 0, 255}, exp: 0.00}, // same black colors
|
|
{color1: color.RGBA{255, 255, 255, 255}, color2: color.RGBA{255, 255, 255, 255}, exp: 0.00}, // same white colors
|
|
{color1: color.RGBA{0, 0, 0, 255}, color2: color.RGBA{255, 255, 255, 255}, exp: 1.00}, // different (black and white) colors
|
|
{color1: color.RGBA{255, 255, 255, 255}, color2: color.RGBA{0, 0, 0, 255}, exp: 1.00}, // different (white and black) colors
|
|
{color1: color.RGBA{255, 255, 255, 0}, color2: color.RGBA{255, 255, 255, 255}, exp: 0.00}, // must ignore alpha channel
|
|
}
|
|
|
|
for _, comparator := range comparators {
|
|
for _, test := range tests {
|
|
test.got = comparator(test.color1, test.color2)
|
|
if math.Abs(test.got-test.exp) > epsilon {
|
|
t.Errorf("%v %v: expected %.8f, got %.8f",
|
|
test.color1, test.color2, test.exp, test.got)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCmpCIE76(t *testing.T) {
|
|
type test struct {
|
|
color1 color.Color
|
|
color2 color.Color
|
|
exp float64
|
|
got float64
|
|
}
|
|
|
|
tests := []test{
|
|
{color1: color.RGBA{0, 0, 0, 255}, color2: color.RGBA{0, 0, 0, 255}, exp: 0.00000000 / 149.95514755}, // same black colors
|
|
{color1: color.RGBA{255, 255, 255, 255}, color2: color.RGBA{255, 255, 255, 255}, exp: 0.00000000 / 149.95514755}, // same white colors
|
|
{color1: color.RGBA{0, 0, 0, 255}, color2: color.RGBA{255, 255, 255, 255}, exp: 100.00000068 / 149.95514755}, // different (black and white) colors
|
|
{color1: color.RGBA{255, 255, 255, 255}, color2: color.RGBA{0, 0, 0, 255}, exp: 100.00000068 / 149.95514755}, // different (white and black) colors
|
|
{color1: color.RGBA{255, 0, 0, 255}, color2: color.RGBA{255, 255, 255, 255}, exp: 114.55897602 / 149.95514755}, // different (red and white) colors
|
|
{color1: color.RGBA{0, 255, 0, 255}, color2: color.RGBA{255, 255, 255, 255}, exp: 120.41559907 / 149.95514755}, // different (green and white) colors
|
|
{color1: color.RGBA{0, 0, 255, 255}, color2: color.RGBA{255, 255, 255, 255}, exp: 149.95514755 / 149.95514755}, // different (blue and white) colors
|
|
}
|
|
|
|
for _, test := range tests {
|
|
test.got = CmpCIE76(test.color1, test.color2)
|
|
if math.Abs(test.got-test.exp) > epsilon {
|
|
t.Errorf("%v %v: expected %.8f, got %.8f",
|
|
test.color1, test.color2, test.exp, test.got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMin(t *testing.T) {
|
|
type test struct {
|
|
x uint32
|
|
y uint32
|
|
expected uint32
|
|
got uint32
|
|
}
|
|
|
|
tests := []test{
|
|
{x: 1, y: 2, expected: 1},
|
|
{x: 3, y: 2, expected: 2},
|
|
{x: 4, y: 4, expected: 4},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
test.got = min(test.x, test.y)
|
|
if test.got != test.expected {
|
|
t.Errorf("min(%d, %d): expected %d, got %d",
|
|
test.x, test.y, test.expected, test.got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMax(t *testing.T) {
|
|
type test struct {
|
|
x uint32
|
|
y uint32
|
|
expected uint32
|
|
got uint32
|
|
}
|
|
|
|
tests := []test{
|
|
{x: 1, y: 2, expected: 2},
|
|
{x: 3, y: 2, expected: 3},
|
|
{x: 4, y: 4, expected: 4},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
test.got = max(test.x, test.y)
|
|
if test.got != test.expected {
|
|
t.Errorf("max(%d, %d): expected %d, got %d",
|
|
test.x, test.y, test.expected, test.got)
|
|
}
|
|
}
|
|
}
|