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