Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: tools/cc-frame-viewer/third_party/gl-matrix/spec/gl-matrix/vec2-spec.js

Issue 12251005: [cc-frame-viewer] Add gl-matrix to third_party [redux] (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.
2
3 Redistribution and use in source and binary forms, with or without modification,
4 are permitted provided that the following conditions are met:
5
6 * Redistributions of source code must retain the above copyright notice, this
7 list of conditions and the following disclaimer.
8 * Redistributions in binary form must reproduce the above copyright notice,
9 this list of conditions and the following disclaimer in the documentation
10 and/or other materials provided with the distribution.
11
12 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
13 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
16 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
17 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
18 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
19 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
20 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
22
23 describe("vec2", function() {
24 var out, vecA, vecB, result;
25
26 beforeEach(function() { vecA = [1, 2]; vecB = [3, 4]; out = [0, 0]; });
27
28 describe("create", function() {
29 beforeEach(function() { result = vec2.create(); });
30 it("should return a 2 element array initialized to 0s", function() { exp ect(result).toBeEqualish([0, 0]); });
31 });
32
33 describe("clone", function() {
34 beforeEach(function() { result = vec2.clone(vecA); });
35 it("should return a 2 element array initialized to the values in vecA", function() { expect(result).toBeEqualish(vecA); });
36 });
37
38 describe("fromValues", function() {
39 beforeEach(function() { result = vec2.fromValues(1, 2); });
40 it("should return a 2 element array initialized to the values passed", f unction() { expect(result).toBeEqualish([1, 2]); });
41 });
42
43 describe("copy", function() {
44 beforeEach(function() { result = vec2.copy(out, vecA); });
45 it("should place values into out", function() { expect(out).toBeEqualish ([1, 2]); });
46 it("should return out", function() { expect(result).toBe(out); });
47 });
48
49 describe("set", function() {
50 beforeEach(function() { result = vec2.set(out, 1, 2); });
51 it("should place values into out", function() { expect(out).toBeEqualish ([1, 2]); });
52 it("should return out", function() { expect(result).toBe(out); });
53 });
54
55 describe("add", function() {
56 describe("with a separate output vector", function() {
57 beforeEach(function() { result = vec2.add(out, vecA, vecB); });
58
59 it("should place values into out", function() { expect(out).toBeEqua lish([4, 6]); });
60 it("should return out", function() { expect(result).toBe(out); });
61 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
62 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
63 });
64
65 describe("when vecA is the output vector", function() {
66 beforeEach(function() { result = vec2.add(vecA, vecA, vecB); });
67
68 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([4, 6]); });
69 it("should return vecA", function() { expect(result).toBe(vecA); });
70 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
71 });
72
73 describe("when vecB is the output vector", function() {
74 beforeEach(function() { result = vec2.add(vecB, vecA, vecB); });
75
76 it("should place values into vecB", function() { expect(vecB).toBeEq ualish([4, 6]); });
77 it("should return vecB", function() { expect(result).toBe(vecB); });
78 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
79 });
80 });
81
82 describe("subtract", function() {
83 it("should have an alias called 'sub'", function() { expect(vec2.sub).to Equal(vec2.subtract); });
84
85 describe("with a separate output vector", function() {
86 beforeEach(function() { result = vec2.subtract(out, vecA, vecB); });
87
88 it("should place values into out", function() { expect(out).toBeEqua lish([-2, -2]); });
89 it("should return out", function() { expect(result).toBe(out); });
90 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
91 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
92 });
93
94 describe("when vecA is the output vector", function() {
95 beforeEach(function() { result = vec2.subtract(vecA, vecA, vecB); }) ;
96
97 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([-2, -2]); });
98 it("should return vecA", function() { expect(result).toBe(vecA); });
99 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
100 });
101
102 describe("when vecB is the output vector", function() {
103 beforeEach(function() { result = vec2.subtract(vecB, vecA, vecB); }) ;
104
105 it("should place values into vecB", function() { expect(vecB).toBeEq ualish([-2, -2]); });
106 it("should return vecB", function() { expect(result).toBe(vecB); });
107 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
108 });
109 });
110
111 describe("multiply", function() {
112 it("should have an alias called 'mul'", function() { expect(vec2.mul).to Equal(vec2.multiply); });
113
114 describe("with a separate output vector", function() {
115 beforeEach(function() { result = vec2.multiply(out, vecA, vecB); });
116
117 it("should place values into out", function() { expect(out).toBeEqua lish([3, 8]); });
118 it("should return out", function() { expect(result).toBe(out); });
119 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
120 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
121 });
122
123 describe("when vecA is the output vector", function() {
124 beforeEach(function() { result = vec2.multiply(vecA, vecA, vecB); }) ;
125
126 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([3, 8]); });
127 it("should return vecA", function() { expect(result).toBe(vecA); });
128 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
129 });
130
131 describe("when vecB is the output vector", function() {
132 beforeEach(function() { result = vec2.multiply(vecB, vecA, vecB); }) ;
133
134 it("should place values into vecB", function() { expect(vecB).toBeEq ualish([3, 8]); });
135 it("should return vecB", function() { expect(result).toBe(vecB); });
136 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
137 });
138 });
139
140 describe("divide", function() {
141 it("should have an alias called 'div'", function() { expect(vec2.div).to Equal(vec2.divide); });
142
143 describe("with a separate output vector", function() {
144 beforeEach(function() { result = vec2.divide(out, vecA, vecB); });
145
146 it("should place values into out", function() { expect(out).toBeEqua lish([0.3333333, 0.5]); });
147 it("should return out", function() { expect(result).toBe(out); });
148 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
149 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
150 });
151
152 describe("when vecA is the output vector", function() {
153 beforeEach(function() { result = vec2.divide(vecA, vecA, vecB); });
154
155 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([0.3333333, 0.5]); });
156 it("should return vecA", function() { expect(result).toBe(vecA); });
157 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
158 });
159
160 describe("when vecB is the output vector", function() {
161 beforeEach(function() { result = vec2.divide(vecB, vecA, vecB); });
162
163 it("should place values into vecB", function() { expect(vecB).toBeEq ualish([0.3333333, 0.5]); });
164 it("should return vecB", function() { expect(result).toBe(vecB); });
165 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
166 });
167 });
168
169 describe("min", function() {
170 beforeEach(function() { vecA = [1, 4]; vecB = [3, 2]; });
171
172 describe("with a separate output vector", function() {
173 beforeEach(function() { result = vec2.min(out, vecA, vecB); });
174
175 it("should place values into out", function() { expect(out).toBeEqua lish([1, 2]); });
176 it("should return out", function() { expect(result).toBe(out); });
177 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 4]); });
178 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 2]); });
179 });
180
181 describe("when vecA is the output vector", function() {
182 beforeEach(function() { result = vec2.min(vecA, vecA, vecB); });
183
184 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([1, 2]); });
185 it("should return vecA", function() { expect(result).toBe(vecA); });
186 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 2]); });
187 });
188
189 describe("when vecB is the output vector", function() {
190 beforeEach(function() { result = vec2.min(vecB, vecA, vecB); });
191
192 it("should place values into vecB", function() { expect(vecB).toBeEq ualish([1, 2]); });
193 it("should return vecB", function() { expect(result).toBe(vecB); });
194 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 4]); });
195 });
196 });
197
198 describe("max", function() {
199 beforeEach(function() { vecA = [1, 4]; vecB = [3, 2]; });
200
201 describe("with a separate output vector", function() {
202 beforeEach(function() { result = vec2.max(out, vecA, vecB); });
203
204 it("should place values into out", function() { expect(out).toBeEqua lish([3, 4]); });
205 it("should return out", function() { expect(result).toBe(out); });
206 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 4]); });
207 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 2]); });
208 });
209
210 describe("when vecA is the output vector", function() {
211 beforeEach(function() { result = vec2.max(vecA, vecA, vecB); });
212
213 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([3, 4]); });
214 it("should return vecA", function() { expect(result).toBe(vecA); });
215 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 2]); });
216 });
217
218 describe("when vecB is the output vector", function() {
219 beforeEach(function() { result = vec2.max(vecB, vecA, vecB); });
220
221 it("should place values into vecB", function() { expect(vecB).toBeEq ualish([3, 4]); });
222 it("should return vecB", function() { expect(result).toBe(vecB); });
223 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 4]); });
224 });
225 });
226
227 describe("scale", function() {
228 describe("with a separate output vector", function() {
229 beforeEach(function() { result = vec2.scale(out, vecA, 2); });
230
231 it("should place values into out", function() { expect(out).toBeEqua lish([2, 4]); });
232 it("should return out", function() { expect(result).toBe(out); });
233 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
234 });
235
236 describe("when vecA is the output vector", function() {
237 beforeEach(function() { result = vec2.scale(vecA, vecA, 2); });
238
239 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([2, 4]); });
240 it("should return vecA", function() { expect(result).toBe(vecA); });
241 });
242 });
243
244 describe("distance", function() {
245 it("should have an alias called 'dist'", function() { expect(vec2.dist). toEqual(vec2.distance); });
246
247 beforeEach(function() { result = vec2.distance(vecA, vecB); });
248
249 it("should return the distance", function() { expect(result).toBeCloseTo (2.828427); });
250 });
251
252 describe("squaredDistance", function() {
253 it("should have an alias called 'sqrDist'", function() { expect(vec2.sqr Dist).toEqual(vec2.squaredDistance); });
254
255 beforeEach(function() { result = vec2.squaredDistance(vecA, vecB); });
256
257 it("should return the squared distance", function() { expect(result).toE qual(8); });
258 });
259
260 describe("length", function() {
261 it("should have an alias called 'len'", function() { expect(vec2.len).to Equal(vec2.length); });
262
263 beforeEach(function() { result = vec2.length(vecA); });
264
265 it("should return the length", function() { expect(result).toBeCloseTo(2 .236067); });
266 });
267
268 describe("squaredLength", function() {
269 it("should have an alias called 'sqrLen'", function() { expect(vec2.sqrL en).toEqual(vec2.squaredLength); });
270
271 beforeEach(function() { result = vec2.squaredLength(vecA); });
272
273 it("should return the squared length", function() { expect(result).toEqu al(5); });
274 });
275
276 describe("negate", function() {
277 describe("with a separate output vector", function() {
278 beforeEach(function() { result = vec2.negate(out, vecA); });
279
280 it("should place values into out", function() { expect(out).toBeEqua lish([-1, -2]); });
281 it("should return out", function() { expect(result).toBe(out); });
282 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
283 });
284
285 describe("when vecA is the output vector", function() {
286 beforeEach(function() { result = vec2.negate(vecA, vecA); });
287
288 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([-1, -2]); });
289 it("should return vecA", function() { expect(result).toBe(vecA); });
290 });
291 });
292
293 describe("normalize", function() {
294 beforeEach(function() { vecA = [5, 0]; });
295
296 describe("with a separate output vector", function() {
297 beforeEach(function() { result = vec2.normalize(out, vecA); });
298
299 it("should place values into out", function() { expect(out).toBeEqua lish([1, 0]); });
300 it("should return out", function() { expect(result).toBe(out); });
301 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [5, 0]); });
302 });
303
304 describe("when vecA is the output vector", function() {
305 beforeEach(function() { result = vec2.normalize(vecA, vecA); });
306
307 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([1, 0]); });
308 it("should return vecA", function() { expect(result).toBe(vecA); });
309 });
310 });
311
312 describe("dot", function() {
313 beforeEach(function() { result = vec2.dot(vecA, vecB); });
314
315 it("should return the dot product", function() { expect(result).toEqual( 11); });
316 it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); });
317 it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); });
318 });
319
320 describe("cross", function() {
321 var out3;
322
323 beforeEach(function() {
324 out3 = [0, 0, 0];
325 result = vec2.cross(out3, vecA, vecB);
326 });
327
328 it("should place values into out", function() { expect(out3).toBeEqualis h([0, 0, -2]); });
329 it("should return out", function() { expect(result).toBe(out3); });
330 it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); });
331 it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); });
332 });
333
334 describe("lerp", function() {
335 describe("with a separate output vector", function() {
336 beforeEach(function() { result = vec2.lerp(out, vecA, vecB, 0.5); }) ;
337
338 it("should place values into out", function() { expect(out).toBeEqua lish([2, 3]); });
339 it("should return out", function() { expect(result).toBe(out); });
340 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
341 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
342 });
343
344 describe("when vecA is the output vector", function() {
345 beforeEach(function() { result = vec2.lerp(vecA, vecA, vecB, 0.5); } );
346
347 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([2, 3]); });
348 it("should return vecA", function() { expect(result).toBe(vecA); });
349 it("should not modify vecB", function() { expect(vecB).toBeEqualish( [3, 4]); });
350 });
351
352 describe("when vecB is the output vector", function() {
353 beforeEach(function() { result = vec2.lerp(vecB, vecA, vecB, 0.5); } );
354
355 it("should place values into vecB", function() { expect(vecB).toBeEq ualish([2, 3]); });
356 it("should return vecB", function() { expect(result).toBe(vecB); });
357 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
358 });
359 });
360
361 describe("transformMat2", function() {
362 var matA;
363 beforeEach(function() { matA = [1, 2, 3, 4]; });
364
365 describe("with a separate output vector", function() {
366 beforeEach(function() { result = vec2.transformMat2(out, vecA, matA) ; });
367
368 it("should place values into out", function() { expect(out).toBeEqua lish([7, 10]); });
369 it("should return out", function() { expect(result).toBe(out); });
370 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
371 it("should not modify matA", function() { expect(matA).toBeEqualish( [1, 2, 3, 4]); });
372 });
373
374 describe("when vecA is the output vector", function() {
375 beforeEach(function() { result = vec2.transformMat2(vecA, vecA, matA ); });
376
377 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([7, 10]); });
378 it("should return vecA", function() { expect(result).toBe(vecA); });
379 it("should not modify matA", function() { expect(matA).toBeEqualish( [1, 2, 3, 4]); });
380 });
381 });
382
383 describe("transformMat2d", function() {
384 var matA;
385 beforeEach(function() { matA = [1, 2, 3, 4, 5, 6]; });
386
387 describe("with a separate output vector", function() {
388 beforeEach(function() { result = vec2.transformMat2d(out, vecA, matA ); });
389
390 it("should place values into out", function() { expect(out).toBeEqua lish([12, 16]); });
391 it("should return out", function() { expect(result).toBe(out); });
392 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
393 it("should not modify matA", function() { expect(matA).toBeEqualish( [1, 2, 3, 4, 5, 6]); });
394 });
395
396 describe("when vecA is the output vector", function() {
397 beforeEach(function() { result = vec2.transformMat2d(vecA, vecA, mat A); });
398
399 it("should place values into vecA", function() { expect(vecA).toBeEq ualish([12, 16]); });
400 it("should return vecA", function() { expect(result).toBe(vecA); });
401 it("should not modify matA", function() { expect(matA).toBeEqualish( [1, 2, 3, 4, 5, 6]); });
402 });
403 });
404
405 describe("forEach", function() {
406 var vecArray;
407
408 beforeEach(function() {
409 vecArray = [
410 1, 2,
411 3, 4,
412 0, 0
413 ];
414 });
415
416 describe("when performing operations that take no extra arguments", func tion() {
417 beforeEach(function() { result = vec2.forEach(vecArray, 0, 0, 0, vec 2.normalize); });
418
419 it("should update all values", function() {
420 expect(vecArray).toBeEqualish([
421 0.447214, 0.894427,
422 0.6, 0.8,
423 0, 0
424 ]);
425 });
426 it("should return vecArray", function() { expect(result).toBe(vecArr ay); });
427 });
428
429 describe("when performing operations that takes one extra arguments", fu nction() {
430 beforeEach(function() { result = vec2.forEach(vecArray, 0, 0, 0, vec 2.add, vecA); });
431
432 it("should update all values", function() {
433 expect(vecArray).toBeEqualish([
434 2, 4,
435 4, 6,
436 1, 2
437 ]);
438 });
439 it("should return vecArray", function() { expect(result).toBe(vecArr ay); });
440 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
441 });
442
443 describe("when specifying an offset", function() {
444 beforeEach(function() { result = vec2.forEach(vecArray, 0, 2, 0, vec 2.add, vecA); });
445
446 it("should update all values except the first vector", function() {
447 expect(vecArray).toBeEqualish([
448 1, 2,
449 4, 6,
450 1, 2
451 ]);
452 });
453 it("should return vecArray", function() { expect(result).toBe(vecArr ay); });
454 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
455 });
456
457 describe("when specifying a count", function() {
458 beforeEach(function() { result = vec2.forEach(vecArray, 0, 0, 2, vec 2.add, vecA); });
459
460 it("should update all values except the last vector", function() {
461 expect(vecArray).toBeEqualish([
462 2, 4,
463 4, 6,
464 0, 0
465 ]);
466 });
467 it("should return vecArray", function() { expect(result).toBe(vecArr ay); });
468 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
469 });
470
471 describe("when specifying a stride", function() {
472 beforeEach(function() { result = vec2.forEach(vecArray, 4, 0, 0, vec 2.add, vecA); });
473
474 it("should update all values except the second vector", function() {
475 expect(vecArray).toBeEqualish([
476 2, 4,
477 3, 4,
478 1, 2
479 ]);
480 });
481 it("should return vecArray", function() { expect(result).toBe(vecArr ay); });
482 it("should not modify vecA", function() { expect(vecA).toBeEqualish( [1, 2]); });
483 });
484
485 describe("when calling a function that does not modify the out variable" , function() {
486 beforeEach(function() {
487 result = vec2.forEach(vecArray, 0, 0, 0, function(out, vec) {});
488 });
489
490 it("values should remain unchanged", function() {
491 expect(vecArray).toBeEqualish([
492 1, 2,
493 3, 4,
494 0, 0,
495 ]);
496 });
497 it("should return vecArray", function() { expect(result).toBe(vecArr ay); });
498 });
499 });
500
501 describe("str", function() {
502 beforeEach(function() { result = vec2.str(vecA); });
503
504 it("should return a string representation of the vector", function() { e xpect(result).toEqual("vec2(1, 2)"); });
505 });
506 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698