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") }