import { Cartesian3 } from "../../Source/Cesium.js"; import { HeadingPitchRoll } from "../../Source/Cesium.js"; import { Math as CesiumMath } from "../../Source/Cesium.js"; import { Matrix3 } from "../../Source/Cesium.js"; import { Quaternion } from "../../Source/Cesium.js"; describe("Core/Matrix3", function () { it("default constructor creates values array with all zeros.", function () { var matrix = new Matrix3(); expect(matrix[Matrix3.COLUMN0ROW0]).toEqual(0.0); expect(matrix[Matrix3.COLUMN1ROW0]).toEqual(0.0); expect(matrix[Matrix3.COLUMN2ROW0]).toEqual(0.0); expect(matrix[Matrix3.COLUMN0ROW1]).toEqual(0.0); expect(matrix[Matrix3.COLUMN1ROW1]).toEqual(0.0); expect(matrix[Matrix3.COLUMN2ROW1]).toEqual(0.0); expect(matrix[Matrix3.COLUMN0ROW2]).toEqual(0.0); expect(matrix[Matrix3.COLUMN1ROW2]).toEqual(0.0); expect(matrix[Matrix3.COLUMN2ROW2]).toEqual(0.0); }); it("constructor sets properties from parameters.", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(matrix[Matrix3.COLUMN0ROW0]).toEqual(1.0); expect(matrix[Matrix3.COLUMN1ROW0]).toEqual(2.0); expect(matrix[Matrix3.COLUMN2ROW0]).toEqual(3.0); expect(matrix[Matrix3.COLUMN0ROW1]).toEqual(4.0); expect(matrix[Matrix3.COLUMN1ROW1]).toEqual(5.0); expect(matrix[Matrix3.COLUMN2ROW1]).toEqual(6.0); expect(matrix[Matrix3.COLUMN0ROW2]).toEqual(7.0); expect(matrix[Matrix3.COLUMN1ROW2]).toEqual(8.0); expect(matrix[Matrix3.COLUMN2ROW2]).toEqual(9.0); }); it("can pack and unpack", function () { var array = []; var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); Matrix3.pack(matrix, array); expect(array.length).toEqual(Matrix3.packedLength); expect(Matrix3.unpack(array)).toEqual(matrix); }); it("can pack and unpack with offset", function () { var packed = new Array(3); var offset = 3; var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); Matrix3.pack(matrix, packed, offset); expect(packed.length).toEqual(offset + Matrix3.packedLength); var result = new Matrix3(); var returnedResult = Matrix3.unpack(packed, offset, result); expect(returnedResult).toBe(result); expect(result).toEqual(matrix); }); it("pack throws with undefined matrix", function () { var array = []; expect(function () { Matrix3.pack(undefined, array); }).toThrowDeveloperError(); }); it("pack throws with undefined array", function () { var matrix = new Matrix3(); expect(function () { Matrix3.pack(matrix, undefined); }).toThrowDeveloperError(); }); it("unpack throws with undefined array", function () { expect(function () { Matrix3.unpack(undefined); }).toThrowDeveloperError(); }); it("fromQuaternion works without a result parameter", function () { var sPiOver4 = Math.sin(CesiumMath.PI_OVER_FOUR); var cPiOver4 = Math.cos(CesiumMath.PI_OVER_FOUR); var sPiOver2 = Math.sin(CesiumMath.PI_OVER_TWO); var cPiOver2 = Math.cos(CesiumMath.PI_OVER_TWO); var tmp = Cartesian3.multiplyByScalar( new Cartesian3(0.0, 0.0, 1.0), sPiOver4, new Cartesian3() ); var quaternion = new Quaternion(tmp.x, tmp.y, tmp.z, cPiOver4); var expected = new Matrix3( cPiOver2, -sPiOver2, 0.0, sPiOver2, cPiOver2, 0.0, 0.0, 0.0, 1.0 ); var returnedResult = Matrix3.fromQuaternion(quaternion); expect(returnedResult).toEqualEpsilon(expected, CesiumMath.EPSILON15); }); it("fromQuaternion works with a result parameter", function () { var sPiOver4 = Math.sin(CesiumMath.PI_OVER_FOUR); var cPiOver4 = Math.cos(CesiumMath.PI_OVER_FOUR); var sPiOver2 = Math.sin(CesiumMath.PI_OVER_TWO); var cPiOver2 = Math.cos(CesiumMath.PI_OVER_TWO); var tmp = Cartesian3.multiplyByScalar( new Cartesian3(0.0, 0.0, 1.0), sPiOver4, new Cartesian3() ); var quaternion = new Quaternion(tmp.x, tmp.y, tmp.z, cPiOver4); var expected = new Matrix3( cPiOver2, -sPiOver2, 0.0, sPiOver2, cPiOver2, 0.0, 0.0, 0.0, 1.0 ); var result = new Matrix3(); var returnedResult = Matrix3.fromQuaternion(quaternion, result); expect(result).toBe(returnedResult); expect(returnedResult).toEqualEpsilon(expected, CesiumMath.EPSILON15); }); it("fromHeadingPitchRoll works without a result parameter", function () { var sPiOver4 = Math.sin(CesiumMath.PI_OVER_FOUR); var cPiOver4 = Math.cos(CesiumMath.PI_OVER_FOUR); var sPiOver2 = Math.sin(CesiumMath.PI_OVER_TWO); var cPiOver2 = Math.cos(CesiumMath.PI_OVER_TWO); var tmp = Cartesian3.multiplyByScalar( new Cartesian3(0.0, 0.0, 1.0), sPiOver4, new Cartesian3() ); var quaternion = new Quaternion(tmp.x, tmp.y, tmp.z, cPiOver4); var headingPitchRoll = HeadingPitchRoll.fromQuaternion(quaternion); var expected = new Matrix3( cPiOver2, -sPiOver2, 0.0, sPiOver2, cPiOver2, 0.0, 0.0, 0.0, 1.0 ); var returnedResult = Matrix3.fromHeadingPitchRoll(headingPitchRoll); expect(returnedResult).toEqualEpsilon(expected, CesiumMath.EPSILON15); }); it("fromHeadingPitchRoll works with a result parameter", function () { var sPiOver4 = Math.sin(CesiumMath.PI_OVER_FOUR); var cPiOver4 = Math.cos(CesiumMath.PI_OVER_FOUR); var sPiOver2 = Math.sin(CesiumMath.PI_OVER_TWO); var cPiOver2 = Math.cos(CesiumMath.PI_OVER_TWO); var tmp = Cartesian3.multiplyByScalar( new Cartesian3(0.0, 0.0, 1.0), sPiOver4, new Cartesian3() ); var quaternion = new Quaternion(tmp.x, tmp.y, tmp.z, cPiOver4); var headingPitchRoll = HeadingPitchRoll.fromQuaternion(quaternion); var expected = new Matrix3( cPiOver2, -sPiOver2, 0.0, sPiOver2, cPiOver2, 0.0, 0.0, 0.0, 1.0 ); var result = new Matrix3(); var returnedResult = Matrix3.fromHeadingPitchRoll(headingPitchRoll, result); expect(result).toBe(returnedResult); expect(returnedResult).toEqualEpsilon(expected, CesiumMath.EPSILON15); }); it("fromHeadingPitchRoll computed correctly", function () { // Expected generated via STK Components var expected = new Matrix3( 0.754406506735489, 0.418940943945763, 0.505330889696038, 0.133022221559489, 0.656295369162553, -0.742685314912828, -0.642787609686539, 0.627506871597133, 0.439385041770705 ); var headingPitchRoll = new HeadingPitchRoll( -CesiumMath.toRadians(10), -CesiumMath.toRadians(40), CesiumMath.toRadians(55) ); var result = new Matrix3(); var returnedResult = Matrix3.fromHeadingPitchRoll(headingPitchRoll, result); expect(result).toBe(returnedResult); expect(returnedResult).toEqualEpsilon(expected, CesiumMath.EPSILON15); }); it("fromScale works without a result parameter", function () { var expected = new Matrix3(7.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 9.0); var returnedResult = Matrix3.fromScale(new Cartesian3(7.0, 8.0, 9.0)); expect(returnedResult).not.toBe(expected); expect(returnedResult).toEqual(expected); }); it("fromScale works with a result parameter", function () { var expected = new Matrix3(7.0, 0.0, 0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 9.0); var result = new Matrix3(); var returnedResult = Matrix3.fromScale( new Cartesian3(7.0, 8.0, 9.0), result ); expect(returnedResult).toBe(result); expect(returnedResult).not.toBe(expected); expect(returnedResult).toEqual(expected); }); it("fromUniformScale works without a result parameter", function () { var expected = new Matrix3(2.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 2.0); var returnedResult = Matrix3.fromUniformScale(2.0); expect(returnedResult).not.toBe(expected); expect(returnedResult).toEqual(expected); }); it("fromUniformScale works with a result parameter", function () { var expected = new Matrix3(2.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 2.0); var result = new Matrix3(); var returnedResult = Matrix3.fromUniformScale(2.0, result); expect(returnedResult).toBe(result); expect(returnedResult).toEqual(expected); }); it("fromCrossProduct works without a result parameter", function () { var expected = new Matrix3(0.0, -3.0, -2.0, 3.0, 0.0, -1.0, 2.0, 1.0, 0.0); var left = new Cartesian3(1.0, -2.0, 3.0); var returnedResult = Matrix3.fromCrossProduct(left); expect(returnedResult).not.toBe(expected); expect(returnedResult).toEqual(expected); var right = new Cartesian3(2.0, 3.0, 4.0); var crossProductExpected = new Cartesian3(-17.0, 2.0, 7.0); var crossProductResult = new Cartesian3(); // Check Cartesian3 cross product. crossProductResult = Cartesian3.cross(left, right, crossProductResult); expect(crossProductResult).toEqual(crossProductExpected); // Check Matrix3 cross product equivalent. crossProductResult = Matrix3.multiply( returnedResult, right, crossProductResult ); expect(crossProductResult).toEqual(crossProductExpected); }); it("fromCrossProduct works with a result parameter", function () { var expected = new Matrix3(0.0, -3.0, -2.0, 3.0, 0.0, -1.0, 2.0, 1.0, 0.0); var left = new Cartesian3(1.0, -2.0, 3.0); var result = new Matrix3(); var returnedResult = Matrix3.fromCrossProduct(left, result); expect(returnedResult).toBe(result); expect(returnedResult).toEqual(expected); var right = new Cartesian3(2.0, 3.0, 4.0); var crossProductExpected = new Cartesian3(-17.0, 2.0, 7.0); var crossProductResult = new Cartesian3(); // Check Cartesian3 cross product. crossProductResult = Cartesian3.cross(left, right, crossProductResult); expect(crossProductResult).toEqual(crossProductExpected); // Check Matrix3 cross product equivalent. crossProductResult = Matrix3.multiply( returnedResult, right, crossProductResult ); expect(crossProductResult).toEqual(crossProductExpected); }); it("fromArray works without a result parameter", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var matrix = Matrix3.fromArray([ 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0, ]); expect(matrix).toEqual(expected); }); it("fromArray works with a result parameter", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var matrix = Matrix3.fromArray( [1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0], 0, result ); expect(matrix).toBe(result); expect(matrix).toEqual(expected); }); it("fromArray works with an offset", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var matrix = Matrix3.fromArray( [0.0, 0.0, 0.0, 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0], 3, result ); expect(matrix).toBe(result); expect(matrix).toEqual(expected); }); it("fromRowMajorArray works without a result parameter", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var matrix = Matrix3.fromRowMajorArray([ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, ]); expect(matrix).toEqual(expected); }); it("fromRowMajorArray works with a result parameter", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var matrix = Matrix3.fromRowMajorArray( [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], result ); expect(matrix).toBe(result); expect(matrix).toEqual(expected); }); it("fromColumnMajorArray works without a result parameter", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var matrix = Matrix3.fromColumnMajorArray([ 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0, ]); expect(matrix).toEqual(expected); }); it("fromColumnMajorArray works with a result parameter", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var matrix = Matrix3.fromColumnMajorArray( [1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0], result ); expect(matrix).toBe(result); expect(matrix).toEqual(expected); }); it("fromRotationX works without a result parameter", function () { var matrix = Matrix3.fromRotationX(0.0); expect(matrix).toEqual(Matrix3.IDENTITY); }); it("fromRotationX works with a result parameter", function () { var expected = new Matrix3(1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0); var result = new Matrix3(); var matrix = Matrix3.fromRotationX(CesiumMath.toRadians(90.0), result); expect(matrix).toBe(result); expect(matrix).toEqualEpsilon(expected, CesiumMath.EPSILON15); }); it("fromRotationX throws without angle", function () { expect(function () { Matrix3.fromRotationX(); }).toThrowDeveloperError(); }); it("fromRotationY works without a result parameter", function () { var matrix = Matrix3.fromRotationY(0.0); expect(matrix).toEqual(Matrix3.IDENTITY); }); it("fromRotationY works with a result parameter", function () { var expected = new Matrix3(0.0, 0.0, 1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0); var result = new Matrix3(); var matrix = Matrix3.fromRotationY(CesiumMath.toRadians(90.0), result); expect(matrix).toBe(result); expect(matrix).toEqualEpsilon(expected, CesiumMath.EPSILON15); }); it("fromRotationY throws without angle", function () { expect(function () { Matrix3.fromRotationY(); }).toThrowDeveloperError(); }); it("fromRotationZ works without a result parameter", function () { var matrix = Matrix3.fromRotationZ(0.0); expect(matrix).toEqual(Matrix3.IDENTITY); }); it("fromRotationZ works with a result parameter", function () { var expected = new Matrix3(0.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0); var result = new Matrix3(); var matrix = Matrix3.fromRotationZ(CesiumMath.toRadians(90.0), result); expect(matrix).toBe(result); expect(matrix).toEqualEpsilon(expected, CesiumMath.EPSILON15); }); it("fromRotationZ throws without angle", function () { expect(function () { Matrix3.fromRotationZ(); }).toThrowDeveloperError(); }); it("clone works without a result parameter", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var returnedResult = expected.clone(); expect(returnedResult).not.toBe(expected); expect(returnedResult).toEqual(expected); }); it("clone works with a result parameter", function () { var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var returnedResult = expected.clone(result); expect(returnedResult).toBe(result); expect(returnedResult).not.toBe(expected); expect(returnedResult).toEqual(expected); }); it("toArray works without a result parameter", function () { var expected = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]; var returnedResult = Matrix3.toArray( Matrix3.fromColumnMajorArray(expected) ); expect(returnedResult).not.toBe(expected); expect(returnedResult).toEqual(expected); }); it("toArray works with a result parameter", function () { var expected = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]; var result = []; var returnedResult = Matrix3.toArray( Matrix3.fromColumnMajorArray(expected), result ); expect(returnedResult).toBe(result); expect(returnedResult).not.toBe(expected); expect(returnedResult).toEqual(expected); }); it("getElementIndex works", function () { var i = 0; for (var col = 0; col < 3; col++) { for (var row = 0; row < 3; row++) { var index = Matrix3.getElementIndex(col, row); expect(index).toEqual(i); i++; } } }); it("getColumn works", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var expectedColumn0 = new Cartesian3(1.0, 4.0, 7.0); var expectedColumn1 = new Cartesian3(2.0, 5.0, 8.0); var expectedColumn2 = new Cartesian3(3.0, 6.0, 9.0); var resultColumn0 = new Cartesian3(); var resultColumn1 = new Cartesian3(); var resultColumn2 = new Cartesian3(); var returnedResultColumn0 = Matrix3.getColumn(matrix, 0, resultColumn0); var returnedResultColumn1 = Matrix3.getColumn(matrix, 1, resultColumn1); var returnedResultColumn2 = Matrix3.getColumn(matrix, 2, resultColumn2); expect(resultColumn0).toBe(returnedResultColumn0); expect(resultColumn0).toEqual(expectedColumn0); expect(resultColumn1).toBe(returnedResultColumn1); expect(resultColumn1).toEqual(expectedColumn1); expect(resultColumn2).toBe(returnedResultColumn2); expect(resultColumn2).toEqual(expectedColumn2); }); it("setColumn works", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var expected = new Matrix3(10.0, 2.0, 3.0, 11.0, 5.0, 6.0, 12.0, 8.0, 9.0); var returnedResult = Matrix3.setColumn( matrix, 0, new Cartesian3(10.0, 11.0, 12.0), result ); expect(result).toBe(returnedResult); expect(result).toEqual(expected); expected = new Matrix3(1.0, 13.0, 3.0, 4.0, 14.0, 6.0, 7.0, 15.0, 9.0); returnedResult = Matrix3.setColumn( matrix, 1, new Cartesian3(13.0, 14.0, 15.0), result ); expect(result).toBe(returnedResult); expect(result).toEqual(expected); expected = new Matrix3(1.0, 2.0, 16.0, 4.0, 5.0, 17.0, 7.0, 8.0, 18.0); returnedResult = Matrix3.setColumn( matrix, 2, new Cartesian3(16.0, 17.0, 18.0), result ); expect(result).toBe(returnedResult); expect(result).toEqual(expected); }); it("getRow works", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var expectedRow0 = new Cartesian3(1.0, 2.0, 3.0); var expectedRow1 = new Cartesian3(4.0, 5.0, 6.0); var expectedRow2 = new Cartesian3(7.0, 8.0, 9.0); var resultRow0 = new Cartesian3(); var resultRow1 = new Cartesian3(); var resultRow2 = new Cartesian3(); var returnedResultRow0 = Matrix3.getRow(matrix, 0, resultRow0); var returnedResultRow1 = Matrix3.getRow(matrix, 1, resultRow1); var returnedResultRow2 = Matrix3.getRow(matrix, 2, resultRow2); expect(resultRow0).toBe(returnedResultRow0); expect(resultRow0).toEqual(expectedRow0); expect(resultRow1).toBe(returnedResultRow1); expect(resultRow1).toEqual(expectedRow1); expect(resultRow2).toBe(returnedResultRow2); expect(resultRow2).toEqual(expectedRow2); }); it("setRow works", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var expected = new Matrix3(10.0, 11.0, 12.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var returnedResult = Matrix3.setRow( matrix, 0, new Cartesian3(10.0, 11.0, 12.0), result ); expect(result).toBe(returnedResult); expect(result).toEqual(expected); expected = new Matrix3(1.0, 2.0, 3.0, 13.0, 14.0, 15.0, 7.0, 8.0, 9.0); returnedResult = Matrix3.setRow( matrix, 1, new Cartesian3(13.0, 14.0, 15.0), result ); expect(result).toBe(returnedResult); expect(result).toEqual(expected); expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 16.0, 17.0, 18.0); returnedResult = Matrix3.setRow( matrix, 2, new Cartesian3(16.0, 17.0, 18.0), result ); expect(result).toBe(returnedResult); expect(result).toEqual(expected); }); it("getScale works", function () { var scale = new Cartesian3(1.0, 2.0, 3.0); var result = new Cartesian3(); var computedScale = Matrix3.getScale(Matrix3.fromScale(scale), result); expect(computedScale).toBe(result); expect(computedScale).toEqualEpsilon(scale, CesiumMath.EPSILON14); }); it("getScale throws without a matrix", function () { expect(function () { Matrix3.getScale(); }).toThrowDeveloperError(); }); it("getMaximumScale works", function () { var m = Matrix3.fromScale(new Cartesian3(1.0, 2.0, 3.0)); expect(Matrix3.getMaximumScale(m)).toEqualEpsilon( 3.0, CesiumMath.EPSILON14 ); }); it("getMaximumScale throws without a matrix", function () { expect(function () { Matrix3.getMaximumScale(); }).toThrowDeveloperError(); }); it("multiply works", function () { var left = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); var right = new Matrix3(10, 11, 12, 13, 14, 15, 16, 17, 18); var expected = new Matrix3(84, 90, 96, 201, 216, 231, 318, 342, 366); var result = new Matrix3(); var returnedResult = Matrix3.multiply(left, right, result); expect(returnedResult).toBe(result); expect(result).toEqual(expected); }); it("multiply works with a result parameter that is an input result parameter", function () { var left = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); var right = new Matrix3(10, 11, 12, 13, 14, 15, 16, 17, 18); var expected = new Matrix3(84, 90, 96, 201, 216, 231, 318, 342, 366); var returnedResult = Matrix3.multiply(left, right, left); expect(returnedResult).toBe(left); expect(left).toEqual(expected); }); it("add works", function () { var left = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); var right = new Matrix3(10, 11, 12, 13, 14, 15, 16, 17, 18); var expected = new Matrix3(11, 13, 15, 17, 19, 21, 23, 25, 27); var result = new Matrix3(); var returnedResult = Matrix3.add(left, right, result); expect(returnedResult).toBe(result); expect(result).toEqual(expected); }); it("add works with a result parameter that is an input result parameter", function () { var left = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); var right = new Matrix3(10, 11, 12, 13, 14, 15, 16, 17, 18); var expected = new Matrix3(11, 13, 15, 17, 19, 21, 23, 25, 27); var returnedResult = Matrix3.add(left, right, left); expect(returnedResult).toBe(left); expect(left).toEqual(expected); }); it("subtract works", function () { var left = new Matrix3(11, 13, 15, 17, 19, 21, 23, 25, 27); var right = new Matrix3(10, 11, 12, 13, 14, 15, 16, 17, 18); var expected = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); var result = new Matrix3(); var returnedResult = Matrix3.subtract(left, right, result); expect(returnedResult).toBe(result); expect(result).toEqual(expected); }); it("subtract works with a result parameter that is an input result parameter", function () { var left = new Matrix3(11, 13, 15, 17, 19, 21, 23, 25, 27); var right = new Matrix3(10, 11, 12, 13, 14, 15, 16, 17, 18); var expected = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); var returnedResult = Matrix3.subtract(left, right, left); expect(returnedResult).toBe(left); expect(left).toEqual(expected); }); it("multiplyByScale works", function () { var m = new Matrix3(2, 3, 4, 6, 7, 8, 10, 11, 12); var scale = new Cartesian3(2.0, 3.0, 4.0); var expected = Matrix3.multiply(m, Matrix3.fromScale(scale), new Matrix3()); var result = new Matrix3(); var returnedResult = Matrix3.multiplyByScale(m, scale, result); expect(returnedResult).toBe(result); expect(result).toEqual(expected); }); it('multiplyByScale works with "this" result parameter', function () { var m = new Matrix3(1, 2, 3, 5, 6, 7, 9, 10, 11); var scale = new Cartesian3(1.0, 2.0, 3.0); var expected = Matrix3.multiply(m, Matrix3.fromScale(scale), new Matrix3()); var returnedResult = Matrix3.multiplyByScale(m, scale, m); expect(returnedResult).toBe(m); expect(m).toEqual(expected); }); it("multiplyByVector works", function () { var left = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); var right = new Cartesian3(10, 11, 12); var expected = new Cartesian3(68, 167, 266); var result = new Cartesian3(); var returnedResult = Matrix3.multiplyByVector(left, right, result); expect(returnedResult).toBe(result); expect(result).toEqual(expected); }); it("multiplyByScalar works", function () { var left = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); var right = 2; var expected = new Matrix3(2, 4, 6, 8, 10, 12, 14, 16, 18); var result = new Matrix3(); var returnedResult = Matrix3.multiplyByScalar(left, right, result); expect(returnedResult).toBe(result); expect(result).toEqual(expected); }); it("negate works", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var expected = new Matrix3( -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, -7.0, -8.0, -9.0 ); var result = new Matrix3(); var returnedResult = Matrix3.negate(matrix, result); expect(result).toBe(returnedResult); expect(result).toEqual(expected); }); it("negate works with a result parameter that is an input result parameter", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var expected = new Matrix3( -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, -7.0, -8.0, -9.0 ); var returnedResult = Matrix3.negate(matrix, matrix); expect(matrix).toBe(returnedResult); expect(matrix).toEqual(expected); }); it("transpose works", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var expected = new Matrix3(1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0); var result = new Matrix3(); var returnedResult = Matrix3.transpose(matrix, result); expect(result).toBe(returnedResult); expect(result).toEqual(expected); }); it("inverseTranspose works", function () { var matrix = new Matrix3(1.0, 5.0, 2.0, 1.0, 1.0, 7.0, 0.0, -3.0, 4.0); var expectedInverse = Matrix3.inverse(matrix, new Matrix3()); var expectedInverseTranspose = Matrix3.transpose( expectedInverse, new Matrix3() ); var result = Matrix3.inverseTranspose(matrix, new Matrix3()); expect(result).toEqual(expectedInverseTranspose); }); it("getRotation returns matrix without scale", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var expected = Matrix3.fromArray([ 0.12309149097933272, 0.4923659639173309, 0.8616404368553291, 0.20739033894608505, 0.5184758473652127, 0.8295613557843402, 0.2672612419124244, 0.5345224838248488, 0.8017837257372732, ]); var scale = new Cartesian3(); var expectedScale = new Cartesian3(1.0, 1.0, 1.0); result = Matrix3.getRotation(matrix, result); var resultScale = Matrix3.getScale(result, scale); expect(resultScale).toEqualEpsilon(expectedScale, CesiumMath.EPSILON14); expect(result).toEqualEpsilon(expected, CesiumMath.EPSILON14); }); it("getRotation does not modify rotation matrix", function () { var tmp = new Matrix3(); var result = new Matrix3(); var rotation = Matrix3.clone(Matrix3.IDENTITY, new Matrix3()); Matrix3.multiply(rotation, Matrix3.fromRotationX(1.0, tmp), rotation); Matrix3.multiply(rotation, Matrix3.fromRotationY(2.0, tmp), rotation); Matrix3.multiply(rotation, Matrix3.fromRotationZ(3.0, tmp), rotation); result = Matrix3.getRotation(rotation, result); expect(rotation).toEqualEpsilon(result, CesiumMath.EPSILON14); expect(rotation).not.toBe(result); }); it("getRotation throws without a matrix", function () { expect(function () { return Matrix3.getRotation(); }).toThrowDeveloperError(); }); it("getRotation throws without a result", function () { expect(function () { return Matrix3.getRotation(new Matrix3()); }).toThrowDeveloperError(); }); it("transpose works with a result parameter that is an input result parameter", function () { var matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var expected = new Matrix3(1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0); var returnedResult = Matrix3.transpose(matrix, matrix); expect(matrix).toBe(returnedResult); expect(matrix).toEqual(expected); }); it("determinant works", function () { var matrix = new Matrix3(1.0, 5.0, 2.0, 1.0, 1.0, 7.0, 0.0, -3.0, 4.0); var expected = -1.0; var result = Matrix3.determinant(matrix); expect(result).toEqual(expected); }); it("inverse works", function () { var matrix = new Matrix3(1.0, 5.0, 2.0, 1.0, 1.0, 7.0, 0.0, -3.0, 4.0); var expected = new Matrix3( -25.0, 26.0, -33.0, 4.0, -4.0, 5.0, 3.0, -3.0, 4.0 ); var result = new Matrix3(); var returnedResult = Matrix3.inverse(matrix, result); expect(result).toBe(returnedResult); expect(result).toEqual(expected); }); it("inverse works with a result parameter that is an input result parameter", function () { var matrix = new Matrix3(1.0, 5.0, 2.0, 1.0, 1.0, 7.0, 0.0, -3.0, 4.0); var expected = new Matrix3( -25.0, 26.0, -33.0, 4.0, -4.0, 5.0, 3.0, -3.0, 4.0 ); var returnedResult = Matrix3.inverse(matrix, matrix); expect(matrix).toBe(returnedResult); expect(matrix).toEqual(expected); }); it("computeEigenDecomposition throws without a matrix", function () { expect(function () { return Matrix3.computeEigenDecomposition(); }).toThrowDeveloperError(); }); it("computes eigenvalues and eigenvectors", function () { var a = new Matrix3(4.0, -1.0, 1.0, -1.0, 3.0, -2.0, 1.0, -2.0, 3.0); var expectedDiagonal = new Matrix3( 3.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 1.0 ); var decomposition = Matrix3.computeEigenDecomposition(a); expect(decomposition.diagonal).toEqualEpsilon( expectedDiagonal, CesiumMath.EPSILON14 ); var v = Matrix3.getColumn(decomposition.unitary, 0, new Cartesian3()); var lambda = Matrix3.getColumn(decomposition.diagonal, 0, new Cartesian3()) .x; expect( Cartesian3.multiplyByScalar(v, lambda, new Cartesian3()) ).toEqualEpsilon( Matrix3.multiplyByVector(a, v, new Cartesian3()), CesiumMath.EPSILON14 ); v = Matrix3.getColumn(decomposition.unitary, 1, new Cartesian3()); lambda = Matrix3.getColumn(decomposition.diagonal, 1, new Cartesian3()).y; expect( Cartesian3.multiplyByScalar(v, lambda, new Cartesian3()) ).toEqualEpsilon( Matrix3.multiplyByVector(a, v, new Cartesian3()), CesiumMath.EPSILON14 ); v = Matrix3.getColumn(decomposition.unitary, 2, new Cartesian3()); lambda = Matrix3.getColumn(decomposition.diagonal, 2, new Cartesian3()).z; expect( Cartesian3.multiplyByScalar(v, lambda, new Cartesian3()) ).toEqualEpsilon( Matrix3.multiplyByVector(a, v, new Cartesian3()), CesiumMath.EPSILON14 ); }); it("computes eigenvalues and eigenvectors with result parameters", function () { var a = new Matrix3(4.0, -1.0, 1.0, -1.0, 3.0, -2.0, 1.0, -2.0, 3.0); var expectedDiagonal = new Matrix3( 3.0, 0.0, 0.0, 0.0, 6.0, 0.0, 0.0, 0.0, 1.0 ); var result = { unitary: new Matrix3(), diagonal: new Matrix3(), }; var decomposition = Matrix3.computeEigenDecomposition(a, result); expect(decomposition).toBe(result); expect(decomposition.diagonal).toEqualEpsilon( expectedDiagonal, CesiumMath.EPSILON14 ); var v = Matrix3.getColumn(decomposition.unitary, 0, new Cartesian3()); var lambda = Matrix3.getColumn(decomposition.diagonal, 0, new Cartesian3()) .x; expect( Cartesian3.multiplyByScalar(v, lambda, new Cartesian3()) ).toEqualEpsilon( Matrix3.multiplyByVector(a, v, new Cartesian3()), CesiumMath.EPSILON14 ); v = Matrix3.getColumn(decomposition.unitary, 1, new Cartesian3()); lambda = Matrix3.getColumn(decomposition.diagonal, 1, new Cartesian3()).y; expect( Cartesian3.multiplyByScalar(v, lambda, new Cartesian3()) ).toEqualEpsilon( Matrix3.multiplyByVector(a, v, new Cartesian3()), CesiumMath.EPSILON14 ); v = Matrix3.getColumn(decomposition.unitary, 2, new Cartesian3()); lambda = Matrix3.getColumn(decomposition.diagonal, 2, new Cartesian3()).z; expect( Cartesian3.multiplyByScalar(v, lambda, new Cartesian3()) ).toEqualEpsilon( Matrix3.multiplyByVector(a, v, new Cartesian3()), CesiumMath.EPSILON14 ); }); it("abs throws without a matrix", function () { expect(function () { return Matrix3.abs(); }).toThrowDeveloperError(); }); it("abs works", function () { var matrix = new Matrix3( -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, -7.0, -8.0, -9.0 ); var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var result = new Matrix3(); var returnedResult = Matrix3.abs(matrix, result); expect(returnedResult).toEqual(expected); matrix = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); returnedResult = Matrix3.abs(matrix, result); expect(returnedResult).toEqual(expected); matrix = new Matrix3(1.0, -2.0, -3.0, 4.0, 5.0, -6.0, 7.0, -8.0, 9.0); returnedResult = Matrix3.abs(matrix, result); expect(returnedResult).toEqual(expected); }); it("abs works with a result parameter that is an input result parameter", function () { var matrix = new Matrix3( -1.0, -2.0, -3.0, -4.0, -5.0, -6.0, -7.0, -8.0, -9.0 ); var expected = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var returnedResult = Matrix3.abs(matrix, matrix); expect(matrix).toBe(returnedResult); expect(matrix).toEqual(expected); }); it("equals works in all cases", function () { var left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(5.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(false); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 6.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(false); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 7.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(false); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 8.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(false); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 9.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(false); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 7.0, 8.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(false); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 11.0, 8.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(false); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 12.0, 9.0); expect(Matrix3.equals(left, right)).toEqual(false); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 13.0); expect(Matrix3.equals(left, right)).toEqual(false); }); it("equals works with undefined", function () { expect(Matrix3.equals(undefined, undefined)).toEqual(true); expect(Matrix3.equals(new Matrix3(), undefined)).toEqual(false); expect(Matrix3.equals(undefined, new Matrix3())).toEqual(false); }); it("equalsEpsilon works in all cases", function () { var left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); var right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 1.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(5.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 6.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 7.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 8.0, 5.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 9.0, 6.0, 7.0, 8.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 7.0, 8.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 11.0, 8.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 12.0, 9.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); left = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); right = new Matrix3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 13.0); expect(Matrix3.equalsEpsilon(left, right, 3.9)).toEqual(false); expect(Matrix3.equalsEpsilon(left, right, 4.0)).toEqual(true); }); it("equalsEpsilon works with undefined", function () { expect(Matrix3.equalsEpsilon(undefined, undefined, 1.0)).toEqual(true); expect(Matrix3.equalsEpsilon(new Matrix3(), undefined, 1.0)).toEqual(false); expect(Matrix3.equalsEpsilon(undefined, new Matrix3(), 1.0)).toEqual(false); }); it("toString", function () { var matrix = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9); expect(matrix.toString()).toEqual("(1, 2, 3)\n(4, 5, 6)\n(7, 8, 9)"); }); it("fromArray throws without an array", function () { expect(function () { Matrix3.fromArray(); }).toThrowDeveloperError(); }); it("fromRowMajorArray throws with undefined parameter", function () { expect(function () { Matrix3.fromRowMajorArray(undefined); }).toThrowDeveloperError(); }); it("fromColumnMajorArray throws with undefined parameter", function () { expect(function () { Matrix3.fromColumnMajorArray(undefined); }).toThrowDeveloperError(); }); it("clone returns undefined without matrix parameter", function () { expect(Matrix3.clone(undefined)).toBeUndefined(); }); it("toArray throws without matrix parameter", function () { expect(function () { Matrix3.toArray(undefined); }).toThrowDeveloperError(); }); it("getElement throws without row parameter", function () { var row; var col = 0.0; expect(function () { Matrix3.getElementIndex(col, row); }).toThrowDeveloperError(); }); it("getElement throws without column parameter", function () { var row = 0.0; var col; expect(function () { Matrix3.getElementIndex(col, row); }).toThrowDeveloperError(); }); it("getColumn throws without matrix parameter", function () { expect(function () { Matrix3.getColumn(undefined, 1); }).toThrowDeveloperError(); }); it("getColumn throws without of range index parameter", function () { var matrix = new Matrix3(); expect(function () { Matrix3.getColumn(matrix, 3); }).toThrowDeveloperError(); }); it("setColumn throws without matrix parameter", function () { var cartesian = new Cartesian3(); expect(function () { Matrix3.setColumn(undefined, 2, cartesian); }).toThrowDeveloperError(); }); it("setColumn throws without cartesian parameter", function () { var matrix = new Matrix3(); expect(function () { Matrix3.setColumn(matrix, 1, undefined); }).toThrowDeveloperError(); }); it("setColumn throws without of range index parameter", function () { var matrix = new Matrix3(); var cartesian = new Cartesian3(); expect(function () { Matrix3.setColumn(matrix, 3, cartesian); }).toThrowDeveloperError(); }); it("getRow throws without matrix parameter", function () { expect(function () { Matrix3.getRow(undefined, 1); }).toThrowDeveloperError(); }); it("getRow throws without of range index parameter", function () { var matrix = new Matrix3(); expect(function () { Matrix3.getRow(matrix, 3); }).toThrowDeveloperError(); }); it("setRow throws without matrix parameter", function () { var cartesian = new Cartesian3(); expect(function () { Matrix3.setRow(undefined, 2, cartesian); }).toThrowDeveloperError(); }); it("setRow throws without cartesian parameter", function () { var matrix = new Matrix3(); expect(function () { Matrix3.setRow(matrix, 1, undefined); }).toThrowDeveloperError(); }); it("setRow throws without of range index parameter", function () { var matrix = new Matrix3(); var cartesian = new Cartesian3(); expect(function () { Matrix3.setRow(matrix, 3, cartesian); }).toThrowDeveloperError(); }); it("multiply throws with no left parameter", function () { var right = new Matrix3(); expect(function () { Matrix3.multiply(undefined, right); }).toThrowDeveloperError(); }); it("multiply throws with no right parameter", function () { var left = new Matrix3(); expect(function () { Matrix3.multiply(left, undefined); }).toThrowDeveloperError(); }); it("multiplyByScale throws with no matrix parameter", function () { expect(function () { Matrix3.multiplyByScale(undefined, new Cartesian3()); }).toThrowDeveloperError(); }); it("multiplyByScale throws with no scale parameter", function () { var m = new Matrix3(); expect(function () { Matrix3.multiplyByScale(m, undefined); }).toThrowDeveloperError(); }); it("multiplyByVector throws with no matrix parameter", function () { var cartesian = new Cartesian3(); expect(function () { Matrix3.multiplyByVector(undefined, cartesian); }).toThrowDeveloperError(); }); it("multiplyByVector throws with no cartesian parameter", function () { var matrix = new Matrix3(); expect(function () { Matrix3.multiplyByVector(matrix, undefined); }).toThrowDeveloperError(); }); it("multiplyByScalar throws with no matrix parameter", function () { expect(function () { Matrix3.multiplyByScalar(undefined, 2); }).toThrowDeveloperError(); }); it("multiplyByScalar throws with non-numeric scalar parameter", function () { var matrix = new Matrix3(); expect(function () { Matrix3.multiplyByScalar(matrix, {}); }).toThrowDeveloperError(); }); it("negate throws without matrix parameter", function () { expect(function () { Matrix3.negate(undefined); }).toThrowDeveloperError(); }); it("transpose throws without matrix parameter", function () { expect(function () { Matrix3.transpose(undefined); }).toThrowDeveloperError(); }); it("determinant throws without matrix parameter", function () { expect(function () { Matrix3.determinant(undefined); }).toThrowDeveloperError(); }); it("inverse throws without matrix parameter", function () { expect(function () { Matrix3.inverse(undefined); }).toThrowDeveloperError(); }); it("inverse throws when matrix is not invertible", function () { expect(function () { Matrix3.inverse( new Matrix3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), new Matrix3() ); }).toThrowDeveloperError(); }); it("fromQuaternion throws without quaternion parameter", function () { expect(function () { Matrix3.fromQuaternion(undefined); }).toThrowDeveloperError(); }); it("fromHeadingPitchRoll throws without quaternion parameter", function () { expect(function () { Matrix3.fromHeadingPitchRoll(undefined); }).toThrowDeveloperError(); }); it("fromScale throws without scale parameter", function () { expect(function () { Matrix3.fromScale(undefined); }).toThrowDeveloperError(); }); it("fromUniformScale throws without scale parameter", function () { expect(function () { Matrix3.fromUniformScale(undefined); }).toThrowDeveloperError(); }); it("getColumn throws without result parameter", function () { expect(function () { Matrix3.getColumn(new Matrix3(), 2); }).toThrowDeveloperError(); }); it("setColumn throws without result parameter", function () { expect(function () { Matrix3.setColumn(new Matrix3(), 2, new Cartesian3()); }).toThrowDeveloperError(); }); it("getRow throws without result parameter", function () { expect(function () { Matrix3.getRow(new Matrix3(), 2); }).toThrowDeveloperError(); }); it("setRow throws without result parameter", function () { expect(function () { Matrix3.setRow(new Matrix3(), 2, new Cartesian3()); }).toThrowDeveloperError(); }); it("getScale throws without result parameter", function () { expect(function () { Matrix3.getScale(new Matrix3()); }).toThrowDeveloperError(); }); it("multiply throws without result parameter", function () { expect(function () { Matrix3.multiply(new Matrix3(), new Matrix3()); }).toThrowDeveloperError(); }); it("multiplyByScale throws without result parameter", function () { expect(function () { Matrix3.multiplyByScale(new Matrix3(), new Cartesian3()); }).toThrowDeveloperError(); }); it("multiplyByVector throws without result parameter", function () { expect(function () { Matrix3.multiplyByVector(new Matrix3(), new Cartesian3()); }).toThrowDeveloperError(); }); it("multiplyByScalar throws without result parameter", function () { expect(function () { Matrix3.multiplyByScalar(new Matrix3(), 2); }).toThrowDeveloperError(); }); it("negate throws without result parameter", function () { expect(function () { Matrix3.negate(new Matrix3()); }).toThrowDeveloperError(); }); it("transpose throws without result parameter", function () { expect(function () { Matrix3.transpose(new Matrix3()); }).toThrowDeveloperError(); }); it("abs throws without result parameter", function () { expect(function () { Matrix3.abs(new Matrix3()); }).toThrowDeveloperError(); }); it("inverse throws without result parameter", function () { expect(function () { Matrix3.inverse(new Matrix3()); }).toThrowDeveloperError(); }); it("Matrix3 objects can be used as array like objects", function () { var matrix = new Matrix3(1, 4, 7, 2, 5, 8, 3, 6, 9); expect(matrix.length).toEqual(9); var intArray = new Uint32Array(matrix.length); intArray.set(matrix); for (var index = 0; index < matrix.length; index++) { expect(intArray[index]).toEqual(index + 1); } }); });