From 6e1caa67dd47bdfce5bb09897a9cabda9d2abd98 Mon Sep 17 00:00:00 2001 From: SzechuanSage Date: Fri, 8 Mar 2019 22:26:56 +1000 Subject: [PATCH] Add tests for matrix functions row and column --- test/function/matrix/column.test.js | 98 +++++++++++++++++++++++++++++ test/function/matrix/row.test.js | 98 +++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 test/function/matrix/column.test.js create mode 100644 test/function/matrix/row.test.js diff --git a/test/function/matrix/column.test.js b/test/function/matrix/column.test.js new file mode 100644 index 000000000..d96affd89 --- /dev/null +++ b/test/function/matrix/column.test.js @@ -0,0 +1,98 @@ +const assert = require('assert') +const math = require('../../../src/main') +const matrix = math.matrix + +describe('column', function () { + const a = [ + [0, 2, 0, 0, 0], + [0, 1, 0, 2, 4], + [0, 0, 0, 0, 0], + [8, 4, 0, 3, 0], + [0, 0, 0, 6, 0] + ] + const m = matrix(a) + + it('should throw an error if the column is out of range', function () { + assert.throws(function () { + const r = m.column(9) + assert.deepStrictEqual( + r.valueOf(), [[0], [0], [0], [0], [0]] + ) + }, /IndexError: Index out of range \(9 > 4\)/) + }) + + it('should throw an error if the column is not an integer', function () { + assert.throws(function () { + const r = m.column('x') + assert.deepStrictEqual( + r.valueOf(), [[0], [0], [0], [0], [0]] + ) + }, /TypeError: Index must be an integer \(value: x\)/) + }) + + it('should throw an error if the matrix does not have two dimensions', function () { + assert.throws(function () { + const m = matrix([[[1, 2, 3]]]) + const r = m.column(0) + assert.deepStrictEqual( + r.valueOf(), [[0], [0], [0], [0], [0]] + ) + }, /Error: Only two dimensional matrix is supported/) + + it('should return the first matrix column', function () { + const c = m.column(0) + assert.deepStrictEqual( + c.valueOf(), [[0], [0], [0], [8], [0]] + ) + }) + + it('should return the first array column', function () { + const c = a.column(0) + assert.deepStrictEqual( + c.valueOf(), [0, 0, 0, 8, 0] + ) + }) + + it('should return the last matrix column', function () { + const c = m.column(4) + assert.deepStrictEqual( + c.valueOf(), [[0], [4], [0], [0], [0]] + ) + }) + + it('should return the last array column', function () { + const c = a.column(4) + assert.deepStrictEqual( + c.valueOf(), [0, 4, 0, 0, 0] + ) + }) + + it('should return an intermediate matrix column', function () { + const c = m.column(1) + assert.deepStrictEqual( + c.valueOf(), [[2], [1], [0], [4], [0]] + ) + }) + + it('should return an intermediate array column', function () { + const c = a.column(1) + assert.deepStrictEqual( + c.valueOf(), [2, 1, 0, 4, 0] + ) + }) + + it('should return an empty matrix column', function () { + const c = m.column(2) + assert.deepStrictEqual( + c.valueOf(), [[0], [0], [0], [0], [0]] + ) + }) + + it('should return an empty array column', function () { + const c = a.column(2) + assert.deepStrictEqual( + c.valueOf(), [0, 0, 0, 0, 0] + ) + }) + }) +}) diff --git a/test/function/matrix/row.test.js b/test/function/matrix/row.test.js new file mode 100644 index 000000000..a2f6edd78 --- /dev/null +++ b/test/function/matrix/row.test.js @@ -0,0 +1,98 @@ +const assert = require('assert') +const math = require('../../../src/main') +const matrix = math.matrix + +describe('row', function () { + const a = [ + [0, 2, 0, 0, 0], + [0, 1, 0, 2, 4], + [0, 0, 0, 0, 0], + [8, 4, 0, 3, 0], + [0, 0, 0, 6, 0] + ] + const m = matrix(a) + + it('should throw an error if the row is out of range', function () { + assert.throws(function () { + const r = m.row(9) + assert.deepStrictEqual( + r.valueOf(), [[0], [0], [0], [0], [0]] + ) + }, /IndexError: Index out of range \(9 > 4\)/) + }) + + it('should throw an error if the row is not an integer', function () { + assert.throws(function () { + const r = m.row('x') + assert.deepStrictEqual( + r.valueOf(), [[0], [0], [0], [0], [0]] + ) + }, /TypeError: Index must be an integer \(value: x\)/) + }) + + it('should throw an error if the matrix does not have two dimensions', function () { + assert.throws(function () { + const m = matrix([[[1, 2, 3]]]) + const r = m.row(0) + assert.deepStrictEqual( + r.valueOf(), [[0], [0], [0], [0], [0]] + ) + }, /Error: Only two dimensional matrix is supported/) + + it('should return the first matrix row', function () { + const r = m.row(0) + assert.deepStrictEqual( + r.valueOf(), [[0, 2, 0, 0, 0]] + ) + }) + + it('should return the first array row', function () { + const r = a.row(0) + assert.deepStrictEqual( + r.valueOf(), [0, 2, 0, 0, 0] + ) + }) + + it('should return the last matrix row', function () { + const r = m.row(4) + assert.deepStrictEqual( + r.valueOf(), [[0, 0, 0, 6, 0]] + ) + }) + + it('should return the last array row', function () { + const r = a.row(4) + assert.deepStrictEqual( + r.valueOf(), [0, 0, 0, 6, 0] + ) + }) + + it('should return an intermediate matrix row', function () { + const r = m.row(1) + assert.deepStrictEqual( + r.valueOf(), [[0, 1, 0, 2, 4]] + ) + }) + + it('should return an intermediate array row', function () { + const r = m.row(1) + assert.deepStrictEqual( + r.valueOf(), [0, 1, 0, 2, 4] + ) + }) + + it('should return an empty matrix row', function () { + const r = m.row(2) + assert.deepStrictEqual( + r.valueOf(), [[0, 0, 0, 0, 0]] + ) + }) + + it('should return an empty array row', function () { + const r = m.row(2) + assert.deepStrictEqual( + r.valueOf(), [0, 0, 0, 0, 0] + ) + }) + }) +})