server/robot_test.go

92 lines
1.8 KiB
Go
Raw Normal View History

package main
import (
v "bitbucket.org/hackerbots/vector"
"math"
"testing"
)
func TestCollision(t *testing.T) {
tests := []struct {
g game
r Robot
target v.Vector2d
location *v.Point2d
collision bool
}{
// should intersect with first box
{
g: game{
width: 800,
height: 400,
obstacles: []Obstacle{
Obstacle{
Bounds: v.AABB2d{
v.Point2d{200, 100},
v.Point2d{300, 200},
},
},
Obstacle{
Bounds: v.AABB2d{
v.Point2d{400, 200},
v.Point2d{600, 300},
},
},
},
},
r: Robot{
Position: v.Point2d{100, 100},
// Heading: v.Vector2d{1, 1},
},
target: v.Vector2d{900, 350},
location: &v.Point2d{200, 138.88889},
collision: true,
},
// shouldn't intersect at all
{
g: game{
width: 800,
height: 400,
obstacles: []Obstacle{
Obstacle{
Bounds: v.AABB2d{
v.Point2d{200, 100},
v.Point2d{300, 200},
},
},
},
},
r: Robot{
Position: v.Point2d{100, 100},
},
target: v.Vector2d{0, 0},
collision: false,
},
}
for _, test := range tests {
collision, location, _ := test.r.checkCollisions(&test.g, test.target)
if collision != test.collision {
t.Errorf("expected: %t, actual: %t", test.collision, collision)
}
if test.location == nil {
if location != nil {
t.Errorf("expected: %+v, actual: %+v", test.location, location)
}
}
if test.location != nil {
if location == nil {
t.Errorf("expected: %+v, actual: %+v", test.location, location)
} else {
if math.Abs(float64(location.X-test.location.X)) > 1e-4 || math.Abs(float64(location.Y-test.location.Y)) > 1e-4 {
t.Errorf("expected: %+v, actual: %+v", test.location, location)
}
}
}
}
}
// XXX
func TestBotBotCollisions(t *testing.T) {
t.Skip("NYI")
}