Noah Petherbridge
e141203c4b
Known bugs: * The Pixel format in the Grid has DX and DY attributes and it wreaks havoc on collision detection in Play Mode when you come straight from the editor. Reloading the map from disk to play is OK cuz it lacks these attrs.
87 lines
1.3 KiB
Go
87 lines
1.3 KiB
Go
package draw_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"git.kirsle.net/apps/doodle/draw"
|
|
"git.kirsle.net/apps/doodle/render"
|
|
)
|
|
|
|
func TestLine(t *testing.T) {
|
|
type task struct {
|
|
X1 int32
|
|
X2 int32
|
|
Y1 int32
|
|
Y2 int32
|
|
Expect []render.Point
|
|
}
|
|
toString := func(t task) string {
|
|
return fmt.Sprintf("Line<%d,%d -> %d,%d>",
|
|
t.X1, t.Y1,
|
|
t.X2, t.Y2,
|
|
)
|
|
}
|
|
|
|
var tasks = []task{
|
|
task{
|
|
X1: 0,
|
|
Y1: 0,
|
|
X2: 0,
|
|
Y2: 10,
|
|
Expect: []render.Point{
|
|
{X: 0, Y: 0},
|
|
{X: 0, Y: 1},
|
|
{X: 0, Y: 2},
|
|
{X: 0, Y: 3},
|
|
{X: 0, Y: 4},
|
|
{X: 0, Y: 5},
|
|
{X: 0, Y: 6},
|
|
{X: 0, Y: 7},
|
|
{X: 0, Y: 8},
|
|
{X: 0, Y: 9},
|
|
{X: 0, Y: 10},
|
|
},
|
|
},
|
|
task{
|
|
X1: 10,
|
|
Y1: 10,
|
|
X2: 15,
|
|
Y2: 15,
|
|
Expect: []render.Point{
|
|
{X: 10, Y: 10},
|
|
{X: 11, Y: 11},
|
|
{X: 12, Y: 12},
|
|
{X: 13, Y: 13},
|
|
{X: 14, Y: 14},
|
|
{X: 15, Y: 15},
|
|
},
|
|
},
|
|
}
|
|
for _, test := range tasks {
|
|
gen := draw.Line(test.X1, test.Y1, test.X2, test.Y2)
|
|
var i int
|
|
for point := range gen {
|
|
if i >= len(test.Expect) {
|
|
t.Errorf("%s: Got more pixels back than expected: %s",
|
|
toString(test),
|
|
point,
|
|
)
|
|
break
|
|
}
|
|
|
|
expect := test.Expect[i]
|
|
if expect != point {
|
|
t.Errorf("%s: at index %d I got %s but expected %s",
|
|
toString(test),
|
|
i,
|
|
point,
|
|
expect,
|
|
)
|
|
}
|
|
|
|
i++
|
|
}
|
|
}
|
|
}
|