166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. 266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 366a37686207944273ced825e0e8b6b6375f8c3deJamie GennisRedistribution and use in source and binary forms, with or without modification, 466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisare permitted provided that the following conditions are met: 566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * Redistributions of source code must retain the above copyright notice, this 766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis list of conditions and the following disclaimer. 866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis * Redistributions in binary form must reproduce the above copyright notice, 966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis this list of conditions and the following disclaimer in the documentation 1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis and/or other materials provided with the distribution. 1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1266a37686207944273ced825e0e8b6b6375f8c3deJamie GennisTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 1366a37686207944273ced825e0e8b6b6375f8c3deJamie GennisANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1466a37686207944273ced825e0e8b6b6375f8c3deJamie GennisWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1566a37686207944273ced825e0e8b6b6375f8c3deJamie GennisDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 1666a37686207944273ced825e0e8b6b6375f8c3deJamie GennisANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 1866a37686207944273ced825e0e8b6b6375f8c3deJamie GennisLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 1966a37686207944273ced825e0e8b6b6375f8c3deJamie GennisANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 2166a37686207944273ced825e0e8b6b6375f8c3deJamie GennisSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisdescribe("vec2", function() { 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var out, vecA, vecB, result; 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { vecA = [1, 2]; vecB = [3, 4]; out = [0, 0]; }); 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("create", function() { 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.create(); }); 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return a 2 element array initialized to 0s", function() { expect(result).toBeEqualish([0, 0]); }); 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("clone", function() { 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.clone(vecA); }); 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return a 2 element array initialized to the values in vecA", function() { expect(result).toBeEqualish(vecA); }); 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("fromValues", function() { 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.fromValues(1, 2); }); 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return a 2 element array initialized to the values passed", function() { expect(result).toBeEqualish([1, 2]); }); 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("copy", function() { 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.copy(out, vecA); }); 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([1, 2]); }); 4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("set", function() { 5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.set(out, 1, 2); }); 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([1, 2]); }); 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("add", function() { 5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.add(out, vecA, vecB); }); 5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([4, 6]); }); 6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.add(vecA, vecA, vecB); }); 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([4, 6]); }); 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecB is the output vector", function() { 7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.add(vecB, vecA, vecB); }); 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecB", function() { expect(vecB).toBeEqualish([4, 6]); }); 7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecB", function() { expect(result).toBe(vecB); }); 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("subtract", function() { 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'sub'", function() { expect(vec2.sub).toEqual(vec2.subtract); }); 8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.subtract(out, vecA, vecB); }); 8766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([-2, -2]); }); 8966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 9066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 9166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 9266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 9366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 9566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.subtract(vecA, vecA, vecB); }); 9666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([-2, -2]); }); 9866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 9966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 10066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 10166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecB is the output vector", function() { 10366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.subtract(vecB, vecA, vecB); }); 10466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecB", function() { expect(vecB).toBeEqualish([-2, -2]); }); 10666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecB", function() { expect(result).toBe(vecB); }); 10766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 10866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 10966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("multiply", function() { 11266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'mul'", function() { expect(vec2.mul).toEqual(vec2.multiply); }); 11366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 11566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.multiply(out, vecA, vecB); }); 11666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([3, 8]); }); 11866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 11966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 12066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 12166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 12266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 12466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.multiply(vecA, vecA, vecB); }); 12566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([3, 8]); }); 12766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 12866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 12966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 13066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecB is the output vector", function() { 13266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.multiply(vecB, vecA, vecB); }); 13366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecB", function() { expect(vecB).toBeEqualish([3, 8]); }); 13566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecB", function() { expect(result).toBe(vecB); }); 13666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 13766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 13866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 13966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("divide", function() { 14166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'div'", function() { expect(vec2.div).toEqual(vec2.divide); }); 14266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 14466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.divide(out, vecA, vecB); }); 14566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([0.3333333, 0.5]); }); 14766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 14866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 14966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 15066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 15166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 15366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.divide(vecA, vecA, vecB); }); 15466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([0.3333333, 0.5]); }); 15666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 15766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 15866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 15966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecB is the output vector", function() { 16166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.divide(vecB, vecA, vecB); }); 16266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecB", function() { expect(vecB).toBeEqualish([0.3333333, 0.5]); }); 16466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecB", function() { expect(result).toBe(vecB); }); 16566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 16666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 16766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 16866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("min", function() { 17066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { vecA = [1, 4]; vecB = [3, 2]; }); 17166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 17366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.min(out, vecA, vecB); }); 17466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([1, 2]); }); 17666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 17766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 4]); }); 17866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 2]); }); 17966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 18066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 18266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.min(vecA, vecA, vecB); }); 18366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 18566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 18666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 2]); }); 18766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 18866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecB is the output vector", function() { 19066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.min(vecB, vecA, vecB); }); 19166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 19266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecB", function() { expect(vecB).toBeEqualish([1, 2]); }); 19366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecB", function() { expect(result).toBe(vecB); }); 19466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 4]); }); 19566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 19666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 19766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 19866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("max", function() { 19966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { vecA = [1, 4]; vecB = [3, 2]; }); 20066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 20166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 20266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.max(out, vecA, vecB); }); 20366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 20466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([3, 4]); }); 20566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 20666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 4]); }); 20766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 2]); }); 20866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 20966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 21066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 21166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.max(vecA, vecA, vecB); }); 21266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 21366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([3, 4]); }); 21466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 21566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 2]); }); 21666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 21766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 21866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecB is the output vector", function() { 21966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.max(vecB, vecA, vecB); }); 22066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 22166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 22266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecB", function() { expect(result).toBe(vecB); }); 22366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 4]); }); 22466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 22566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 22666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 22766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("scale", function() { 22866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 22966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.scale(out, vecA, 2); }); 23066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 23166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([2, 4]); }); 23266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 23366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 23466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 23566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 23666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 23766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.scale(vecA, vecA, 2); }); 23866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 23966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([2, 4]); }); 24066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 24166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 24266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 24366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("distance", function() { 24566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'dist'", function() { expect(vec2.dist).toEqual(vec2.distance); }); 24666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.distance(vecA, vecB); }); 24866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return the distance", function() { expect(result).toBeCloseTo(2.828427); }); 25066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 25166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 25266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("squaredDistance", function() { 25366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'sqrDist'", function() { expect(vec2.sqrDist).toEqual(vec2.squaredDistance); }); 25466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 25566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.squaredDistance(vecA, vecB); }); 25666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 25766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return the squared distance", function() { expect(result).toEqual(8); }); 25866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 25966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("length", function() { 26166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'len'", function() { expect(vec2.len).toEqual(vec2.length); }); 26266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.length(vecA); }); 26466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return the length", function() { expect(result).toBeCloseTo(2.236067); }); 26666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 26766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("squaredLength", function() { 26966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'sqrLen'", function() { expect(vec2.sqrLen).toEqual(vec2.squaredLength); }); 27066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 27166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.squaredLength(vecA); }); 27266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 27366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return the squared length", function() { expect(result).toEqual(5); }); 27466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 27566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 27666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("negate", function() { 27766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 27866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.negate(out, vecA); }); 27966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 28066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([-1, -2]); }); 28166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 28266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 28366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 28466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 28566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 28666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.negate(vecA, vecA); }); 28766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 28866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([-1, -2]); }); 28966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 29066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 29166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 29266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 29366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("normalize", function() { 29466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { vecA = [5, 0]; }); 29566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 29666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 29766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.normalize(out, vecA); }); 29866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 29966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([1, 0]); }); 30066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 30166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([5, 0]); }); 30266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 30366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 30466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 30566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.normalize(vecA, vecA); }); 30666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 30766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([1, 0]); }); 30866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 30966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 31066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 31166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 31266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("dot", function() { 31366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.dot(vecA, vecB); }); 31466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 31566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return the dot product", function() { expect(result).toEqual(11); }); 31666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 31766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 31866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 31966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 32066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("cross", function() { 32166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var out3; 32266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 32366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { 32466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis out3 = [0, 0, 0]; 32566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis result = vec2.cross(out3, vecA, vecB); 32666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 32766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 32866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out3).toBeEqualish([0, 0, -2]); }); 32966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out3); }); 33066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 33166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 33266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 33366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 33466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("lerp", function() { 33566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 33666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.lerp(out, vecA, vecB, 0.5); }); 33766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 33866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([2, 3]); }); 33966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 34066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 34166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 34266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 34366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 34466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 34566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.lerp(vecA, vecA, vecB, 0.5); }); 34666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 34766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([2, 3]); }); 34866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 34966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecB", function() { expect(vecB).toBeEqualish([3, 4]); }); 35066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 35166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 35266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecB is the output vector", function() { 35366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.lerp(vecB, vecA, vecB, 0.5); }); 35466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 35566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecB", function() { expect(vecB).toBeEqualish([2, 3]); }); 35666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecB", function() { expect(result).toBe(vecB); }); 35766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 35866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 35966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 36066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 36166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("transformMat2", function() { 36266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var matA; 36366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { matA = [1, 2, 3, 4]; }); 36466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 36566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 36666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.transformMat2(out, vecA, matA); }); 36766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 36866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([7, 10]); }); 36966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 37066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 37166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify matA", function() { expect(matA).toBeEqualish([1, 2, 3, 4]); }); 37266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 37366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 37466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 37566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.transformMat2(vecA, vecA, matA); }); 37666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 37766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([7, 10]); }); 37866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 37966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify matA", function() { expect(matA).toBeEqualish([1, 2, 3, 4]); }); 38066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 38166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 38266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 38366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("transformMat2d", function() { 38466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var matA; 38566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { matA = [1, 2, 3, 4, 5, 6]; }); 38666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 38766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output vector", function() { 38866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.transformMat2d(out, vecA, matA); }); 38966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 39066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([12, 16]); }); 39166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 39266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 39366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify matA", function() { expect(matA).toBeEqualish([1, 2, 3, 4, 5, 6]); }); 39466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 39566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 39666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when vecA is the output vector", function() { 39766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.transformMat2d(vecA, vecA, matA); }); 39866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 39966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into vecA", function() { expect(vecA).toBeEqualish([12, 16]); }); 40066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecA", function() { expect(result).toBe(vecA); }); 40166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify matA", function() { expect(matA).toBeEqualish([1, 2, 3, 4, 5, 6]); }); 40266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 40366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 40466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 40566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("forEach", function() { 40666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var vecArray; 40766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 40866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { 40966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis vecArray = [ 41066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1, 2, 41166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3, 4, 41266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 0, 0 41366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]; 41466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 41566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 41666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when performing operations that take no extra arguments", function() { 41766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.forEach(vecArray, 0, 0, 0, vec2.normalize); }); 41866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 41966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should update all values", function() { 42066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis expect(vecArray).toBeEqualish([ 42166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 0.447214, 0.894427, 42266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 0.6, 0.8, 42366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 0, 0 42466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]); 42566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 42666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecArray", function() { expect(result).toBe(vecArray); }); 42766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 42866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 42966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when performing operations that takes one extra arguments", function() { 43066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.forEach(vecArray, 0, 0, 0, vec2.add, vecA); }); 43166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 43266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should update all values", function() { 43366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis expect(vecArray).toBeEqualish([ 43466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2, 4, 43566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4, 6, 43666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1, 2 43766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]); 43866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 43966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecArray", function() { expect(result).toBe(vecArray); }); 44066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 44166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 44266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 44366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when specifying an offset", function() { 44466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.forEach(vecArray, 0, 2, 0, vec2.add, vecA); }); 44566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 44666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should update all values except the first vector", function() { 44766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis expect(vecArray).toBeEqualish([ 44866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1, 2, 44966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4, 6, 45066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1, 2 45166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]); 45266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 45366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecArray", function() { expect(result).toBe(vecArray); }); 45466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 45566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 45666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 45766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when specifying a count", function() { 45866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.forEach(vecArray, 0, 0, 2, vec2.add, vecA); }); 45966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 46066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should update all values except the last vector", function() { 46166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis expect(vecArray).toBeEqualish([ 46266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2, 4, 46366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4, 6, 46466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 0, 0 46566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]); 46666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 46766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecArray", function() { expect(result).toBe(vecArray); }); 46866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 46966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 47066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 47166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when specifying a stride", function() { 47266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.forEach(vecArray, 4, 0, 0, vec2.add, vecA); }); 47366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 47466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should update all values except the second vector", function() { 47566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis expect(vecArray).toBeEqualish([ 47666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2, 4, 47766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3, 4, 47866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1, 2 47966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]); 48066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 48166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecArray", function() { expect(result).toBe(vecArray); }); 48266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify vecA", function() { expect(vecA).toBeEqualish([1, 2]); }); 48366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 48466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 48566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when calling a function that does not modify the out variable", function() { 48666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { 48766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis result = vec2.forEach(vecArray, 0, 0, 0, function(out, vec) {}); 48866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 48966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 49066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("values should remain unchanged", function() { 49166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis expect(vecArray).toBeEqualish([ 49266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 1, 2, 49366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3, 4, 49466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 0, 0, 49566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis ]); 49666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 49766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return vecArray", function() { expect(result).toBe(vecArray); }); 49866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 49966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 50066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 50166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("str", function() { 50266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = vec2.str(vecA); }); 50366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 50466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return a string representation of the vector", function() { expect(result).toEqual("vec2(1, 2)"); }); 50566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 50666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 507