11import unittest
2+ import math
23
34from pygorithm .geometry import (
4- rect_broad_phase
5- )
6-
5+ rect_broad_phase ,
6+ vector2 ,
7+ axisall ,
8+ line2 ,
9+ polygon2
10+ )
711
812class TestCollisionDetection (unittest .TestCase ):
913 def setUp (self ):
@@ -28,5 +32,187 @@ def test_collision_detect(self):
2832 self .assertTrue (rect_broad_phase .broad_phase (self .simpleRect1 , self .simpleRect2 ))
2933 self .assertFalse (rect_broad_phase .broad_phase (self .simpleRect3 , self .simpleRect4 ))
3034
35+ class TestVector2 (unittest .TestCase ):
36+ def test_constructor (self ):
37+ vec1 = vector2 .Vector2 (0 , 5 )
38+ self .assertEqual (0 , vec1 .x )
39+ self .assertEqual (5 , vec1 .y )
40+
41+ vec2 = vector2 .Vector2 (x = 2 , y = 3 )
42+ self .assertEqual (2 , vec2 .x )
43+ self .assertEqual (3 , vec2 .y )
44+
45+ vec3 = vector2 .Vector2 (vec2 )
46+ self .assertEqual (2 , vec3 .x )
47+ self .assertEqual (3 , vec3 .y )
48+
49+ vec4 = vector2 .Vector2 ( (7 , 11 ) )
50+ self .assertEqual (7 , vec4 .x )
51+ self .assertEqual (11 , vec4 .y )
52+
53+ def test_add (self ):
54+ vec1 = vector2 .Vector2 (3 , 5 )
55+ vec2 = vector2 .Vector2 (2 , 6 )
56+
57+ vec3 = vec1 + vec2
58+ self .assertEqual (5 , vec3 .x )
59+ self .assertEqual (11 , vec3 .y )
60+
61+ vec4 = vec2 + vec1
62+ self .assertEqual (5 , vec4 .x )
63+ self .assertEqual (11 , vec4 .y )
64+
65+ vec5 = vec3 + vec2
66+ self .assertEqual (7 , vec5 .x )
67+ self .assertEqual (17 , vec5 .y )
68+
69+ def test_subtract (self ):
70+ vec1 = vector2 .Vector2 (3 , - 5 )
71+ vec2 = vector2 .Vector2 (2 , 3 )
72+
73+ vec3 = vec1 - vec2
74+ self .assertEqual (1 , vec3 .x )
75+ self .assertEqual (- 8 , vec3 .y )
76+
77+ vec4 = vec2 - vec1
78+ self .assertEqual (- 1 , vec4 .x )
79+ self .assertEqual (8 , vec4 .y )
80+
81+ def test_mul_scale (self ):
82+ vec1 = vector2 .Vector2 (3 , 5 )
83+
84+ vec2 = vec1 * 2
85+ self .assertEqual (6 , vec2 .x )
86+ self .assertEqual (10 , vec2 .y )
87+
88+ vec3 = vec1 * 0.5
89+ self .assertAlmostEqual (1.5 , vec3 .x )
90+ self .assertAlmostEqual (2.5 , vec3 .y )
91+
92+ def test_mul_vector (self ):
93+ vec1 = vector2 .Vector2 (2 , 7 )
94+ vec2 = vector2 .Vector2 (3 , 5 )
95+
96+ with self .assertRaises (TypeError ):
97+ vec3 = vec1 * vec2
98+
99+ def test_rmul_scale (self ):
100+ vec1 = vector2 .Vector2 (2 , 3 )
101+
102+ vec2 = 2 * vec1
103+ self .assertEqual (4 , vec2 .x )
104+ self .assertEqual (6 , vec2 .y )
105+
106+ vec3 = 0.5 * vec1
107+ self .assertEqual (1 , vec3 .x )
108+ self .assertAlmostEqual (1.5 , vec3 .y )
109+
110+ def test_repr (self ):
111+ vec = vector2 .Vector2 (7 , 11 )
112+
113+ vec_repr = repr (vec )
114+
115+ self .assertEqual ('vector2(x=7, y=1)' , vec_repr )
116+
117+ def test_str (self ):
118+ vec = vector2 .Vector2 (7 , 11 )
119+
120+ vec_str = str (vec )
121+ self .assertEqual ('<7, 11>' , vec_str )
122+
123+ vec2 = vector2 .Vector2 (0.70712356 , 1 )
124+
125+ vec2_str = str (vec2 )
126+ self .assertEqual ('<0.707, 1>' , vec2_str )
127+
128+ vec3 = vector2 .Vector2 (1 , 105.567812354 )
129+
130+ vec3_str = str (vec3 )
131+ self .assertEqual ('<1, 105.568>' , vec3_str )
132+
133+ vec4 = vector2 .Vector2 (1.5 , 2.5 )
134+
135+ vec4_str = str (vec4 )
136+ self .assertEqual ('<1.5, 2.5>' , vec4_str )
137+
138+ def test_dot (self ):
139+ vec1 = vector2 .Vector2 (3 , 5 )
140+ vec2 = vector2 .Vector2 (7 , 11 )
141+
142+ dot_12 = vec1 .dot (vec2 )
143+ self .assertEqual (76 , dot_12 )
144+
145+ dot_21 = vec2 .dot (vec1 )
146+ self .assertEqual (76 , dot_21 )
147+
148+ def test_rotate (self ):
149+ vec1 = vector2 .Vector2 (1 , 0 )
150+
151+ vec2 = vec1 .rotate (math .pi * 0.25 )
152+ self .assertAlmostEqual (0.70710678118 , vec2 .x )
153+ self .assertAlmostEqual (0.70710678118 , vec2 .y )
154+
155+ vec3 = vec1 .rotate (degrees = 45 )
156+ self .assertAlmostEqual (0.70710678118 , vec3 .x )
157+ self .assertAlmostEqual (0.70710678118 , vec3 .y )
158+
159+ vec4 = vec1 .rotate (math .pi , vector2 .Vector2 (1 , 1 ))
160+ self .assertEqual (1 , vec4 .x )
161+ self .assertEqual (2 , vec4 .y )
162+
163+ vec5 = vec1 .rotate (radians = math .pi , about = vector2 .Vector2 (1 , 1 ))
164+ self .assertEqual (1 , vec5 .x )
165+ self .assertEqual (2 , vec5 .y )
166+
167+ vec6 = vec1 .rotate (degrees = 180 , about = vector2 .Vector2 (1 , 1 ))
168+ self .assertEqual (1 , vec6 .x )
169+ self .assertEqual (2 , vec6 .y )
170+
171+ vec7 = vec1 .rotate (vector2 .Vector2 (1 , 1 ), degrees = 180 )
172+ self .assertEqual (1 , vec7 .x )
173+ self .assertEqual (2 , vec7 .y )
174+
175+ def test_normalize (self ):
176+ vec1 = vector2 .Vector2 (2 , 0 )
177+
178+ vec2 = vec1 .normalize ()
179+ self .assertEqual (2 , vec1 .x )
180+ self .assertEqual (0 , vec1 .y )
181+ self .assertEqual (1 , vec2 .x )
182+ self .assertEqual (0 , vec2 .y )
183+
184+ vec3 = vec2 .normalize ()
185+ self .assertEqual (1 , vec3 .x )
186+ self .assertEqual (0 , vec3 .y )
187+
188+ vec3 .y = 1
189+ self .assertEqual (1 , vec2 .x )
190+ self .assertEqual (0 , vec2 .y )
191+ self .assertEqual (1 , vec3 .x )
192+ self .assertEqual (1 , vec3 .y )
193+
194+ def test_magnitude_squared (self ):
195+ vec1 = vector2 .Vector2 (5 , 12 )
196+
197+ magn_sq = vec1 .magnitude_squared ()
198+ self .assertEqual (13 * 13 , magn_sq )
199+
200+ vec2 = vector2 .Vector2 (0 , 0 )
201+
202+ magn_sq_2 = vec2 .magnitude_squared ()
203+ self .assertEqual (0 , magn_sq_2 )
204+
205+ vec2 .x = 2
206+
207+ magn_sq_3 = vec2 .magnitude_squared ()
208+ self .assertEqual (4 , magn_sq_3 )
209+
210+ def test_magnitude (self ):
211+ vec1 = vector2 .Vector2 (3 , 4 )
212+
213+ magn = vec1 .magnitude ()
214+ self .assertEqual (5 , magn )
215+
216+
31217if __name__ == '__main__' :
32218 unittest .main ()
0 commit comments