tests_math_orientation.test.js

import {
  Matrix33,
  getIdentityMat33,
} from '../../src/math/matrix';
import {
  getMatrixFromName,
  getOrientationStringLPS,
  Orientation,
  getOrientationFromCosines,
  getCosinesFromOrientation,
  getOrientationName
} from '../../src/math/orientation';

/**
 * Tests for the 'math/point.js' file.
 */

/* global QUnit */
QUnit.module('math');

/**
 * Tests for {@link Matrix33} factories.
 *
 * @function module:tests/math~orientation-matrix-factories
 */
QUnit.test('orientation matrix factories', function (assert) {
  const theo00 = new Matrix33([
    1, 0, 0, 0, 1, 0, 0, 0, 1
  ]);

  // test #01
  const m01 = getMatrixFromName(Orientation.Axial);
  assert.ok(m01.equals(theo00), 'Matrix33 factory axial');

  // test #02
  const m02 = getMatrixFromName(Orientation.Coronal);
  const theo02 = new Matrix33([
    1, 0, 0, 0, 0, 1, 0, -1, 0
  ]);
  assert.ok(m02.equals(theo02), 'Matrix33 factory coronal');

  // test #03
  const m03 = getMatrixFromName(Orientation.Sagittal);
  const theo03 = new Matrix33([
    0, 0, -1, 1, 0, 0, 0, -1, 0
  ]);
  assert.ok(m03.equals(theo03), 'Matrix33 factory sagittal');

  // test #04
  const m04 = getMatrixFromName('godo');
  assert.equal(m04, null, 'Matrix33 factory unknown name');
});

/**
 * Tests for {@link Matrix33} getOrientationFromCosines.
 *
 * @function module:tests/math~getOrientationFromCosines
 */
QUnit.test('getOrientationFromCosines', function (assert) {
  // axial
  const m00 = getIdentityMat33();
  const cos00 = [1, 0, 0, 0, 1, 0];
  assert.ok(getOrientationFromCosines(cos00).equals(m00), 'ID matrix');
  assert.deepEqual(getCosinesFromOrientation(m00), cos00, 'ID matrix cosines');

  // coronal
  const m10 = getMatrixFromName(Orientation.Coronal);
  const cos10 = [1, 0, 0, 0, 0, -1];
  assert.ok(getOrientationFromCosines(cos10).equals(m10), 'coronal matrix');
  assert.deepEqual(getCosinesFromOrientation(m10), cos10,
    'coronal matrix cosines');

  // sagittal
  const m20 = getMatrixFromName(Orientation.Sagittal);
  const cos20 = [0, 1, 0, 0, 0, -1];
  assert.ok(getOrientationFromCosines(cos20).equals(m20), 'sagittal matrix');
  assert.deepEqual(getCosinesFromOrientation(m20), cos20,
    'sagittal matrix cosines');
});

/**
 * Tests for {@link Matrix33} getOrientationStringLPS.
 *
 * @function module:tests/math~getOrientationStringLPS
 */
QUnit.test('getOrientationStringLPS', function (assert) {
  // axial
  const m00 = getIdentityMat33(); // [1, 0, 0, 0, 1, 0]
  const code00 = getOrientationStringLPS(m00);
  assert.equal(code00, 'LPS', 'LPS matrix');
  const m01 = getOrientationFromCosines([1, 0, 0, 0, -1, 0]);
  const code01 = getOrientationStringLPS(m01);
  assert.equal(code01, 'LAI', 'LAI matrix');
  const m02 = getOrientationFromCosines([-1, 0, 0, 0, -1, 0]);
  const code02 = getOrientationStringLPS(m02);
  assert.equal(code02, 'RAS', 'RAS matrix');
  const m03 = getOrientationFromCosines([-1, 0, 0, 0, 1, 0]);
  const code03 = getOrientationStringLPS(m03);
  assert.equal(code03, 'RPI', 'RPI matrix');

  // coronal
  const m10 = getMatrixFromName(Orientation.Coronal); // [1, 0, 0, 0, 0, -1]
  const code10 = getOrientationStringLPS(m10);
  assert.equal(code10, 'LIP', 'LIP matrix');
  const m11 = getOrientationFromCosines([1, 0, 0, 0, 0, 1]);
  const code11 = getOrientationStringLPS(m11);
  assert.equal(code11, 'LSA', 'LSA matrix');
  const m12 = getOrientationFromCosines([-1, 0, 0, 0, 0, -1]);
  const code12 = getOrientationStringLPS(m12);
  assert.equal(code12, 'RIA', 'RIA matrix');
  const m13 = getOrientationFromCosines([-1, 0, 0, 0, 0, 1]);
  const code13 = getOrientationStringLPS(m13);
  assert.equal(code13, 'RSP', 'RSP matrix');

  // sagittal
  const m20 = getMatrixFromName(Orientation.Sagittal); // [0, 1, 0, 0, 0, -1]
  const code20 = getOrientationStringLPS(m20);
  assert.equal(code20, 'PIR', 'PIR matrix');
  const m21 = getOrientationFromCosines([0, 1, 0, 0, 0, 1]);
  const code21 = getOrientationStringLPS(m21);
  assert.equal(code21, 'PSL', 'PSL matrix');
  const m22 = getOrientationFromCosines([0, -1, 0, 0, 0, -1]);
  const code22 = getOrientationStringLPS(m22);
  assert.equal(code22, 'AIL', 'AIL matrix');
  const m23 = getOrientationFromCosines([0, -1, 0, 0, 0, 1]);
  const code23 = getOrientationStringLPS(m23);
  assert.equal(code23, 'ASR', 'ASR matrix');
});

/**
 * Tests for {@link getOrientationName}.
 *
 * @function module:tests/dicom~getorientationname
 */
QUnit.test('getOrientationName', function (assert) {
  const test00 = [1, 0, 0, 0, 1, 0];
  assert.equal(getOrientationName(test00), 'axial', 'test axial #0');
  const test01 = [0.99, 0.02, 0.05, -0.02, 0.99, 1.4e-08];
  assert.equal(getOrientationName(test01), 'axial', 'test axial #1');

  const test10 = [1, 0, 0, 0, 0, -1];
  assert.equal(getOrientationName(test10), 'coronal', 'test coronal #0');
  const test11 = [0.7, 0.3, 0, 0, 0.4, -0.6];
  assert.equal(getOrientationName(test11), 'coronal', 'test coronal #1');

  const test20 = [0, 1, 0, 0, 0, -1];
  assert.equal(getOrientationName(test20), 'sagittal', 'test sagittal #0');
  const test21 = [-0.01, 0.98, -0.20, 0.05, -0.19, -0.98];
  assert.equal(getOrientationName(test21), 'sagittal', 'test axial #1');
});