|
|
import Vector from "../src/05/vector"; import Matrix from "../src/07/matrix";
import { assert, expect } from 'chai'; import { SingleEntryPlugin } from "webpack";
describe('Matrix', () => {
it('can be initialized with an array consisting of 16 numbers', () => { const m = new Matrix([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ]); expect(m).to.be.an('object'); });
it('single values can be set and retrieved', () => { const m = Matrix.identity();
expect(m).has.property('setVal'); expect(m).has.property('getVal'); m.setVal(1, 2, 342); expect(m.getVal(1, 2)).to.equal(342); });
it('all values can be retrieved', () => { const m = new Matrix([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]);
expect(m).has.property('getVals'); var mat = m.getVals(); assert.deepEqual(mat, [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]); }); it('translation works', () => {
expect(Matrix).has.property('translation'); const t = Matrix.translation(new Vector(1, 2, 3, 0));
expect(t).to.not.be.null; expect(t).to.be.an('object');
assert.deepEqual(t.getVals(), [ 1, 0, 0, 1, 0, 1, 0, 2, 0, 0, 1, 3, 0, 0, 0, 1 ]); });
it('rotation around x-axis works', () => {
expect(Matrix).has.property('rotation'); const x = Matrix.rotation(new Vector(1, 0, 0, 0), Math.PI / 4);
expect(x).to.not.be.null; expect(x).to.be.an('object'); assert.deepEqual(x.getVals(), [ 1, 0, 0, 0, 0, 0.7071067690849304, -0.7071067690849304, 0, 0, 0.7071067690849304, 0.7071067690849304, 0, 0, 0, 0, 1 ]); });
it('rotation around y-axis works', () => {
expect(Matrix).has.property('rotation'); const y = Matrix.rotation(new Vector(0, 1, 0, 0), -Math.PI / 4); expect(y).to.not.be.null; expect(y).to.be.an('object'); assert.deepEqual(y.getVals(), [ 0.7071067690849304, 0, -0.7071067690849304, 0, 0, 1, 0, 0, 0.7071067690849304, 0, 0.7071067690849304, 0, 0, 0, 0, 1 ]); });
it('rotation around z-axis works', () => {
expect(Matrix).has.property('rotation'); const z = Matrix.rotation(new Vector(0, 0, 1, 0), -Math.PI / 4);
expect(z).to.not.be.null; expect(z).to.be.an('object'); assert.deepEqual(z.getVals(), [ 0.7071067690849304, 0.7071067690849304, 0, 0, -0.7071067690849304, 0.7071067690849304, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]); });
it('scaling matrix works', () => {
expect(Matrix).has.property('scaling'); const m = Matrix.scaling(new Vector(2, 3, 4, 0));
expect(m).to.not.be.null; expect(m).to.be.an('object'); assert.deepEqual(m.getVals(), [ 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1 ]); });
it('matrix vector multiplication works', () => {
let m1: Matrix = new Matrix([ -1, 0, 0, 1, 0, -1, 0, 2, 0, 0, 1, 3, 0, 0, 0, 1 ]);
let a = new Vector(0, 1, 0, 1); let b = new Vector(-1, 1, 0, 1);
expect(m1).to.not.be.null; expect(m1).to.be.an('object'); expect(m1).has.property('mulVec');
let at = m1.mulVec(a);
assert.deepEqual(at.valueOf(), [ 1, 1, 3, 1 ]);
let m2: Matrix = new Matrix([ 1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1 ]);
let bt = m2.mulVec(b);
assert.deepEqual(bt.valueOf(), [ -1, 0, 1, 1 ]); });
it('matrix matrix multiplication works', () => {
let m1: Matrix = new Matrix([ -1, 0, 0, 1, 0, -1, 0, 2, 0, 0, 1, 3, 0, 0, 0, 1 ]);
expect(m1).to.not.be.null; expect(m1).to.be.an('object'); expect(m1).has.property('mul');
let m2: Matrix = new Matrix([ 1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1 ]);
let m = m1.mul(m2);
assert.deepEqual(m.getVals(), [ -1, 0, 0, 1, 0, 0, 1, 2, 0, 1, 0, 3, 0, 0, 0, 1 ]); }); });
|