123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /**
- * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author David Sehnal <david.sehnal@gmail.com>
- */
- import { Tensor as T } from '../tensor'
- import { Mat4 } from '../3d'
- describe('tensor', () => {
- it('vector', () => {
- const V = T.Vector(3);
- const data = V.create();
- V.set(data, 0, 1);
- V.set(data, 1, 2);
- V.set(data, 2, 3);
- expect(data).toEqual(new Float64Array([1, 2, 3]));
- expect(V.get(data, 0)).toEqual(1);
- expect(V.get(data, 1)).toEqual(2);
- expect(V.get(data, 2)).toEqual(3);
- });
- it('matrix cm', () => {
- const M = T.ColumnMajorMatrix(3, 2, Int32Array);
- const data = M.create()
- // rows: [ [0, 1], [1, 2], [2, 3] ]
- for (let i = 0; i < 3; i++) {
- for (let j = 0; j < 2; j++) {
- M.set(data, i, j, i + j);
- }
- }
- expect(data).toEqual(new Int32Array([0, 1, 2, 1, 2, 3]));
- });
- it('matrix rm', () => {
- const M = T.RowMajorMatrix(3, 2, Int32Array);
- const data = M.create();
- // rows: [ [0, 1], [1, 2], [2, 3] ]
- for (let i = 0; i < 3; i++) {
- for (let j = 0; j < 2; j++) {
- M.set(data, i, j, i + j);
- }
- }
- expect(data).toEqual(new Int32Array([0, 1, 1, 2, 2, 3]));
- });
- it('mat4 equiv', () => {
- const M = T.ColumnMajorMatrix(4, 4);
- const data = M.create();
- const m = Mat4.zero();
- for (let i = 0; i < 4; i++) {
- for (let j = 0; j < 4; j++) {
- const v = (i + 1) * (j + 2);
- M.set(data, i, j, v);
- Mat4.setValue(m, i, j, v);
- }
- }
- for (let i = 0; i < 16; i++) expect(data[i]).toEqual(m[i]);
- });
- it('2d ij', () => {
- const M = T.Space([3, 4], [0, 1]);
- const data = M.create();
- const exp = new Float64Array(3 * 4)
- let o = 0;
- for (let i = 0; i < 3; i++) {
- for (let j = 0; j < 4; j++) {
- M.set(data, i, j, o);
- exp[o] = o;
- o++;
- }
- }
- expect(data).toEqual(exp);
- });
- it('2d ji', () => {
- const M = T.Space([3, 4], [1, 0]);
- const data = M.create();
- const exp = new Float64Array(3 * 4)
- let o = 0;
- for (let j = 0; j < 4; j++) {
- for (let i = 0; i < 3; i++) {
- M.set(data, i, j, o);
- exp[o] = o;
- o++;
- }
- }
- expect(data).toEqual(exp);
- });
- it('3d ijk', () => {
- const M = T.Space([3, 4, 5], [0, 1, 2]);
- const data = M.create();
- const exp = new Float64Array(3 * 4 * 5)
- let o = 0;
- for (let i = 0; i < 3; i++) {
- for (let j = 0; j < 4; j++) {
- for (let k = 0; k < 5; k++) {
- M.set(data, i, j, k, o);
- exp[o] = o;
- o++;
- }
- }
- }
- expect(data).toEqual(exp);
- });
- it('3d ikj', () => {
- const M = T.Space([3, 3, 3], [0, 2, 1]);
- const data = M.create();
- const exp = new Float64Array(3 * 3 * 3)
- let o = 0;
- for (let i = 0; i < 3; i++) {
- for (let k = 0; k < 3; k++) {
- for (let j = 0; j < 3; j++) {
- M.set(data, i, j, k, o);
- exp[o] = o;
- o++;
- }
- }
- }
- expect(data).toEqual(exp);
- });
- it('3d jik', () => {
- const M = T.Space([3, 3, 3], [1, 0, 2]);
- const data = M.create();
- const exp = new Float64Array(3 * 3 * 3)
- let o = 0;
- for (let j = 0; j < 3; j++) {
- for (let i = 0; i < 3; i++) {
- for (let k = 0; k < 3; k++) {
- M.set(data, i, j, k, o);
- exp[o] = o;
- o++;
- }
- }
- }
- expect(data).toEqual(exp);
- });
- it('3d jki', () => {
- const M = T.Space([3, 3, 3], [1, 2, 0]);
- const data = M.create();
- const exp = new Float64Array(3 * 3 * 3)
- let o = 0;
- for (let j = 0; j < 3; j++) {
- for (let k = 0; k < 3; k++) {
- for (let i = 0; i < 3; i++) {
- M.set(data, i, j, k, o);
- exp[o] = o;
- o++;
- }
- }
- }
- expect(data).toEqual(exp);
- });
- it('3d kij', () => {
- const M = T.Space([3, 3, 3], [2, 0, 1]);
- const data = M.create();
- const exp = new Float64Array(3 * 3 * 3)
- let o = 0;
- for (let k = 0; k < 3; k++) {
- for (let i = 0; i < 3; i++) {
- for (let j = 0; j < 3; j++) {
- M.set(data, i, j, k, o);
- exp[o] = o;
- o++;
- }
- }
- }
- expect(data).toEqual(exp);
- });
- it('3d kji', () => {
- const M = T.Space([3, 3, 3], [2, 1, 0]);
- const data = M.create();
- const exp = new Float64Array(3 * 3 * 3)
- let o = 0;
- for (let k = 0; k < 3; k++) {
- for (let j = 0; j < 3; j++) {
- for (let i = 0; i < 3; i++) {
- M.set(data, i, j, k, o);
- exp[o] = o;
- o++;
- }
- }
- }
- expect(data).toEqual(exp);
- });
- });
|