molstar
Version:
A comprehensive macromolecular library.
286 lines • 9.9 kB
JavaScript
"use strict";
/**
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
var tensor_1 = require("../tensor");
var mat4_1 = require("../3d/mat4");
describe('tensor', function () {
it('vector', function () {
var V = tensor_1.Tensor.Vector(3);
var 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', function () {
var M = tensor_1.Tensor.ColumnMajorMatrix(3, 2, Int32Array);
var data = M.create();
// rows: [ [0, 1], [1, 2], [2, 3] ]
for (var i = 0; i < 3; i++) {
for (var 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', function () {
var M = tensor_1.Tensor.RowMajorMatrix(3, 2, Int32Array);
var data = M.create();
// rows: [ [0, 1], [1, 2], [2, 3] ]
for (var i = 0; i < 3; i++) {
for (var 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', function () {
var M = tensor_1.Tensor.ColumnMajorMatrix(4, 4);
var data = M.create();
var m = (0, mat4_1.Mat4)();
for (var i = 0; i < 4; i++) {
for (var j = 0; j < 4; j++) {
var v = (i + 1) * (j + 2);
M.set(data, i, j, v);
mat4_1.Mat4.setValue(m, i, j, v);
}
}
for (var i = 0; i < 16; i++)
expect(data[i]).toEqual(m[i]);
});
it('2d ij', function () {
var M = tensor_1.Tensor.Space([3, 4], [0, 1]);
var data = M.create();
var exp = new Float64Array(3 * 4);
var o = 0;
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 4; j++) {
M.set(data, i, j, o);
expect(M.get(data, i, j)).toBe(o);
exp[o] = o;
o++;
}
}
expect(data).toEqual(exp);
});
it('2d ji', function () {
var M = tensor_1.Tensor.Space([3, 4], [1, 0]);
var data = M.create();
var exp = new Float64Array(3 * 4);
var o = 0;
for (var j = 0; j < 4; j++) {
for (var i = 0; i < 3; i++) {
M.set(data, i, j, o);
expect(M.get(data, i, j)).toBe(o);
exp[o] = o;
o++;
}
}
expect(data).toEqual(exp);
});
it('3d ijk', function () {
var M = tensor_1.Tensor.Space([3, 4, 5], [0, 1, 2]);
var data = M.create();
var exp = new Float64Array(3 * 4 * 5);
var o = 0;
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 4; j++) {
for (var k = 0; k < 5; k++) {
M.set(data, i, j, k, o);
expect(M.get(data, i, j, k)).toBe(o);
exp[o] = o;
o++;
}
}
}
expect(data).toEqual(exp);
});
it('3d ikj', function () {
var M = tensor_1.Tensor.Space([3, 3, 3], [0, 2, 1]);
var data = M.create();
var exp = new Float64Array(3 * 3 * 3);
var o = 0;
for (var i = 0; i < 3; i++) {
for (var k = 0; k < 3; k++) {
for (var j = 0; j < 3; j++) {
M.set(data, i, j, k, o);
expect(M.get(data, i, j, k)).toBe(o);
exp[o] = o;
o++;
}
}
}
expect(data).toEqual(exp);
});
it('3d jik', function () {
var M = tensor_1.Tensor.Space([3, 3, 3], [1, 0, 2]);
var data = M.create();
var exp = new Float64Array(3 * 3 * 3);
var o = 0;
for (var j = 0; j < 3; j++) {
for (var i = 0; i < 3; i++) {
for (var k = 0; k < 3; k++) {
M.set(data, i, j, k, o);
expect(M.get(data, i, j, k)).toBe(o);
exp[o] = o;
o++;
}
}
}
expect(data).toEqual(exp);
});
it('3d jki', function () {
var M = tensor_1.Tensor.Space([3, 3, 3], [1, 2, 0]);
var data = M.create();
var exp = new Float64Array(3 * 3 * 3);
var o = 0;
for (var j = 0; j < 3; j++) {
for (var k = 0; k < 3; k++) {
for (var i = 0; i < 3; i++) {
M.set(data, i, j, k, o);
expect(M.get(data, i, j, k)).toBe(o);
exp[o] = o;
o++;
}
}
}
expect(data).toEqual(exp);
});
it('3d kij', function () {
var M = tensor_1.Tensor.Space([3, 3, 3], [2, 0, 1]);
var data = M.create();
var exp = new Float64Array(3 * 3 * 3);
var o = 0;
for (var k = 0; k < 3; k++) {
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
M.set(data, i, j, k, o);
expect(M.get(data, i, j, k)).toBe(o);
exp[o] = o;
o++;
}
}
}
expect(data).toEqual(exp);
});
it('3d kji', function () {
var M = tensor_1.Tensor.Space([3, 3, 3], [2, 1, 0]);
var data = M.create();
var exp = new Float64Array(3 * 3 * 3);
var o = 0;
for (var k = 0; k < 3; k++) {
for (var j = 0; j < 3; j++) {
for (var i = 0; i < 3; i++) {
M.set(data, i, j, k, o);
expect(M.get(data, i, j, k)).toBe(o);
exp[o] = o;
o++;
}
}
}
expect(data).toEqual(exp);
});
it('4d jikl', function () {
var M = tensor_1.Tensor.Space([2, 3, 4, 5], [1, 0, 2, 3]);
var data = M.create();
var exp = new Float64Array(2 * 3 * 4 * 5);
var o = 0;
for (var j = 0; j < 3; j++) {
for (var i = 0; i < 2; i++) {
for (var k = 0; k < 4; k++) {
for (var l = 0; l < 5; l++) {
M.set(data, i, j, k, l, o);
expect(M.get(data, i, j, k, l)).toBe(o);
exp[o] = o;
o++;
}
}
}
}
expect(data).toEqual(exp);
});
it('4d jilk', function () {
var M = tensor_1.Tensor.Space([2, 3, 4, 5], [1, 0, 3, 2]);
var data = M.create();
var exp = new Float64Array(2 * 3 * 4 * 5);
var o = 0;
for (var j = 0; j < 3; j++) {
for (var i = 0; i < 2; i++) {
for (var l = 0; l < 5; l++) {
for (var k = 0; k < 4; k++) {
M.set(data, i, j, k, l, o);
expect(M.get(data, i, j, k, l)).toBe(o);
exp[o] = o;
o++;
}
}
}
}
expect(data).toEqual(exp);
});
it('indexing', function () {
function permutations(inputArr) {
var result = [];
function permute(arr, m) {
if (m === void 0) { m = []; }
if (arr.length === 0) {
result.push(m);
}
else {
for (var i = 0; i < arr.length; i++) {
var curr = arr.slice();
var next = curr.splice(i, 1);
permute(curr.slice(), m.concat(next));
}
}
}
permute(inputArr);
return result;
}
var _loop_1 = function (dim) {
var axes = [], dims = [];
var u = [], v = [];
for (var i = 0; i < dim; i++) {
axes.push(i);
dims.push(3);
u.push(0);
v.push(0);
}
var forEachDim = function (space, d) {
if (d === dim) {
var o = space.dataOffset.apply(space, u);
space.getCoords(o, v);
for (var e = 0; e < dims.length; e++) {
expect(u[e]).toEqual(v[e]);
return false;
}
}
else {
for (var i = 0; i < dims[d]; i++) {
u[d] = i;
if (!forEachDim(space, d + 1))
return false;
}
}
return true;
};
for (var _i = 0, _a = permutations(axes); _i < _a.length; _i++) {
var ao = _a[_i];
var space = tensor_1.Tensor.Space(dims, ao);
if (!forEachDim(space, 0))
break;
}
};
for (var dim = 1; dim <= 5; dim++) {
_loop_1(dim);
}
});
});
//# sourceMappingURL=tensor.spec.js.map