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("quat", function() { 2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis var out, quatA, quatB, result; 2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { quatA = [1, 2, 3, 4]; quatB = [5, 6, 7, 8]; out = [0, 0, 0, 0]; }); 2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("create", function() { 2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.create(); }); 3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return a 4 element array initialized to an identity quaternion", function() { expect(result).toBeEqualish([0, 0, 0, 1]); }); 3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("clone", function() { 3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.clone(quatA); }); 3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return a 4 element array initialized to the values in quatA", function() { expect(result).toBeEqualish(quatA); }); 3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("fromValues", function() { 3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.fromValues(1, 2, 3, 4); }); 4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return a 4 element array initialized to the values passed", function() { expect(result).toBeEqualish([1, 2, 3, 4]); }); 4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("copy", function() { 4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.copy(out, quatA); }); 4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([1, 2, 3, 4]); }); 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 = quat.set(out, 1, 2, 3, 4); }); 5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([1, 2, 3, 4]); }); 5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("identity", function() { 5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.identity(out); }); 5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(result).toBeEqualish([0, 0, 0, 1]); }); 5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("setAxisAngle", function() { 6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.setAxisAngle(out, [1, 0, 0], Math.PI * 0.5); }); 6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(result).toBeEqualish([0.707106, 0, 0, 0.707106]); }); 6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("add", function() { 6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output quaternion", function() { 6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.add(out, quatA, quatB); }); 7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([6, 8, 10, 12]); }); 7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatB", function() { expect(quatB).toBeEqualish([5, 6, 7, 8]); }); 7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatA is the output quaternion", function() { 7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.add(quatA, quatA, quatB); }); 7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatA", function() { expect(quatA).toBeEqualish([6, 8, 10, 12]); }); 8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatA", function() { expect(result).toBe(quatA); }); 8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatB", function() { expect(quatB).toBeEqualish([5, 6, 7, 8]); }); 8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 8466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatB is the output quaternion", function() { 8666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.add(quatB, quatA, quatB); }); 8766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 8866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatB", function() { expect(quatB).toBeEqualish([6, 8, 10, 12]); }); 8966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatB", function() { expect(result).toBe(quatB); }); 9066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 9166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 9266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 9366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("multiply", function() { 9566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'mul'", function() { expect(quat.mul).toEqual(quat.multiply); }); 9666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 9766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output quaternion", function() { 9866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.multiply(out, quatA, quatB); }); 9966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([24, 48, 48, -6]); }); 10166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 10266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 10366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatB", function() { expect(quatB).toBeEqualish([5, 6, 7, 8]); }); 10466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 10566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatA is the output quaternion", function() { 10766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.multiply(quatA, quatA, quatB); }); 10866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 10966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatA", function() { expect(quatA).toBeEqualish([24, 48, 48, -6]); }); 11066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatA", function() { expect(result).toBe(quatA); }); 11166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatB", function() { expect(quatB).toBeEqualish([5, 6, 7, 8]); }); 11266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 11366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatB is the output quaternion", function() { 11566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.multiply(quatB, quatA, quatB); }); 11666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 11766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatB", function() { expect(quatB).toBeEqualish([24, 48, 48, -6]); }); 11866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatB", function() { expect(result).toBe(quatB); }); 11966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 12066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 12166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 12266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("scale", function() { 12466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output quaternion", function() { 12566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.scale(out, quatA, 2); }); 12666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 12766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([2, 4, 6, 8]); }); 12866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 12966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 13066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 13166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatA is the output quaternion", function() { 13366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.scale(quatA, quatA, 2); }); 13466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 13566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatA", function() { expect(quatA).toBeEqualish([2, 4, 6, 8]); }); 13666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatA", function() { expect(result).toBe(quatA); }); 13766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 13866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 13966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("length", function() { 14166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'len'", function() { expect(quat.len).toEqual(quat.length); }); 14266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.length(quatA); }); 14466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return the length", function() { expect(result).toBeCloseTo(5.477225); }); 14666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 14766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 14866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("squaredLength", function() { 14966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should have an alias called 'sqrLen'", function() { expect(quat.sqrLen).toEqual(quat.squaredLength); }); 15066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.squaredLength(quatA); }); 15266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return the squared length", function() { expect(result).toEqual(30); }); 15466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 15566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("normalize", function() { 15766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { quatA = [5, 0, 0, 0]; }); 15866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 15966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output quaternion", function() { 16066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.normalize(out, quatA); }); 16166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([1, 0, 0, 0]); }); 16366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 16466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([5, 0, 0, 0]); }); 16566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 16666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 16766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatA is the output quaternion", function() { 16866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.normalize(quatA, quatA); }); 16966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatA", function() { expect(quatA).toBeEqualish([1, 0, 0, 0]); }); 17166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatA", function() { expect(result).toBe(quatA); }); 17266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 17366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 17466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("lerp", function() { 17666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output quaternion", function() { 17766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.lerp(out, quatA, quatB, 0.5); }); 17866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 17966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([3, 4, 5, 6]); }); 18066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 18166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 18266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatB", function() { expect(quatB).toBeEqualish([5, 6, 7, 8]); }); 18366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 18466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatA is the output quaternion", function() { 18666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.lerp(quatA, quatA, quatB, 0.5); }); 18766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 18866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatA", function() { expect(quatA).toBeEqualish([3, 4, 5, 6]); }); 18966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatA", function() { expect(result).toBe(quatA); }); 19066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatB", function() { expect(quatB).toBeEqualish([5, 6, 7, 8]); }); 19166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 19266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 19366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatB is the output quaternion", function() { 19466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.lerp(quatB, quatA, quatB, 0.5); }); 19566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 19666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatB", function() { expect(quatB).toBeEqualish([3, 4, 5, 6]); }); 19766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatB", function() { expect(result).toBe(quatB); }); 19866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 19966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 20066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 20166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 20266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis /*describe("slerp", function() { 20366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output quaternion", function() { 20466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.slerp(out, quatA, quatB, 0.5); }); 20566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 20666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([3, 4, 5, 6]); }); 20766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 20866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 20966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatB", function() { expect(quatB).toBeEqualish([5, 6, 7, 8]); }); 21066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 21166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 21266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatA is the output quaternion", function() { 21366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.slerp(quatA, quatA, quatB, 0.5); }); 21466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 21566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatA", function() { expect(quatA).toBeEqualish([3, 4, 5, 6]); }); 21666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatA", function() { expect(result).toBe(quatA); }); 21766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatB", function() { expect(quatB).toBeEqualish([5, 6, 7, 8]); }); 21866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 21966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 22066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatB is the output quaternion", function() { 22166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.slerp(quatB, quatA, quatB, 0.5); }); 22266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 22366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatB", function() { expect(quatB).toBeEqualish([3, 4, 5, 6]); }); 22466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatB", function() { expect(result).toBe(quatB); }); 22566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 22666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 22766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis });*/ 22866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 22966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis // TODO: slerp, calcuateW, rotateX, rotateY, rotateZ 23066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 23166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("invert", function() { 23266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output quaternion", function() { 23366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.invert(out, quatA); }); 23466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 23566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([-0.033333, -0.066666, -0.1, 0.133333]); }); 23666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 23766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 23866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 23966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatA is the output quaternion", function() { 24166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.invert(quatA, quatA); }); 24266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatA", function() { expect(quatA).toBeEqualish([-0.033333, -0.066666, -0.1, 0.133333]); }); 24466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatA", function() { expect(result).toBe(quatA); }); 24566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 24666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 24766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 24866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("conjugate", function() { 24966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("with a separate output quaternion", function() { 25066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.conjugate(out, quatA); }); 25166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 25266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into out", function() { expect(out).toBeEqualish([-1, -2, -3, 4]); }); 25366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return out", function() { expect(result).toBe(out); }); 25466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should not modify quatA", function() { expect(quatA).toBeEqualish([1, 2, 3, 4]); }); 25566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 25666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 25766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("when quatA is the output quaternion", function() { 25866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.conjugate(quatA, quatA); }); 25966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should place values into quatA", function() { expect(quatA).toBeEqualish([-1, -2, -3, 4]); }); 26166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return quatA", function() { expect(result).toBe(quatA); }); 26266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 26366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 26466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis describe("str", function() { 26666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis beforeEach(function() { result = quat.str(quatA); }); 26766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis 26866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis it("should return a string representation of the quaternion", function() { expect(result).toEqual("quat(1, 2, 3, 4)"); }); 26966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis }); 27066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis}); 271