source: other-projects/playing-in-the-street/summer-2013/trunk/Playing-in-the-Street-WPF/Content/Web/mrdoob-three.js-4862f5f/test/unit/math/Vector3.js@ 28897

Last change on this file since 28897 was 28897, checked in by davidb, 10 years ago

GUI front-end to server base plus web page content

File size: 8.7 KB
Line 
1/**
2 * @author bhouston / http://exocortex.com
3 */
4
5module( "Vector3" );
6
7test( "constructor", function() {
8 var a = new THREE.Vector3();
9 ok( a.x == 0, "Passed!" );
10 ok( a.y == 0, "Passed!" );
11 ok( a.z == 0, "Passed!" );
12
13 a = new THREE.Vector3( x, y, z );
14 ok( a.x === x, "Passed!" );
15 ok( a.y === y, "Passed!" );
16 ok( a.z === z, "Passed!" );
17});
18
19test( "copy", function() {
20 var a = new THREE.Vector3( x, y, z );
21 var b = new THREE.Vector3().copy( a );
22 ok( b.x == x, "Passed!" );
23 ok( b.y == y, "Passed!" );
24 ok( b.z == z, "Passed!" );
25
26 // ensure that it is a true copy
27 a.x = 0;
28 a.y = -1;
29 a.z = -2;
30 ok( b.x == x, "Passed!" );
31 ok( b.y == y, "Passed!" );
32 ok( b.z == z, "Passed!" );
33});
34
35test( "set", function() {
36 var a = new THREE.Vector3();
37 ok( a.x == 0, "Passed!" );
38 ok( a.y == 0, "Passed!" );
39 ok( a.z == 0, "Passed!" );
40
41 a.set( x, y, z );
42 ok( a.x == x, "Passed!" );
43 ok( a.y == y, "Passed!" );
44 ok( a.z == z, "Passed!" );
45});
46
47test( "setX,setY,setZ", function() {
48 var a = new THREE.Vector3();
49 ok( a.x == 0, "Passed!" );
50 ok( a.y == 0, "Passed!" );
51 ok( a.z == 0, "Passed!" );
52
53 a.setX( x );
54 a.setY( y );
55 a.setZ( z );
56
57 ok( a.x == x, "Passed!" );
58 ok( a.y == y, "Passed!" );
59 ok( a.z == z, "Passed!" );
60});
61
62test( "setComponent,getComponent", function() {
63 var a = new THREE.Vector3();
64 ok( a.x == 0, "Passed!" );
65 ok( a.y == 0, "Passed!" );
66 ok( a.z == 0, "Passed!" );
67
68 a.setComponent( 0, 1 );
69 a.setComponent( 1, 2 );
70 a.setComponent( 2, 3 );
71 ok( a.getComponent( 0 ) == 1, "Passed!" );
72 ok( a.getComponent( 1 ) == 2, "Passed!" );
73 ok( a.getComponent( 2 ) == 3, "Passed!" );
74});
75
76test( "add", function() {
77 var a = new THREE.Vector3( x, y, z );
78 var b = new THREE.Vector3( -x, -y, -z );
79
80 a.add( b );
81 ok( a.x == 0, "Passed!" );
82 ok( a.y == 0, "Passed!" );
83 ok( a.z == 0, "Passed!" );
84
85 var c = new THREE.Vector3().addVectors( b, b );
86 ok( c.x == -2*x, "Passed!" );
87 ok( c.y == -2*y, "Passed!" );
88 ok( c.z == -2*z, "Passed!" );
89});
90
91test( "sub", function() {
92 var a = new THREE.Vector3( x, y, z );
93 var b = new THREE.Vector3( -x, -y, -z );
94
95 a.sub( b );
96 ok( a.x == 2*x, "Passed!" );
97 ok( a.y == 2*y, "Passed!" );
98 ok( a.z == 2*z, "Passed!" );
99
100 var c = new THREE.Vector3().subVectors( a, a );
101 ok( c.x == 0, "Passed!" );
102 ok( c.y == 0, "Passed!" );
103 ok( c.z == 0, "Passed!" );
104});
105
106test( "multiply/divide", function() {
107 var a = new THREE.Vector3( x, y, z );
108 var b = new THREE.Vector3( -x, -y, -z );
109
110 a.multiplyScalar( -2 );
111 ok( a.x == x*-2, "Passed!" );
112 ok( a.y == y*-2, "Passed!" );
113 ok( a.z == z*-2, "Passed!" );
114
115 b.multiplyScalar( -2 );
116 ok( b.x == 2*x, "Passed!" );
117 ok( b.y == 2*y, "Passed!" );
118 ok( b.z == 2*z, "Passed!" );
119
120 a.divideScalar( -2 );
121 ok( a.x == x, "Passed!" );
122 ok( a.y == y, "Passed!" );
123 ok( a.z == z, "Passed!" );
124
125 b.divideScalar( -2 );
126 ok( b.x == -x, "Passed!" );
127 ok( b.y == -y, "Passed!" );
128 ok( b.z == -z, "Passed!" );
129});
130
131test( "min/max/clamp", function() {
132 var a = new THREE.Vector3( x, y, z );
133 var b = new THREE.Vector3( -x, -y, -z );
134 var c = new THREE.Vector3();
135
136 c.copy( a ).min( b );
137 ok( c.x == -x, "Passed!" );
138 ok( c.y == -y, "Passed!" );
139 ok( c.z == -z, "Passed!" );
140
141 c.copy( a ).max( b );
142 ok( c.x == x, "Passed!" );
143 ok( c.y == y, "Passed!" );
144 ok( c.z == z, "Passed!" );
145
146 c.set( -2*x, 2*y, -2*z );
147 c.clamp( b, a );
148 ok( c.x == -x, "Passed!" );
149 ok( c.y == y, "Passed!" );
150 ok( c.z == -z, "Passed!" );
151});
152
153test( "negate", function() {
154 var a = new THREE.Vector3( x, y, z );
155
156 a.negate();
157 ok( a.x == -x, "Passed!" );
158 ok( a.y == -y, "Passed!" );
159 ok( a.z == -z, "Passed!" );
160});
161
162test( "dot", function() {
163 var a = new THREE.Vector3( x, y, z );
164 var b = new THREE.Vector3( -x, -y, -z );
165 var c = new THREE.Vector3();
166
167 var result = a.dot( b );
168 ok( result == (-x*x-y*y-z*z), "Passed!" );
169
170 result = a.dot( c );
171 ok( result == 0, "Passed!" );
172});
173
174test( "length/lengthSq", function() {
175 var a = new THREE.Vector3( x, 0, 0 );
176 var b = new THREE.Vector3( 0, -y, 0 );
177 var c = new THREE.Vector3( 0, 0, z );
178 var d = new THREE.Vector3();
179
180 ok( a.length() == x, "Passed!" );
181 ok( a.lengthSq() == x*x, "Passed!" );
182 ok( b.length() == y, "Passed!" );
183 ok( b.lengthSq() == y*y, "Passed!" );
184 ok( c.length() == z, "Passed!" );
185 ok( c.lengthSq() == z*z, "Passed!" );
186 ok( d.length() == 0, "Passed!" );
187 ok( d.lengthSq() == 0, "Passed!" );
188
189 a.set( x, y, z );
190 ok( a.length() == Math.sqrt( x*x + y*y + z*z ), "Passed!" );
191 ok( a.lengthSq() == ( x*x + y*y + z*z ), "Passed!" );
192});
193
194test( "normalize", function() {
195 var a = new THREE.Vector3( x, 0, 0 );
196 var b = new THREE.Vector3( 0, -y, 0 );
197 var c = new THREE.Vector3( 0, 0, z );
198
199 a.normalize();
200 ok( a.length() == 1, "Passed!" );
201 ok( a.x == 1, "Passed!" );
202
203 b.normalize();
204 ok( b.length() == 1, "Passed!" );
205 ok( b.y == -1, "Passed!" );
206
207 c.normalize();
208 ok( c.length() == 1, "Passed!" );
209 ok( c.z == 1, "Passed!" );
210});
211
212test( "distanceTo/distanceToSquared", function() {
213 var a = new THREE.Vector3( x, 0, 0 );
214 var b = new THREE.Vector3( 0, -y, 0 );
215 var c = new THREE.Vector3( 0, 0, z );
216 var d = new THREE.Vector3();
217
218 ok( a.distanceTo( d ) == x, "Passed!" );
219 ok( a.distanceToSquared( d ) == x*x, "Passed!" );
220
221 ok( b.distanceTo( d ) == y, "Passed!" );
222 ok( b.distanceToSquared( d ) == y*y, "Passed!" );
223
224 ok( c.distanceTo( d ) == z, "Passed!" );
225 ok( c.distanceToSquared( d ) == z*z, "Passed!" );
226});
227
228test( "setLength", function() {
229 var a = new THREE.Vector3( x, 0, 0 );
230
231 ok( a.length() == x, "Passed!" );
232 a.setLength( y );
233 ok( a.length() == y, "Passed!" );
234
235 a = new THREE.Vector3( 0, 0, 0 );
236 ok( a.length() == 0, "Passed!" );
237 a.setLength( y );
238 ok( a.length() == 0, "Passed!" );
239
240});
241
242test( "projectOnVector", function() {
243 var a = new THREE.Vector3( 1, 0, 0 );
244 var b = new THREE.Vector3();
245 var normal = new THREE.Vector3( 10, 0, 0 );
246
247 ok( b.copy( a ).projectOnVector( normal ).equals( new THREE.Vector3( 1, 0, 0 ) ), "Passed!" );
248
249 a.set( 0, 1, 0 );
250 ok( b.copy( a ).projectOnVector( normal ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
251
252 a.set( 0, 0, -1 );
253 ok( b.copy( a ).projectOnVector( normal ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
254
255 a.set( -1, 0, 0 );
256 ok( b.copy( a ).projectOnVector( normal ).equals( new THREE.Vector3( -1, 0, 0 ) ), "Passed!" );
257
258});
259
260test( "projectOnPlane", function() {
261 var a = new THREE.Vector3( 1, 0, 0 );
262 var b = new THREE.Vector3();
263 var normal = new THREE.Vector3( 1, 0, 0 );
264
265 ok( b.copy( a ).projectOnPlane( normal ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
266
267 a.set( 0, 1, 0 );
268 ok( b.copy( a ).projectOnPlane( normal ).equals( new THREE.Vector3( 0, 1, 0 ) ), "Passed!" );
269
270 a.set( 0, 0, -1 );
271 ok( b.copy( a ).projectOnPlane( normal ).equals( new THREE.Vector3( 0, 0, -1 ) ), "Passed!" );
272
273 a.set( -1, 0, 0 );
274 ok( b.copy( a ).projectOnPlane( normal ).equals( new THREE.Vector3( 0, 0, 0 ) ), "Passed!" );
275
276});
277
278test( "reflect", function() {
279 var a = new THREE.Vector3( 1, 0, 0 );
280 var normal = new THREE.Vector3( 1, 0, 0 );
281 var b = new THREE.Vector3( 0, 0, 0 );
282
283 ok( b.copy( a ).reflect( normal ).equals( new THREE.Vector3( 1, 0, 0 ) ), "Passed!" );
284
285 a.set( 1, -1, 0 );
286 ok( b.copy( a ).reflect( normal ).equals( new THREE.Vector3( 1, 1, 0 ) ), "Passed!" );
287
288 a.set( 1, -1, 0 );
289 normal.set( 0, -1, 0 );
290 ok( b.copy( a ).reflect( normal ).equals( new THREE.Vector3( -1, -1, 0 ) ), "Passed!" );
291});
292
293test( "angleTo", function() {
294 var a = new THREE.Vector3( 0, -0.18851655680720186, 0.9820700116639124 );
295 var b = new THREE.Vector3( 0, 0.18851655680720186, -0.9820700116639124 );
296
297 equal( a.angleTo( a ), 0 );
298 equal( a.angleTo( b ), Math.PI );
299
300 var x = new THREE.Vector3( 1, 0, 0 );
301 var y = new THREE.Vector3( 0, 1, 0 );
302 var z = new THREE.Vector3( 0, 0, 1 );
303
304 equal( x.angleTo( y ), Math.PI / 2 );
305 equal( x.angleTo( z ), Math.PI / 2 );
306 equal( z.angleTo( x ), Math.PI / 2 );
307
308 ok( Math.abs( x.angleTo( new THREE.Vector3( 1, 1, 0 ) ) - ( Math.PI / 4 ) ) < 0.0000001 );
309});
310
311test( "lerp/clone", function() {
312 var a = new THREE.Vector3( x, 0, z );
313 var b = new THREE.Vector3( 0, -y, 0 );
314
315 ok( a.lerp( a, 0 ).equals( a.lerp( a, 0.5 ) ), "Passed!" );
316 ok( a.lerp( a, 0 ).equals( a.lerp( a, 1 ) ), "Passed!" );
317
318 ok( a.clone().lerp( b, 0 ).equals( a ), "Passed!" );
319
320 ok( a.clone().lerp( b, 0.5 ).x == x*0.5, "Passed!" );
321 ok( a.clone().lerp( b, 0.5 ).y == -y*0.5, "Passed!" );
322 ok( a.clone().lerp( b, 0.5 ).z == z*0.5, "Passed!" );
323
324 ok( a.clone().lerp( b, 1 ).equals( b ), "Passed!" );
325});
326
327test( "equals", function() {
328 var a = new THREE.Vector3( x, 0, z );
329 var b = new THREE.Vector3( 0, -y, 0 );
330
331 ok( a.x != b.x, "Passed!" );
332 ok( a.y != b.y, "Passed!" );
333 ok( a.z != b.z, "Passed!" );
334
335 ok( ! a.equals( b ), "Passed!" );
336 ok( ! b.equals( a ), "Passed!" );
337
338 a.copy( b );
339 ok( a.x == b.x, "Passed!" );
340 ok( a.y == b.y, "Passed!" );
341 ok( a.z == b.z, "Passed!" );
342
343 ok( a.equals( b ), "Passed!" );
344 ok( b.equals( a ), "Passed!" );
345});
Note: See TracBrowser for help on using the repository browser.