Package mosp :: Package test :: Module test_collide
[hide private]
[frames] | no frames]

Source Code for Module mosp.test.test_collide

  1  # -*- coding: utf-8 -*- 
  2   
  3  """Tests for collision""" 
  4   
  5  from sys import path 
  6  path.extend(['.', '..','../..']) 
  7   
  8  import unittest 
  9  from mosp import collide 
 10  from math import sqrt 
 11   
 12  __author__ = "F. Ludwig, P. Tute" 
 13  __maintainer__ = "B. Henne" 
 14  __contact__ = "henne@dcsec.uni-hannover.de" 
 15  __copyright__ = "(c) 2010-2011, DCSec, Leibniz Universitaet Hannover, Germany" 
 16  __license__ = "GPLv3" 
 17   
 18   
19 -class CollideTest(unittest.TestCase):
20 """Tests mosp.collide basic functions.""" 21
23 """Test Line.closest_to_point with four Lines w/different angles.""" 24 h = collide.Line(2.0, 5.0, 8.0, 5.0) 25 self.assertEqual(h.closest_to_point( 0.0, 0.0), (2,5)) 26 self.assertEqual(h.closest_to_point( 5.0, 0.0), (5,5)) 27 self.assertEqual(h.closest_to_point(10.0, 0.0), (8,5)) 28 self.assertEqual(h.closest_to_point(10.0, 5.0), (8,5)) 29 self.assertEqual(h.closest_to_point(10.0,10.0), (8,5)) 30 self.assertEqual(h.closest_to_point( 5.0,10.0), (5,5)) 31 self.assertEqual(h.closest_to_point( 0.0,10.0), (2,5)) 32 self.assertEqual(h.closest_to_point( 0.0, 5.0), (2,5)) 33 v = collide.Line(5.0, 2.0, 5.0, 8.0) 34 self.assertEqual(v.closest_to_point( 0.0, 0.0), (5,2)) 35 self.assertEqual(v.closest_to_point( 5.0, 0.0), (5,2)) 36 self.assertEqual(v.closest_to_point(10.0, 0.0), (5,2)) 37 self.assertEqual(v.closest_to_point(10.0, 5.0), (5,5)) 38 self.assertEqual(v.closest_to_point(10.0,10.0), (5,8)) 39 self.assertEqual(v.closest_to_point( 5.0,10.0), (5,8)) 40 self.assertEqual(v.closest_to_point( 0.0,10.0), (5,8)) 41 self.assertEqual(v.closest_to_point( 0.0, 5.0), (5,5)) 42 a = collide.Line(2.0, 2.0, 8.0, 8.0) 43 self.assertEqual(a.closest_to_point( 0.0, 0.0), (2,2)) 44 self.assertEqual(a.closest_to_point( 5.0, 0.0), (2.5,2.5)) 45 self.assertEqual(a.closest_to_point(10.0, 0.0), (5,5)) 46 self.assertEqual(a.closest_to_point(10.0, 5.0), (7.5,7.5)) 47 self.assertEqual(a.closest_to_point(10.0,10.0), (8,8)) 48 self.assertEqual(a.closest_to_point( 5.0,10.0), (7.5,7.5)) 49 self.assertEqual(a.closest_to_point( 0.0,10.0), (5,5)) 50 self.assertEqual(a.closest_to_point( 0.0, 5.0), (2.5,2.5)) 51 b = collide.Line(2.0, 8.0, 8.0, 2.0) 52 self.assertEqual(b.closest_to_point( 0.0, 0.0), (5,5)) 53 self.assertEqual(b.closest_to_point( 5.0, 0.0), (7.5,2.5)) 54 self.assertEqual(b.closest_to_point(10.0, 0.0), (8,2)) 55 self.assertEqual(b.closest_to_point(10.0, 5.0), (7.5,2.5)) 56 self.assertEqual(b.closest_to_point(10.0,10.0), (5,5)) 57 self.assertEqual(b.closest_to_point( 5.0,10.0), (2.5,7.5)) 58 self.assertEqual(b.closest_to_point( 0.0,10.0), (2,8)) 59 self.assertEqual(b.closest_to_point( 0.0, 5.0), (2.5,7.5))
60 61 # def test_Line_dist_to_point(self): 62 # """Test Line.dist_to_point with four Lines with different angles.""" 63 # h = collide.Line(2.0, 5.0, 8.0, 5.0) 64 # self.assertEqual(h.dist_to_point( 2, 5), (0)) 65 # self.assertEqual(h.dist_to_point( 5, 5), (0)) 66 # self.assertEqual(h.dist_to_point( 8, 5), (0)) 67 # self.assertEqual(h.dist_to_point( 5, 0), (5)) 68 # self.assertEqual(h.dist_to_point( 5,10), (5)) 69 # self.assertEqual(h.dist_to_point( 0, 5), (2)) 70 # self.assertEqual(h.dist_to_point(10, 5), (2)) 71 # self.assertEqual(h.dist_to_point( 0, 0), sqrt(2**2+5**2)) 72 # self.assertEqual(h.dist_to_point(10, 0), sqrt(2**2+5**2)) 73 # self.assertEqual(h.dist_to_point( 0,10), sqrt(2**2+5**2)) 74 # self.assertEqual(h.dist_to_point(10,10), sqrt(2**2+5**2)) 75 # v = collide.Line(5.0, 2.0, 5.0, 8.0) 76 # self.assertEqual(v.dist_to_point( 5, 2), (0)) 77 # self.assertEqual(v.dist_to_point( 5, 5), (0)) 78 # self.assertEqual(v.dist_to_point( 5, 8), (0)) 79 # self.assertEqual(v.dist_to_point( 0, 5), (5)) 80 # self.assertEqual(v.dist_to_point(10, 5), (5)) 81 # self.assertEqual(v.dist_to_point( 5, 0), (2)) 82 # self.assertEqual(v.dist_to_point( 5,10), (2)) 83 # self.assertEqual(v.dist_to_point( 0, 0), sqrt(5**2+2**2)) 84 # self.assertEqual(v.dist_to_point(10, 0), sqrt(5**2+2**2)) 85 # self.assertEqual(v.dist_to_point( 0,10), sqrt(5**2+2**2)) 86 # self.assertEqual(v.dist_to_point(10,10), sqrt(5**2+2**2)) 87 # a = collide.Line(2.0, 2.0, 8.0, 8.0) 88 # self.assertEqual(a.dist_to_point( 2, 2), (0)) 89 # self.assertEqual(a.dist_to_point( 8, 8), (0)) 90 # self.assertEqual(a.dist_to_point( 2, 0), (2)) 91 # self.assertEqual(a.dist_to_point(10, 8), (2)) 92 # self.assertEqual(a.dist_to_point( 0, 0), sqrt(2**2+2**2)) 93 # self.assertEqual(a.dist_to_point(10,10), sqrt(2**2+2**2)) 94 # self.assertEqual(a.dist_to_point( 7, 3), sqrt(2**2+2**2)) 95 # self.assertEqual(a.dist_to_point( 6, 7), sqrt(1**2+1**2)/2) 96 # b = collide.Line(2.0, 8.0, 8.0, 2.0) 97 # self.assertEqual(b.dist_to_point( 2, 8), (0)) 98 # self.assertEqual(b.dist_to_point( 8, 2), (0)) 99 # self.assertEqual(b.dist_to_point( 2,10), (2)) 100 # self.assertEqual(b.dist_to_point( 8, 0), (2)) 101 # self.assertEqual(b.dist_to_point( 0,10), sqrt(2**2+2**2)) 102 # self.assertEqual(b.dist_to_point(10, 0), sqrt(2**2+2**2)) 103 # self.assertEqual(a.dist_to_point( 7, 3), sqrt(2**2+2**2)) 104 # self.assertEqual(a.dist_to_point( 6, 7), sqrt(1**2+1**2)/2) 105
107 """Test collision of different lines with two circles. 108 109 Tests collision of lines with circles. Lines are inside circle, 110 partly inside the circle, tangent to circle, starting at circle, 111 and fully outside the circle, w/different angles and sides.""" 112 w = collide.World() 113 a = collide.Line(2, 4, 4, 2) # in circle 1, 135° 114 b = collide.Line(4, 3, 6, 3) # partly in circle 1, horizontal 115 c = collide.Line(1, 5, 6, 5) # north tangent of circle 1, horizontal 116 d = collide.Line(3, 5, 3, 7) # connected in northest point of circle 1, vertical 117 e = collide.Line(1, 1, 2, 1) # out of/below circle 1, horizontal, in circle 2 118 f = collide.Line(-2, -2, 2, -2) # in circle 2, horizontal 119 g = collide.Line(-5, 1, -5, -3) # west tangent of circle 2, vertical 120 h = collide.Line(-4, -6, 5, -6) # south tangent of circle 2, horizontal 121 i = collide.Line(-4, -5.99, 5, -5.99) # cutting of circle 2, horizontal 122 j = collide.Line(-4, -6.01, 4, -6.01) # out of/below circle 2, horizontal 123 k = collide.Line(-5, 2, -3, 4) # out of of circle 2, 45° 124 w.update([a,b,c,d,e,f,g,h,i,j,k]) 125 w.calculate_grid() 126 self.assertEqual(w.collide_circle_impl0(3,3,2), set([a, b, c, d])) 127 self.assertEqual(w.collide_circle_impl1(3,3,2), set([a, b, c, d])) 128 self.assertEqual(w.collide_circle_impl2(3,3,2), set([a, b, c, d])) 129 self.assertEqual(w.collide_circle_impl0(-1,-2,4), set([e, f, i, h, g])) 130 self.assertEqual(w.collide_circle_impl1(-1,-2,4), set([e, f, i, h, g])) 131 self.assertEqual(w.collide_circle_impl2(-1,-2,4), set([e, f, i, h, g]))
132
134 """Tests collision of cirle and points.""" 135 w = collide.World() 136 a = collide.Point(1,1) 137 b = collide.Point(2,2) 138 c = collide.Point(3,3) 139 d = collide.Point(4,4) 140 e = collide.Point(5,5) 141 t = collide.Point(3,5) 142 u = collide.Point(1,3) 143 v = collide.Point(1,2.999) 144 w.update([a,b,c,d,e, t, u, v]) 145 w.calculate_grid() 146 self.assertEqual(w.collide_circle_impl0(3,3,2), set([b, c, d, t, u])) 147 self.assertEqual(w.collide_circle_impl1(3,3,2), set([b, c, d, t, u])) 148 self.assertEqual(w.collide_circle_impl2(3,3,2), set([b, c, d, t, u]))
149
151 """Tests collision of lines and a rectangle.""" 152 w = collide.World() 153 a = collide.Line(0,0,2,0) # on rect 154 b = collide.Line(0.5,0.5,1.5,1.5) # in rect 155 c = collide.Line(2,2,5,7) # one point on rect line 156 d = collide.Line(1,3,-1,1) # one point on rect corner 157 e = collide.Line(-0.01,0,-0.01,2) # outside, west of rect 158 f = collide.Line(1,3,-3,-0.999) # outside 159 w.update([a,b,c,d,e,f]) 160 w.calculate_grid() 161 self.assertEqual(w.collide_rectangle(0, 0, 2, 2), set([a,b,c,d]))
162
164 """Tests collision of points and a rectangle.""" 165 w = collide.World() 166 a = collide.Point(-1,-1) # outside 167 b = collide.Point(0,0) # on corner of rect 168 c = collide.Point(1,1) # in/center of rect 169 d = collide.Point(2,2) # in line of recht 170 e = collide.Point(3,3) # outside 171 f = collide.Point(3,5) # outside 172 g = collide.Point(0,1) # on line of rect 173 h = collide.Point(2,2.0001) # outside 174 w.update([a,b,c,d,e,f,g,h]) 175 w.calculate_grid() 176 self.assertEqual(w.collide_rectangle(0, 0, 2, 2), set([b,c,d,g]))
177 178 179 if __name__ == "__main__": 180 unittest.main() 181