diff --git a/src/matrix.js b/src/matrix.js index 4fb9c2e..82f685b 100644 --- a/src/matrix.js +++ b/src/matrix.js @@ -436,6 +436,14 @@ Sylvester.Matrix.prototype = { this.elements.push([elements[i]]); } return this; + }, + + setElement: function(i,j,element) { + if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length) { + return null; + } + this.elements[i-1][j-1] = element; + return this; } }; diff --git a/src/vector.js b/src/vector.js index 0d30e05..5a06464 100644 --- a/src/vector.js +++ b/src/vector.js @@ -251,6 +251,14 @@ Sylvester.Vector.prototype = { setElements: function(els) { this.elements = (els.elements || els).slice(); return this; + } , + + setElement: function(i, el) { + if (i < 1 || i > this.elements.length) { + return null; + }; + this.elements[i-1] = el; + return this; } }; diff --git a/test/specs/matrix_spec.js b/test/specs/matrix_spec.js index d93036f..ac8f960 100644 --- a/test/specs/matrix_spec.js +++ b/test/specs/matrix_spec.js @@ -334,4 +334,26 @@ JS.ENV.MatrixSpec = JS.Test.describe("Matrix", function() { with(this) { [0,0,0,7] ])) }}) + + test("setElements", function() { with(this) { + var M = $M([ + [0,3,4,8], + [3,9,7,3] + ]) + assertEqual( '[0, 3, 4, 8]\n[3, 9, 7, 3]', M.inspect() ) + assertEqual( '[1, 2, 3, 4]\n[5, 6, 7, 8]', M.setElements([[1,2,3,4],[5,6,7,8]]).inspect() ) + assertEqual( '[3, 4, 6, 9]', M.setElements([[3,4,6,9]]).inspect() ) + assertEqual( '[1]\n[3]\n[8]\n[4]', M.setElements([[1],[3],[8],[4]]).inspect() ) + assertEqual( '[44]', M.setElements([[44]]).inspect() ) + assertEqual( '[]', M.setElements([]).inspect() ) + }}) + + test("setElement", function() { with(this) { + var M = $M([ + [0,3,4,8], + [3,9,7,3] + ]) + assertEqual( '[0, 3, 4, 8]\n[3, 9, 7, 3]', M.inspect() ) + assertEqual( '[0, 3, 4, 8]\n[3, 4, 7, 3]', M.setElement(2,2,4).inspect() ) + }}) }}) diff --git a/test/specs/vector_spec.js b/test/specs/vector_spec.js index f8788a9..50984f2 100644 --- a/test/specs/vector_spec.js +++ b/test/specs/vector_spec.js @@ -175,4 +175,18 @@ JS.ENV.VectorSpec = JS.Test.describe("Vector", function() { with(this) { assert( $V([12,1]).rotate(Math.PI/2, [5,1]).eql([5,8]) ) assert( Vector.i.rotate(-Math.PI/2, Sylvester.Line.create([10, 0, 100], Vector.k)).eql([10,9,0]) ) }}) + + test("setElement", function() { with(this) { + var V = $V([0,3,4,5]) + assertEqual( 6, V.setElement(1,6).e(1) ) + assertEqual( 3, V.e(2) ) + assertEqual( 4, V.e(3) ) + assertEqual( 5, V.e(4) ) + assertEqual( null, V.e(5) ) + assertEqual( 6, V.e(1) ) + assertEqual( 3, V.e(2) ) + assertEqual( 7, V.setElement(3,7).e(3) ) + assertEqual( 5, V.e(4) ) + assertEqual( null, V.e(5) ) + }}) }})