mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
affine: Add more tests for (*ColorM).Invert
This commit is contained in:
parent
2e8e35750d
commit
6c33ed107f
@ -104,11 +104,7 @@ func (c *ColorM) ChangeHSV(hueTheta float64, saturationScale float64, valueScale
|
|||||||
|
|
||||||
// Element returns a value of a matrix at (i, j).
|
// Element returns a value of a matrix at (i, j).
|
||||||
func (c *ColorM) Element(i, j int) float64 {
|
func (c *ColorM) Element(i, j int) float64 {
|
||||||
b, t := c.impl.UnsafeElements()
|
return float64(c.impl.Element(i, j))
|
||||||
if j < ColorMDim-1 {
|
|
||||||
return float64(b[i+j*(ColorMDim-1)])
|
|
||||||
}
|
|
||||||
return float64(t[i])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetElement sets an element at (i, j).
|
// SetElement sets an element at (i, j).
|
||||||
|
@ -319,6 +319,15 @@ func (c *ColorM) Invert() *ColorM {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Element returns a value of a matrix at (i, j).
|
||||||
|
func (c *ColorM) Element(i, j int) float32 {
|
||||||
|
b, t := c.UnsafeElements()
|
||||||
|
if j < ColorMDim-1 {
|
||||||
|
return b[i+j*(ColorMDim-1)]
|
||||||
|
}
|
||||||
|
return t[i]
|
||||||
|
}
|
||||||
|
|
||||||
// SetElement sets an element at (i, j).
|
// SetElement sets an element at (i, j).
|
||||||
func (c *ColorM) SetElement(i, j int, element float32) *ColorM {
|
func (c *ColorM) SetElement(i, j int, element float32) *ColorM {
|
||||||
newC := &ColorM{
|
newC := &ColorM{
|
||||||
|
@ -136,6 +136,26 @@ func arrayToColorM(es [4][5]float32) *ColorM {
|
|||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func abs(x float32) float32 {
|
||||||
|
if x < 0 {
|
||||||
|
return -x
|
||||||
|
}
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
func equalWithDelta(a, b *ColorM, delta float32) bool {
|
||||||
|
for j := 0; j < 5; j++ {
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
ea := a.Element(i, j)
|
||||||
|
eb := b.Element(i, j)
|
||||||
|
if abs(ea-eb) > delta {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func TestColorMInvert(t *testing.T) {
|
func TestColorMInvert(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
In *ColorM
|
In *ColorM
|
||||||
@ -159,10 +179,24 @@ func TestColorMInvert(t *testing.T) {
|
|||||||
{7, -4, -2, 1, 0},
|
{7, -4, -2, 1, 0},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
In: arrayToColorM([4][5]float32{
|
||||||
|
{1, 2, 3, 4, 5},
|
||||||
|
{5, 1, 2, 3, 4},
|
||||||
|
{4, 5, 1, 2, 3},
|
||||||
|
{3, 4, 5, 1, 2},
|
||||||
|
}),
|
||||||
|
Out: arrayToColorM([4][5]float32{
|
||||||
|
{-6 / 35.0, 3 / 14.0, 1 / 70.0, 1 / 70.0, -1 / 14.0},
|
||||||
|
{1 / 35.0, -13 / 70.0, 3 / 14.0, 1 / 70.0, -1 / 14.0},
|
||||||
|
{1 / 35.0, 1 / 70.0, -13 / 70.0, 3 / 14.0, -1 / 14.0},
|
||||||
|
{9 / 35.0, 1 / 35.0, 1 / 35.0, -6 / 35.0, -8 / 7.0},
|
||||||
|
}),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
if got, want := c.In.Invert(), c.Out; !got.Equals(want) {
|
if got, want := c.In.Invert(), c.Out; !equalWithDelta(got, want, 1e-6) {
|
||||||
t.Errorf("got: %v, want: %v", got, want)
|
t.Errorf("got: %v, want: %v", got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user