doodle/draw/line_test.go
Noah Petherbridge e141203c4b Basic Collision Detection, Toggle Between Play/Edit
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.
2018-07-23 20:10:53 -07:00

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++
}
}
}