mirror of
https://github.com/josdejong/mathjs.git
synced 2025-12-08 19:46:04 +00:00
228 lines
5.3 KiB
JavaScript
228 lines
5.3 KiB
JavaScript
var assert = require('assert'),
|
|
array = require('../../lib/util/array'),
|
|
resize = array.resize;
|
|
size = array.size;
|
|
|
|
describe('util.array', function() {
|
|
|
|
describe('size', function () {
|
|
|
|
it('should calculate the size of a scalar', function () {
|
|
assert.deepEqual(size(2), []);
|
|
assert.deepEqual(size("string"), []);
|
|
});
|
|
|
|
it('should calculate the size of a 1-dimensional array', function () {
|
|
assert.deepEqual(size([]), [0]);
|
|
assert.deepEqual(size([1]), [1]);
|
|
assert.deepEqual(size([1,2,3]), [3]);
|
|
});
|
|
|
|
it('should calculate the size of a 2-dimensional array', function () {
|
|
assert.deepEqual(size([[]]), [1,0]);
|
|
assert.deepEqual(size([[], []]), [2,0]);
|
|
assert.deepEqual(size([[1,2],[3,4]]), [2,2]);
|
|
assert.deepEqual(size([[1,2,3],[4,5,6]]), [2,3]);
|
|
});
|
|
|
|
it('should calculate the size of a 3-dimensional array', function () {
|
|
assert.deepEqual(size([[[]]]), [1,1,0]);
|
|
assert.deepEqual(size([[[], []]]), [1,2,0]);
|
|
assert.deepEqual(size([[[], []],[[], []]]), [2,2,0]);
|
|
assert.deepEqual(size([[[1],[2]],[[3],[4]]]), [2,2,1]);
|
|
assert.deepEqual(size([[[1,2],[3,4]],[[5,6],[7,8]]]), [2,2,2]);
|
|
assert.deepEqual(size([
|
|
[[1,2,3,4],[5,6,7,8]],
|
|
[[1,2,3,4],[5,6,7,8]],
|
|
[[1,2,3,4],[5,6,7,8]]
|
|
]), [3,2,4]);
|
|
});
|
|
|
|
});
|
|
|
|
describe('resize', function () {
|
|
|
|
it('should resize a 1 dimensional array', function () {
|
|
var a = [];
|
|
|
|
// resize with default value
|
|
a = resize(a, [3], 100);
|
|
assert.deepEqual(a, [100,100,100]);
|
|
|
|
// resize without default value
|
|
a = resize(a, [5]);
|
|
assert.deepEqual(a, arr(100,100,100, uninit, uninit));
|
|
|
|
a = resize(a, [2]);
|
|
assert.deepEqual(a, [100,100]);
|
|
});
|
|
|
|
it('should resize a 2 dimensional array', function () {
|
|
var a = [
|
|
[0, 1],
|
|
[2, 3]
|
|
];
|
|
|
|
a = resize(a, [2, 4]);
|
|
assert.deepEqual(a, [
|
|
arr(0, 1, uninit, uninit),
|
|
arr(2, 3, uninit, uninit)
|
|
]);
|
|
|
|
a = resize(a, [4, 4]);
|
|
assert.deepEqual(a, [
|
|
arr(0, 1, uninit, uninit),
|
|
arr(2, 3, uninit, uninit),
|
|
arr(uninit, uninit, uninit, uninit),
|
|
arr(uninit, uninit, uninit, uninit)
|
|
]);
|
|
|
|
a = resize(a, [4, 2]);
|
|
assert.deepEqual(a, [
|
|
[0, 1],
|
|
[2, 3],
|
|
arr(uninit, uninit),
|
|
arr(uninit, uninit)
|
|
]);
|
|
|
|
a = resize(a, [2, 2]);
|
|
assert.deepEqual(a, [
|
|
[0, 1],
|
|
[2, 3]
|
|
]);
|
|
|
|
a = resize(a, [1, 1]);
|
|
assert.deepEqual(a, [
|
|
[0]
|
|
]);
|
|
});
|
|
|
|
it('should resize a 2 dimensional array with default value', function () {
|
|
var a = [
|
|
[0, 1],
|
|
[2, 3]
|
|
];
|
|
|
|
a = resize(a, [2, 4], 100);
|
|
assert.deepEqual(a, [
|
|
[0, 1, 100, 100],
|
|
[2, 3, 100, 100]
|
|
]);
|
|
|
|
a = resize(a, [4, 4], 100);
|
|
assert.deepEqual(a, [
|
|
[0, 1, 100, 100],
|
|
[2, 3, 100, 100],
|
|
[100, 100, 100, 100],
|
|
[100, 100, 100, 100]
|
|
]);
|
|
|
|
a = resize(a, [4, 2]);
|
|
assert.deepEqual(a, [
|
|
[0, 1],
|
|
[2, 3],
|
|
[100, 100],
|
|
[100, 100]
|
|
]);
|
|
|
|
a = resize(a, [2, 2]);
|
|
assert.deepEqual(a, [
|
|
[0, 1],
|
|
[2, 3]
|
|
]);
|
|
|
|
a = resize(a, [1, 1]);
|
|
assert.deepEqual(a, [
|
|
[0]
|
|
]);
|
|
});
|
|
|
|
it('should resize a 1 dimensional array to 2 dimensional', function () {
|
|
var a = [0, 0];
|
|
|
|
a = resize(a, [4]);
|
|
assert.deepEqual(a, arr(0, 0, uninit, uninit));
|
|
|
|
a = resize(a, [2, 4]);
|
|
assert.deepEqual(a, [
|
|
arr(0, 0, uninit, uninit),
|
|
arr(uninit, uninit, uninit, uninit)
|
|
]);
|
|
|
|
var b = [0, 0];
|
|
|
|
b = resize(b, [4]);
|
|
assert.deepEqual(b, arr(0, 0, uninit, uninit));
|
|
|
|
b = resize(b, [2, 5], 8); // with a default value
|
|
assert.deepEqual(b, [
|
|
arr(0, 0, uninit, uninit, 8),
|
|
arr(8, 8, 8, 8, 8)
|
|
]);
|
|
});
|
|
|
|
it('should resize a 2 dimensional array to 1 dimensional', function () {
|
|
var a = [[1,2,3,4], [5,6,7,8]];
|
|
a = resize(a, [6]);
|
|
assert.deepEqual(a, arr(1,2,3,4, uninit, uninit));
|
|
|
|
var b = [[],[]];
|
|
b = resize(b, [2], 8);
|
|
assert.deepEqual(b, [8, 8]);
|
|
|
|
});
|
|
|
|
it('should resize a 3 dimensional array', function () {
|
|
var a = [];
|
|
a = resize(a, [2,3], 5);
|
|
assert.deepEqual(a, [[5,5,5], [5,5,5]]);
|
|
|
|
a = resize(a, [2,2,3], 7);
|
|
assert.deepEqual(a, [[[5,5,5], [5,5,5]], [[7,7,7], [7,7,7]]]);
|
|
|
|
a = resize(a, [3,2], 9);
|
|
assert.deepEqual(a, [[5,5], [5,5], [9, 9]]);
|
|
});
|
|
|
|
it('should resize to an empty array', function () {
|
|
var a = [];
|
|
a = resize(a, [2,3], 5);
|
|
assert.deepEqual(a, [[5,5,5], [5,5,5]]);
|
|
|
|
a = resize(a, [0]);
|
|
assert.deepEqual(a, []);
|
|
|
|
assert.throws(function () {a = resize(a, []);});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
// TODO: test validate
|
|
|
|
// TODO: test validateIndex
|
|
|
|
// TODO: test isArray
|
|
|
|
// TODO: test squeeze
|
|
|
|
// TODO: test unsqueeze
|
|
|
|
});
|
|
|
|
/**
|
|
* Helper function to create an Array containing uninitialized values
|
|
* Example: arr(uninit, uninit, 2); // [ , , 2 ]
|
|
*/
|
|
var uninit = {};
|
|
function arr() {
|
|
var array = [];
|
|
array.length = arguments.length;
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
var value = arguments[i];
|
|
if (value !== uninit) {
|
|
array[i] = value;
|
|
}
|
|
}
|
|
return array;
|
|
} |