Skip to content

Commit

Permalink
allow complex values in matrices and vectors
Browse files Browse the repository at this point in the history
  • Loading branch information
christianp committed Dec 13, 2022
1 parent 3e81190 commit 50ddaba
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 6 deletions.
4 changes: 2 additions & 2 deletions runtime/scripts/jme.js
Expand Up @@ -3078,7 +3078,7 @@ jme.registerType(
* @param {Array.<number>} value
*/
var TVector = types.TVector = function(value) {
if(!(Array.isArray(value) && value.every(function(e) { return typeof e=='number'; }))) {
if(!(Array.isArray(value) && value.every(function(e) { return typeof e=='number' || e.complex; }))) {
throw(new Numbas.Error('jme.vector.value not an array of numbers'));
}
this.value = value;
Expand Down Expand Up @@ -3109,7 +3109,7 @@ jme.registerType(
*/
var TMatrix = types.TMatrix = function(value) {
this.value = value;
if(value.rows===undefined || value.columns===undefined || !(Array.isArray(value) && value.every(function(row) { return Array.isArray(row) && row.every(function(n) { return typeof n=='number'; }); }))) {
if(value.rows===undefined || value.columns===undefined || !(Array.isArray(value) && value.every(function(row) { return Array.isArray(row) && row.every(function(n) { return typeof n=='number' || n.complex; }); }))) {
throw(new Numbas.Error("jme.matrix.value not the right type"));
}
if(arguments.length>0) {
Expand Down
4 changes: 2 additions & 2 deletions tests/jme-runtime.js
Expand Up @@ -10802,7 +10802,7 @@ jme.registerType(
* @param {Array.<number>} value
*/
var TVector = types.TVector = function(value) {
if(!(Array.isArray(value) && value.every(function(e) { return typeof e=='number'; }))) {
if(!(Array.isArray(value) && value.every(function(e) { return typeof e=='number' || e.complex; }))) {
throw(new Numbas.Error('jme.vector.value not an array of numbers'));
}
this.value = value;
Expand Down Expand Up @@ -10833,7 +10833,7 @@ jme.registerType(
*/
var TMatrix = types.TMatrix = function(value) {
this.value = value;
if(value.rows===undefined || value.columns===undefined || !(Array.isArray(value) && value.every(function(row) { return Array.isArray(row) && row.every(function(n) { return typeof n=='number'; }); }))) {
if(value.rows===undefined || value.columns===undefined || !(Array.isArray(value) && value.every(function(row) { return Array.isArray(row) && row.every(function(n) { return typeof n=='number' || n.complex; }); }))) {
throw(new Numbas.Error("jme.matrix.value not the right type"));
}
if(arguments.length>0) {
Expand Down
2 changes: 2 additions & 0 deletions tests/jme/jme-tests.mjs
Expand Up @@ -1064,6 +1064,8 @@ Numbas.queueScript('jme_tests',['qunit','jme','jme-rules','jme-display','jme-cal
QUnit.test('Vector and Matrix operations',function(assert) {
raisesNumbasError(assert, function() { new jme.types.TVector(1); }, 'jme.vector.value not an array of numbers');
raisesNumbasError(assert, function() { new jme.types.TVector([1,[2],[3]]); }, 'jme.vector.value not an array of numbers');
assert.ok(evaluate('matrix([i])'), 'complex values in matrices are OK');
assert.ok(evaluate('vector(i)'), 'complex values in vectors are OK');
closeEqual(assert, evaluate('dot(vector(1,2),vector(2,3))').value,8,'dot(vector(1,2),vector(2,3))');
closeEqual(assert, evaluate('dot(matrix([1],[2],[3]),vector(6,5,4))').value,28,'dot(matrix([1],[2],[3]),vector(6,5,4))');
closeEqual(assert, evaluate('dot(vector(6,5,4),matrix([1],[2],[3]))').value,28,'dot(vector(6,5,4),matrix([1],[2],[3]))');
Expand Down
4 changes: 2 additions & 2 deletions tests/numbas-runtime.js
Expand Up @@ -10791,7 +10791,7 @@ jme.registerType(
* @param {Array.<number>} value
*/
var TVector = types.TVector = function(value) {
if(!(Array.isArray(value) && value.every(function(e) { return typeof e=='number'; }))) {
if(!(Array.isArray(value) && value.every(function(e) { return typeof e=='number' || e.complex; }))) {
throw(new Numbas.Error('jme.vector.value not an array of numbers'));
}
this.value = value;
Expand Down Expand Up @@ -10822,7 +10822,7 @@ jme.registerType(
*/
var TMatrix = types.TMatrix = function(value) {
this.value = value;
if(value.rows===undefined || value.columns===undefined || !(Array.isArray(value) && value.every(function(row) { return Array.isArray(row) && row.every(function(n) { return typeof n=='number'; }); }))) {
if(value.rows===undefined || value.columns===undefined || !(Array.isArray(value) && value.every(function(row) { return Array.isArray(row) && row.every(function(n) { return typeof n=='number' || n.complex; }); }))) {
throw(new Numbas.Error("jme.matrix.value not the right type"));
}
if(arguments.length>0) {
Expand Down

0 comments on commit 50ddaba

Please sign in to comment.