2 Copyright (c) 2009 Hanno Braun <hanno@habraun.net>
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
19 package net
.habraun
.kong
.physics
24 import org
.junit
.Assert
._
28 class SimpleNarrowPhaseTest
{
31 def verifyIsNarrowPhase
{
32 val narrowPhase
= new SimpleNarrowPhase
33 assertTrue(narrowPhase
.isInstanceOf
[NarrowPhase
])
39 def inspectTwoNoShapesExpectNoCollision
{
40 val narrowPhase
= new SimpleNarrowPhase
47 assertEquals(None
, narrowPhase
.inspectCollision(b1
, b2
))
53 def inspectTwoCirclesExpectNoCollision
{
54 val narrowPhase
= new SimpleNarrowPhase
57 b1
.position
= Vec2D(0, 0)
60 b2
.position
= Vec2D(3, 0)
63 assertEquals(None
, narrowPhase
.inspectCollision(b1
, b2
))
69 def inspectTwoCirclesExpectCollision
{
70 val narrowPhase
= new SimpleNarrowPhase
73 b1
.position
= Vec2D(0, 0)
76 b2
.position
= Vec2D(0.5, 0)
79 val expectedCollision
= Collision(1.0, Contact(b1
, b2
, Vec2D(1, 0), Vec2D(-1, 0), Vec2D(0, 0)))
81 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(b1
, b2
))
87 def inspectTwoCirclesExpectCollision2
{
88 val narrowPhase
= new SimpleNarrowPhase
91 b1
.position
= Vec2D(0, 0)
94 b2
.position
= Vec2D(3, 0)
97 val expectedCollision
= Collision(1.0, Contact(b1
, b2
, Vec2D(1, 0), Vec2D(-1, 0), Vec2D(0, 0)))
99 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(b1
, b2
))
105 def inspectCircleAndNoShapeExpectNoCollision
{
106 val narrowPhase
= new SimpleNarrowPhase
109 b1
.position
= Vec2D(0, 0)
112 b2
.position
= Vec2D(0, 0.5)
115 assertEquals(None
, narrowPhase
.inspectCollision(b1
, b2
))
121 def inspectCircleAndLineSegmentExpectNoCollision
{
122 val narrowPhase
= new SimpleNarrowPhase
125 b1
.position
= Vec2D(0, 0)
128 b2
.position
= Vec2D(0, 2)
129 b2
.shape
= LineSegment(Vec2D(-1, 0), Vec2D(1, 0))
131 assertEquals(None
, narrowPhase
.inspectCollision(b1
, b2
))
137 def inspectLineSegmentAndCircleExpectNoCollision
{
138 val narrowPhase
= new SimpleNarrowPhase
141 b1
.position
= Vec2D(0, 0)
144 b2
.position
= Vec2D(0, 2)
145 b2
.shape
= LineSegment(Vec2D(-1, 0), Vec2D(1, 0))
147 assertEquals(None
, narrowPhase
.inspectCollision(b2
, b1
))
153 def inspectCircleAndLineSegmentExpectCollision
{
154 val narrowPhase
= new SimpleNarrowPhase
157 b1
.position
= Vec2D(0, 0)
160 b2
.position
= Vec2D(0, 0.5)
161 b2
.shape
= LineSegment(Vec2D(-1, 0), Vec2D(1, 0))
163 val expectedCollision
= Collision(1.0, Contact(b1
, b2
, Vec2D(0, 1), Vec2D(0, -1), Vec2D(0, 0)))
165 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(b1
, b2
))
171 def inspectLineSegmentAndCirlceExpectCollision
{
172 val narrowPhase
= new SimpleNarrowPhase
175 b1
.position
= Vec2D(0, 0)
178 b2
.position
= Vec2D(0, 0.5)
179 b2
.shape
= LineSegment(Vec2D(-1, 0), Vec2D(1, 0))
181 val expectedCollision
= Collision(1.0, Contact(b2
, b1
, Vec2D(0, -1), Vec2D(0, 1), Vec2D(0, 0)))
183 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(b2
, b1
))
189 def inspectTwoLineSegmentsExpectNoCollisionEvenIfTheyCollide
{
190 val narrowPhase
= new SimpleNarrowPhase
193 b1
.position
= Vec2D(0, 1)
194 b1
.shape
= LineSegment(Vec2D(0, 0), Vec2D(2, -2))
196 b2
.position
= Vec2D(0, -1)
197 b2
.shape
= LineSegment(Vec2D(0, 0), Vec2D(2, 2))
199 assertEquals(None
, narrowPhase
.inspectCollision(b1
, b2
))