mirror of
https://github.com/josdejong/mathjs.git
synced 2025-12-08 19:46:04 +00:00
109 lines
4.1 KiB
JavaScript
109 lines
4.1 KiB
JavaScript
var assert = require('assert'),
|
|
error = require('../../../lib/error/index'),
|
|
math = require('../../../index'),
|
|
Matrix = math.type.Matrix;
|
|
|
|
describe('reshape', function() {
|
|
|
|
it('should reshape an array', function() {
|
|
var array = [[0,1,2],[3,4,5]];
|
|
assert.deepEqual(math.reshape(array, [3, 2]), [[0,1], [2,3], [4,5]]);
|
|
});
|
|
|
|
it('should reshape an array with bignumbers', function() {
|
|
var zero = math.bignumber(0);
|
|
var one = math.bignumber(1);
|
|
var two = math.bignumber(2);
|
|
var three = math.bignumber(3);
|
|
var array = [zero, one, two, three];
|
|
assert.deepEqual(math.reshape(array, [two, two]),
|
|
[[zero,one], [two, three]]);
|
|
});
|
|
|
|
it('should reshape a matrix', function() {
|
|
var matrix = math.matrix([[0,1,2],[3,4,5]]);
|
|
assert.deepEqual(math.reshape(matrix, [3, 2]),
|
|
math.matrix([[0,1], [2,3], [4,5]]));
|
|
assert.deepEqual(math.reshape(matrix, math.matrix([3, 2])),
|
|
math.matrix([[0,1], [2,3], [4,5]]));
|
|
});
|
|
|
|
it('should reshape a flat single-element array into multiple dimensions', function() {
|
|
var array = [3];
|
|
assert.deepEqual(math.reshape(array, [1, 1, 1]), [[[3]]]);
|
|
});
|
|
|
|
it('should reshape a vector into a 2d matrix', function() {
|
|
var math2 = math.create({matrix: 'Array'});
|
|
assert.deepEqual(math2.reshape([1,2,3,4,5,6], [3,2]), [[1, 2], [3, 4], [5, 6]]);
|
|
});
|
|
|
|
it('should reshape 2d matrix into a vector', function() {
|
|
var math2 = math.create({matrix: 'Array'});
|
|
assert.deepEqual(math2.reshape([[1,2],[3,4],[5,6]], [6]), [1,2,3,4,5,6]);
|
|
});
|
|
|
|
it('should throw an error on invalid arguments', function() {
|
|
assert.throws(function () {math.reshape()}, /Too few arguments/);
|
|
assert.throws(function () {math.reshape([])}, /Too few arguments/);
|
|
assert.throws(function () {math.reshape([], 2)}, TypeError);
|
|
assert.throws(function () {math.reshape([], [], 4)}, /Too many arguments/);
|
|
|
|
assert.throws(function () {math.reshape([], ['no number'])}, /Invalid size/);
|
|
assert.throws(function () {math.reshape([], [2.3])}, /Invalid size/);
|
|
|
|
assert.throws(function () {math.reshape([1, 2], [])}, error.DimensionError);
|
|
assert.throws(function () {math.reshape([1, 2], [0])}, error.DimensionError);
|
|
assert.throws(function () {math.reshape([1, 2], [0,0])}, error.DimensionError);
|
|
assert.throws(function () {math.reshape([[1, 2]], [0])}, error.DimensionError);
|
|
assert.doesNotThrow(function () {math.reshape([[1, 2]], [2,1])});
|
|
assert.doesNotThrow(function () {math.reshape([[1, 2]], [2])});
|
|
});
|
|
|
|
it('should LaTeX reshape', function () {
|
|
var expression = math.parse('reshape([1,2],1)');
|
|
assert.equal(expression.toTex(), '\\mathrm{reshape}\\left(\\begin{bmatrix}1\\\\2\\\\\\end{bmatrix},1\\right)');
|
|
});
|
|
|
|
it('should reshape a SparseMatrix', function() {
|
|
|
|
/*
|
|
* Must use toArray because SparseMatrix.reshape currently does not preserve
|
|
* the order of the _index and _values arrays (this does not matter?)
|
|
*/
|
|
|
|
var matrix = math.matrix([[0,1,2],[3,4,5]], 'sparse');
|
|
assert.deepEqual(math.reshape(matrix, [3, 2]).toArray(),
|
|
[[0,1], [2,3], [4,5]]);
|
|
|
|
assert.deepEqual(math.reshape(matrix, [6, 1]).toArray(),
|
|
[[0],[1],[2],[3],[4],[5]]);
|
|
|
|
assert.deepEqual(math.reshape(matrix, [1, 6]).toArray(),
|
|
[[0,1,2,3,4,5]]);
|
|
|
|
matrix = math.matrix([[0,1,2,3,4,5]], 'sparse');
|
|
assert.deepEqual(math.reshape(matrix, [3, 2]).toArray(),
|
|
[[0,1], [2,3], [4,5]]);
|
|
|
|
matrix = math.matrix([[0],[1],[2],[3],[4],[5]], 'sparse');
|
|
assert.deepEqual(math.reshape(matrix, [3, 2]).toArray(),
|
|
[[0,1], [2,3], [4,5]]);
|
|
|
|
});
|
|
|
|
it('should throw on attempting to reshape an ImmutableDenseMatrix', function() {
|
|
var immutableMatrix = new math.type.ImmutableDenseMatrix([[1,2],[3,4]]);
|
|
assert.throws(function() { math.reshape(immutableMatrix, [1, 4]); },
|
|
/Cannot invoke reshape on an Immutable Matrix instance/);
|
|
});
|
|
|
|
it('should throw on attempting to reshape a Matrix (abstract type)', function() {
|
|
var matrix = new math.type.Matrix([[1,2],[3,4]]);
|
|
assert.throws(function() { math.reshape(matrix, [1, 4]); },
|
|
/Cannot invoke reshape on a Matrix interface/);
|
|
});
|
|
|
|
});
|
|
|