1
- import math
2
- import pickle
3
1
import unittest
4
2
5
3
import pymunk
8
6
9
7
class UnitTestVec2d (unittest .TestCase ):
10
8
def testCreationAndAccess (self ) -> None :
11
- v = Vec2d (* (0 , 0 ))
12
- self .assertEqual (v .x , 0 )
13
- self .assertEqual (v [0 ], 0 )
14
- self .assertEqual (v .y , 0 )
15
- self .assertEqual (v [1 ], 0 )
16
-
17
- v = Vec2d (3 , 5 )
18
- self .assertEqual (v .x , 3 )
19
- self .assertEqual (v [0 ], 3 )
20
- self .assertEqual (v .y , 5 )
21
- self .assertEqual (v [1 ], 5 )
22
9
23
10
v = Vec2d (111 , 222 )
24
- self .assertTrue (v .x == 111 and v .y == 222 )
25
- with self .assertRaises (AttributeError ):
26
- v .x = 333 # type: ignore
27
11
with self .assertRaises (TypeError ):
28
12
v [1 ] = 444 # type: ignore
29
13
30
- v = Vec2d (3 , 5 )
31
- self .assertEqual (len (v ), 2 )
32
- self .assertEqual (list (v ), [3 , 5 ])
33
- self .assertEqual (tuple (v ), (3 , 5 ))
34
-
35
- v = Vec2d .from_polar (3 , 2 )
36
- self .assertEqual (v .length , 3 )
37
- self .assertEqual (v .angle , 2 )
38
-
39
- def testMath (self ) -> None :
40
- v = Vec2d (111 , 222 )
41
- self .assertEqual (v + Vec2d (1 , 2 ), Vec2d (112 , 224 ))
42
- self .assertEqual (v + (1 , 2 ), Vec2d (112 , 224 ))
43
- self .assertEqual ((1 , 2 ) + v , Vec2d (112 , 224 ))
44
-
45
- self .assertEqual (v - Vec2d (1 , 2 ), Vec2d (110 , 220 ))
46
- self .assertEqual (v - (1 , 2 ), Vec2d (110 , 220 ))
47
- self .assertEqual ((1 , 2 ) - v , Vec2d (- 110 , - 220 ))
48
-
49
- self .assertEqual (v * 3 , Vec2d (333 , 666 ))
50
- self .assertEqual (3 * v , Vec2d (333 , 666 ))
51
-
52
- self .assertEqual (v / 2 , Vec2d (55.5 , 111 ))
53
- self .assertEqual (v // 2 , Vec2d (55 , 111 ))
54
-
55
- def testUnary (self ) -> None :
56
- v = Vec2d (111 , 222 )
57
- self .assertEqual (+ v , v )
58
- self .assertEqual (- v , Vec2d (- 111 , - 222 ))
59
- self .assertAlmostEqual (abs (v ), 248.20354550247666 )
60
-
61
14
def testLength (self ) -> None :
62
15
v = Vec2d (3 , 4 )
63
- self .assertTrue (v .length == 5 )
64
- self .assertTrue (v .get_length_sqrd () == 25 )
65
16
with self .assertRaises (AttributeError ):
66
17
v .length = 5 # type: ignore
67
18
68
- def testAnglesDegrees (self ) -> None :
69
- v = Vec2d (0 , 3 )
70
- self .assertEqual (v .angle_degrees , 90 )
71
- v2 = Vec2d (* v )
72
- v = v .rotated_degrees (- 90 )
73
- self .assertEqual (v .get_angle_degrees_between (v2 ), 90 )
74
- v2 = v2 .rotated_degrees (- 90 )
75
- self .assertEqual (v .length , v2 .length )
76
- self .assertAlmostEqual (v2 .angle_degrees , 0 , 10 )
77
- self .assertAlmostEqual (v2 .x , 3 )
78
- self .assertAlmostEqual (v2 .y , 0 )
79
- self .assertTrue ((v - v2 ).length < 0.00001 )
80
- self .assertEqual (v .length , v2 .length )
81
- v2 = v2 .rotated_degrees (300 )
82
- self .assertAlmostEqual (
83
- v .get_angle_degrees_between (v2 ), - 60
84
- ) # Allow a little more error than usual (floats..)
85
- v2 = v2 .rotated_degrees (v2 .get_angle_degrees_between (v ))
86
- self .assertAlmostEqual (v .get_angle_degrees_between (v2 ), 0 )
87
-
88
- def testAnglesRadians (self ) -> None :
89
- v = Vec2d (0 , 3 )
90
- self .assertEqual (v .angle , math .pi / 2.0 )
91
- v2 = Vec2d (* v )
92
- v = v .rotated (- math .pi / 2.0 )
93
- self .assertEqual (v .get_angle_between (v2 ), math .pi / 2.0 )
94
- v2 = v2 .rotated (- math .pi / 2.0 )
95
- self .assertEqual (v .length , v2 .length )
96
- self .assertAlmostEqual (v2 .angle , 0 )
97
- self .assertEqual (v2 .x , 3 )
98
- self .assertAlmostEqual (v2 .y , 0 )
99
- self .assertTrue ((v - v2 ).length < 0.00001 )
100
- self .assertEqual (v .length , v2 .length )
101
- v2 = v2 .rotated (math .pi / 3.0 * 5.0 )
102
- self .assertAlmostEqual (
103
- v .get_angle_between (v2 ), - math .pi / 3.0
104
- ) # Allow a little more error than usual (floats..)
105
- v2 = v2 .rotated (v2 .get_angle_between (v ))
106
- self .assertAlmostEqual (v .get_angle_between (v2 ), 0 )
107
-
108
19
def testComparison (self ) -> None :
109
20
int_vec = Vec2d (3 , - 2 )
110
21
flt_vec = Vec2d (3.0 , - 2.0 )
@@ -117,19 +28,3 @@ def testComparison(self) -> None:
117
28
self .assertTrue (int_vec != (0 , 0 ))
118
29
self .assertTrue (int_vec != 5 ) # type: ignore
119
30
self .assertTrue (int_vec != (3 , - 2 , - 5 )) # type: ignore
120
-
121
- def testImmuatable (self ) -> None :
122
- inplace_vec = Vec2d (5 , 13 )
123
- inplace_ref = inplace_vec
124
- inplace_vec *= 0.5
125
- inplace_vec += Vec2d (0.5 , 0.5 )
126
- inplace_vec -= Vec2d (3.5 , 3.5 )
127
- inplace_vec /= 5
128
- self .assertEqual (inplace_ref , Vec2d (5 , 13 ))
129
- self .assertEqual (inplace_vec , Vec2d (- 0.1 , 0.7 ))
130
-
131
- def testPickle (self ) -> None :
132
- testvec = Vec2d (5 , 0.3 )
133
- testvec_str = pickle .dumps (testvec )
134
- loaded_vec = pickle .loads (testvec_str )
135
- self .assertEqual (testvec , loaded_vec )
0 commit comments