1
1
import unittest
2
+ import math
2
3
3
4
from pygorithm .geometry import (
4
- rect_broad_phase
5
- )
6
-
5
+ rect_broad_phase ,
6
+ vector2 ,
7
+ axisall ,
8
+ line2 ,
9
+ polygon2
10
+ )
7
11
8
12
class TestCollisionDetection (unittest .TestCase ):
9
13
def setUp (self ):
@@ -28,5 +32,187 @@ def test_collision_detect(self):
28
32
self .assertTrue (rect_broad_phase .broad_phase (self .simpleRect1 , self .simpleRect2 ))
29
33
self .assertFalse (rect_broad_phase .broad_phase (self .simpleRect3 , self .simpleRect4 ))
30
34
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
+
31
217
if __name__ == '__main__' :
32
218
unittest .main ()
0 commit comments