Skip to content

Commit fd40ece

Browse files
committed
Add Vector2 tests
* docs/Geometry.rst - fix incorrect quick start comment * tests/test_geometry.py - add class TestVector2
1 parent a4f0934 commit fd40ece

File tree

2 files changed

+190
-4
lines changed

2 files changed

+190
-4
lines changed

docs/Geometry.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Quick Start Guide
1616
# create a regular polygon
1717
poly1 = polygon2.Polygon2.from_regular(5, 5)
1818
19-
# create a polygon from tuple (x, y) - note that the polygon must be concave
19+
# create a polygon from tuple (x, y) - note that the polygon must be convex
2020
poly2 = polygon2.Polygon2(points=[ (0, 0), (1, 0), (1, 1), (0, 1) ])
2121
2222
# create a polygon from vector2s.

tests/test_geometry.py

Lines changed: 189 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import unittest
2+
import math
23

34
from pygorithm.geometry import (
4-
rect_broad_phase
5-
)
6-
5+
rect_broad_phase,
6+
vector2,
7+
axisall,
8+
line2,
9+
polygon2
10+
)
711

812
class 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+
31217
if __name__ == '__main__':
32218
unittest.main()

0 commit comments

Comments
 (0)