This commit is contained in:
2025-02-26 14:49:25 +07:00
commit 1c1d9c4474
6403 changed files with 1953774 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
/**
* Tests for the 'math/point.js' file.
*/
/** @module tests/math */
// Do not warn if these variables were not defined before.
/* global QUnit */
QUnit.module("matrix");
/**
* Tests for {@link dwv.math.Matrix33}.
* @function module:tests/math~Matrix33
*/
QUnit.test("Test Matrix44.", function (assert) {
var m0 = new dwv.math.getIdentityMat33();
var m1 = new dwv.math.getIdentityMat33();
var m2 = new dwv.math.Matrix33(
1, 2, 3,
4, 5, 6,
7, 8, 9 );
// equals
assert.equal(m0.equals(m1), true, "equals true");
assert.equal(m0.equals(m2), false, "equals false");
// get
assert.equal(m2.get(0,0), 1, "get(0,0)");
assert.equal(m2.get(0,1), 2, "get(0,1)");
assert.equal(m2.get(0,2), 3, "get(0,2)");
assert.equal(m2.get(1,0), 4, "get(1,0)");
assert.equal(m2.get(1,1), 5, "get(1,1)");
assert.equal(m2.get(1,2), 6, "get(1,2)");
});

View File

@@ -0,0 +1,146 @@
/**
* Tests for the 'math/point.js' file.
*/
/** @module tests/math */
// Do not warn if these variables were not defined before.
/* global QUnit */
QUnit.module("point");
/**
* Tests for {@link dwv.math.Point2D}.
* @function module:tests/math~Point2D
*/
QUnit.test("Test Point2D.", function (assert) {
var p0 = new dwv.math.Point2D(1,2);
// getX
assert.equal(p0.getX(), 1, "getX");
// getY
assert.equal(p0.getY(), 2, "getY");
// can't modify internal x
p0.x = 3;
assert.equal(p0.getX(), 1, "getX after .x");
// can't modify internal y
p0.y = 3;
assert.equal(p0.getY(), 2, "getY after .y");
// equals: true
var p1 = new dwv.math.Point2D(1,2);
assert.equal(p0.equals(p1), true, "equals true");
// equals: false
assert.equal(p0.equals(null), false, "null equals false");
var p2 = new dwv.math.Point2D(2,1);
assert.equal(p0.equals(p2), false, "equals false");
// to string
assert.equal(p0.toString(), "(1, 2)", "toString");
// distance
var p30 = new dwv.math.Point2D(1,3);
assert.equal(p0.getDistance(p30), 1, "getDistance #1");
var p31 = new dwv.math.Point2D(2,2);
assert.equal(p0.getDistance(p31), 1, "getDistance #2");
var p32 = new dwv.math.Point2D(2,1);
assert.equal(p0.getDistance(p32), Math.sqrt(2), "getDistance #3");
var p33 = new dwv.math.Point2D(0,1);
assert.equal(p0.getDistance(p33), Math.sqrt(2), "getDistance #4");
});
/**
* Tests for {@link dwv.math.FastPoint2D}.
* @function module:tests/math~FastPoint2D
*/
QUnit.test("Test FastPoint2D.", function (assert) {
var p0 = new dwv.math.FastPoint2D(1,2);
// x
assert.equal(p0.x, 1, "x");
// y
assert.equal(p0.y, 2, "y");
// can modify x
p0.x = 3;
assert.equal(p0.x, 3, "modified x");
// can modify y
p0.y = 4;
assert.equal(p0.y, 4, "modified y");
// equals: true
var p1 = new dwv.math.FastPoint2D(3,4);
assert.equal(p0.equals(p1), true, "equals true");
// equals: false
assert.equal(p0.equals(null), false, "null equals false");
var p2 = new dwv.math.FastPoint2D(4,3);
assert.equal(p0.equals(p2), false, "equals false");
// to string
assert.equal(p0.toString(), "(3, 4)", "toString");
});
/**
* Tests for {@link dwv.math.Point3D}.
* @function module:tests/math~Point3D
*/
QUnit.test("Test Point3D.", function (assert) {
var p0 = new dwv.math.Point3D(1,2,3);
// getX
assert.equal(p0.getX(), 1, "getX");
// getY
assert.equal(p0.getY(), 2, "getY");
// getZ
assert.equal(p0.getZ(), 3, "getZ");
// can't modify internal x
p0.x = 3;
assert.equal(p0.getX(), 1, "getX after .x");
// can't modify internal y
p0.y = 3;
assert.equal(p0.getY(), 2, "getY after .y");
// can't modify internal z
p0.z = 3;
assert.equal(p0.getZ(), 3, "getZ after .z");
// equals: true
var p1 = new dwv.math.Point3D(1,2,3);
assert.equal(p0.equals(p1), true, "equals true");
// equals: false
assert.equal(p0.equals(null), false, "null equals false");
var p2 = new dwv.math.Point3D(3,2,1);
assert.equal(p0.equals(p2), false, "equals false");
// to string
assert.equal(p0.toString(), "(1, 2, 3)", "toString");
// distance
var p30 = new dwv.math.Point3D(1,2,4);
assert.equal(p0.getDistance(p30), 1, "getDistance #1");
var p31= new dwv.math.Point3D(2,2,3);
assert.equal(p0.getDistance(p31), 1, "getDistance #2");
var p32 = new dwv.math.Point3D(2,1,3);
assert.equal(p0.getDistance(p32), Math.sqrt(2), "getDistance #3");
var p33 = new dwv.math.Point3D(0,1,3);
assert.equal(p0.getDistance(p33), Math.sqrt(2), "getDistance #4");
});
/**
* Tests for {@link dwv.math.Index3D}.
* @function module:tests/math~Index3D
*/
QUnit.test("Test Index3D.", function (assert) {
var i0 = new dwv.math.Index3D(1,2,3);
// getX
assert.equal(i0.getI(), 1, "getI");
// getY
assert.equal(i0.getJ(), 2, "getJ");
// getZ
assert.equal(i0.getK(), 3, "getK");
// can't modify internal i
i0.i = 3;
assert.equal(i0.getI(), 1, "getI after .i");
// can't modify internal j
i0.j = 3;
assert.equal(i0.getJ(), 2, "getJ after .j");
// can't modify internal k
i0.k = 3;
assert.equal(i0.getK(), 3, "getK after .k");
// equals: true
var i1 = new dwv.math.Index3D(1,2,3);
assert.equal(i0.equals(i1), true, "equals true");
// equals: false
assert.equal(i0.equals(null), false, "null equals false");
var i2 = new dwv.math.Index3D(3,2,1);
assert.equal(i0.equals(i2), false, "equals false");
// to string
assert.equal(i0.toString(), "(1, 2, 3)", "toString");
});

View File

@@ -0,0 +1,206 @@
/**
* Tests for the 'math/shapes.js' file.
*/
// Do not warn if these variables were not defined before.
/* global QUnit */
QUnit.module("shapes");
/**
* Tests for {@link dwv.math.Circle}.
* @function module:tests/math~Circle
*/
QUnit.test("Test Circle.", function (assert) {
var center = new dwv.math.Point2D(0,0);
var c0 = new dwv.math.Circle(center,2);
// getCenter
assert.equal(c0.getCenter(), center, "getCenter");
// getRadius
assert.equal(c0.getRadius(), 2, "getRadius");
// getSurface
assert.equal(c0.getSurface(), Math.PI*2*2, "getSurface");
// equals: true
assert.equal(c0.getWorldSurface(0.5,0.5), Math.PI, "getWorldSurface");
});
/**
* Tests for {@link dwv.math.Ellipse}.
* @function module:tests/math~Ellipse
*/
QUnit.test("Test Ellipse.", function (assert) {
var center = new dwv.math.Point2D(0,0);
var e0 = new dwv.math.Ellipse(center,2,4);
// getCenter
assert.equal(e0.getCenter(), center, "getCenter");
// getA
assert.equal(e0.getA(), 2, "getA");
// getB
assert.equal(e0.getB(), 4, "getB");
// getSurface
assert.equal(e0.getSurface(), Math.PI*2*4, "getSurface");
// equals: true
assert.equal(e0.getWorldSurface(0.5,0.25), Math.PI, "getWorldSurface");
});
/**
* Tests for {@link dwv.math.Line}.
* @function module:tests/math~Line
*/
QUnit.test("Test Line.", function (assert) {
var p0 = new dwv.math.Point2D(0,0);
var p1 = new dwv.math.Point2D(0,-5);
var l0 = new dwv.math.Line(p0,p1);
// getBegin
assert.equal(l0.getBegin(), p0, "getBegin");
// getEnd
assert.equal(l0.getEnd(), p1, "getEnd");
// getLength
assert.equal(l0.getLength(), 5, "getLength");
// getWorldLength
assert.equal(l0.getWorldLength(0.5,0.5), 2.5, "getWorldLength");
// getMidpoint
var pMid = new dwv.math.Point2D(0,-2); // rounded...
assert.equal(l0.getMidpoint().equals(pMid), true, "getMidpoint");
// slope
var p20 = new dwv.math.Point2D(1,1);
var l10 = new dwv.math.Line(p0,p20);
assert.equal(l10.getSlope(), 1, "getSlope");
var p21 = new dwv.math.Point2D(1,-1);
var l11 = new dwv.math.Line(p0,p21);
assert.equal(l11.getSlope(), -1, "getSlope (negative)");
var p3 = new dwv.math.Point2D(1,0);
var l2 = new dwv.math.Line(p0,p3);
assert.equal(l2.getSlope(), 0, "getSlope (horizontal)");
assert.equal(l0.getSlope(), -Infinity, "getSlope (vertical)");
// inclination
assert.equal(l10.getInclination(), 135, "Inclination"); // 180 - 45
assert.equal(l11.getInclination(), 225, "Inclination (negative)"); // 180 + 45
assert.equal(l2.getInclination(), 180, "Inclination (horizontal)");
assert.equal(l0.getInclination(), 270, "Inclination (vertical)"); // 180 + 90
// angle
assert.equal(dwv.math.getAngle(l10, l11), 90, "getAngle");
var p4 = new dwv.math.Point2D(0,-1);
var p5 = new dwv.math.Point2D(1,-1);
var l3 = new dwv.math.Line(p4,p5);
assert.equal(dwv.math.getAngle(l2, l3), 180, "getAngle (horizontal parallel)");
var l4 = new dwv.math.Line(p3,p21);
assert.equal(dwv.math.getAngle(l0, l4), 180, "getAngle (vertical parallel)");
// intercept
assert.equal(l10.getIntercept(), 0, "getIntercept (zero)");
var p6 = new dwv.math.Point2D(0,1);
var p7 = new dwv.math.Point2D(1,2);
var l5 = new dwv.math.Line(p6,p7);
assert.equal(l5.getIntercept(), 1, "getIntercept");
var p8 = new dwv.math.Point2D(0,-1);
var p9 = new dwv.math.Point2D(1,-2);
var l6 = new dwv.math.Line(p8,p9);
assert.equal(l6.getIntercept(), -1, "getIntercept (negative)");
var p10 = new dwv.math.Point2D(0,1);
var p11 = new dwv.math.Point2D(-1,2);
var l7 = new dwv.math.Line(p10,p11);
assert.equal(l7.getIntercept(), 1, "getIntercept (back)");
var p12 = new dwv.math.Point2D(0,-1);
var p13 = new dwv.math.Point2D(-1,-2);
var l8 = new dwv.math.Line(p12,p13);
assert.equal(l8.getIntercept(), -1, "getIntercept (back negative)");
// perpendicular
var l0p = dwv.math.getPerpendicularLine(l0, p0, 2);
var pl0pbeg = new dwv.math.Point2D(-1,0);
assert.ok(l0p.getBegin().equals( pl0pbeg ), "perpendicular horizon begin");
var pl0pend = new dwv.math.Point2D(1,0);
assert.ok(l0p.getEnd().equals( pl0pend ), "perpendicular horizon end");
var l2p = dwv.math.getPerpendicularLine(l2, p0, 2);
var pl2pbeg = new dwv.math.Point2D(0,-1);
assert.ok(l2p.getBegin().equals( pl2pbeg ), "perpendicular vertical begin");
var pl2pend = new dwv.math.Point2D(0,1);
assert.ok(l2p.getEnd().equals( pl2pend ), "perpendicular vertical end");
var isSimilar = function (a, b) {
return Math.abs(a-b) < 1e-10;
};
var isSimilarPoint2D = function (p0, p1) {
return isSimilar(p0.getX(), p1.getX()) &&
isSimilar(p0.getY(), p1.getY());
};
var l5p = dwv.math.getPerpendicularLine(l5, p6, 2);
var halfSqrt2 = Math.sqrt(2) / 2;
var pl5pbeg = new dwv.math.Point2D(-halfSqrt2,1 + halfSqrt2);
assert.ok(isSimilarPoint2D(l5p.getBegin(), pl5pbeg ), "perpendicular begin");
var pl5pend = new dwv.math.Point2D(halfSqrt2,1 - halfSqrt2);
assert.ok(isSimilarPoint2D(l5p.getEnd(), pl5pend ), "perpendicular end");
});
/**
* Tests for {@link dwv.math.Rectangle}.
* @function module:tests/math~Rectangle
*/
QUnit.test("Test Rectangle.", function (assert) {
var p0 = new dwv.math.Point2D(0,0);
var p1 = new dwv.math.Point2D(-4,-4);
var r0 = new dwv.math.Rectangle(p0,p1);
// getBegin
assert.equal(r0.getBegin().equals(p1), true, 'getBegin');
// getEnd
assert.equal(r0.getEnd().equals(p0), true, "getEnd");
// getRealWidth
assert.equal(r0.getRealWidth(), 4, "getRealWidth");
// getRealHeight
assert.equal(r0.getRealHeight(), 4, "getRealHeight");
// getWidth
assert.equal(r0.getWidth(), 4, "getWidth");
// getHeight
assert.equal(r0.getHeight(), 4, "getHeight");
// getSurface
assert.equal(r0.getSurface(), 16, "getSurface");
// getWorldSurface
assert.equal(r0.getWorldSurface(0.5,0.5), 4, "getWorldSurface");
});
/**
* Tests for {@link dwv.math.ROI}.
* @function module:tests/math~ROI
*/
QUnit.test("Test ROI.", function (assert) {
var r0 = new dwv.math.ROI();
// getLength
assert.equal(r0.getLength(), 0, "getLength");
// add a point
var p0 = new dwv.math.Point2D(0,0);
r0.addPoint(p0);
// getLength
assert.equal(r0.getLength(), 1, "getLength");
// add another point
var p1 = new dwv.math.Point2D(-4,-4);
r0.addPoint(p1);
// getPoint first
assert.equal(r0.getPoint(0), p0, "getPoint first");
// getPoint second
assert.equal(r0.getPoint(1), p1, "getPoint second");
});
/**
* Tests for {@link dwv.math.Path}.
* @function module:tests/math~Path
*/
QUnit.test("Test Path.", function (assert) {
var path0 = new dwv.math.Path();
// getLength
assert.equal(path0.getLength(), 0, "getLength");
// add a point
var p0 = new dwv.math.Point2D(0,0);
path0.addPoint(p0);
// getLength
assert.equal(path0.getLength(), 1, "getLength");
// add another point
var p1 = new dwv.math.Point2D(-4,-4);
path0.addPoint(p1);
// getPoint first
assert.equal(path0.getPoint(0), p0, "getPoint first");
// getPoint second
assert.equal(path0.getPoint(1), p1, "getPoint second");
// add first point a control point
path0.addControlPoint(p0);
// check if control point
assert.equal(path0.isControlPoint(p0), 1, "isControlPoint");
});

View File

@@ -0,0 +1,60 @@
/**
* Tests for the 'math/stats.js' file.
*/
// Do not warn if these variables were not defined before.
/* global QUnit */
QUnit.module("stats");
/**
* Tests for {@link dwv.math.getStats}.
* @function module:tests/math~getStats
*/
QUnit.test("Test getStats.", function (assert) {
var arr0 = [1, 2, 3, 4, 5];
var q0 = dwv.math.getStats(arr0);
// min
assert.equal(q0.min, 1, "min.0");
// max
assert.equal(q0.max, 5, "max.0");
// mean
assert.equal(q0.mean, 3, "mean.0");
// stdDev
assert.equal(q0.stdDev, 1.4142135623730951, "stdDev.0");
var arr1 = [9, 2, 5, 4, 12, 7, 8, 11, 9, 3, 7, 4, 12, 5, 4, 10, 9, 6, 9, 4];
var q1 = dwv.math.getStats(arr1);
// min
assert.equal(q1.min, 2, "min.1");
// max
assert.equal(q1.max, 12, "max.1");
// mean
assert.equal(q1.mean, 7, "mean.1");
// stdDev
assert.equal(q1.stdDev, 2.9832867780352594, "stdDev.1");
});
/**
* Tests for {@link dwv.math.guid}.
* @function module:tests/math~guid
*/
QUnit.test("Test GUID.", function (assert) {
var id0 = dwv.math.guid();
var id1 = dwv.math.guid();
assert.equal((id0 === id1), false, "Two GUids should not be equal.");
var duplicates = 0;
// create an array of guids
var ids = [];
for (var i = 0; i < 1000; ++i) {
ids[ids.length] = dwv.math.guid();
}
// check duplicates
var id = 0;
for (i = 0; i < ids.length - 1; ++i) {
id = ids.pop();
if (ids.indexOf(id) !== -1) {
++duplicates;
}
}
assert.equal(duplicates, 0, "1000 GUids should not be equal.");
});

View File

@@ -0,0 +1,124 @@
/**
* Tests for the 'math/point.js' file.
*/
/** @module tests/math */
// Do not warn if these variables were not defined before.
/* global QUnit */
QUnit.module("vector");
/**
* Tests for {@link dwv.math.Vector3D}.
* @function module:tests/math~Vector3D
*/
QUnit.test("Test Vector3D.", function (assert) {
var v0 = new dwv.math.Vector3D(1,2,3);
// getX
assert.equal(v0.getX(), 1, "getX");
// getY
assert.equal(v0.getY(), 2, "getY");
// getZ
assert.equal(v0.getZ(), 3, "getZ");
// can't modify internal x
v0.x = 3;
assert.equal(v0.getX(), 1, "getX after .x");
// can't modify internal y
v0.y = 3;
assert.equal(v0.getY(), 2, "getY after .y");
// can't modify internal z
v0.z = 3;
assert.equal(v0.getZ(), 3, "getZ after .z");
// equals: true
var v1 = new dwv.math.Vector3D(1,2,3);
assert.equal(v0.equals(v1), true, "equals true");
// equals: false
assert.equal(v0.equals(null), false, "null equals false");
var v2 = new dwv.math.Vector3D(3,2,1);
assert.equal(v0.equals(v2), false, "equals false");
// to string
assert.equal(v0.toString(), "(1, 2, 3)", "toString");
// norm
var v10 = new dwv.math.Vector3D(1,0,0);
assert.equal(v10.norm(), 1, "norm unit #0");
var v11 = new dwv.math.Vector3D(0,1,0);
assert.equal(v11.norm(), 1, "norm unit#1");
var v12 = new dwv.math.Vector3D(0,0,1);
assert.equal(v12.norm(), 1, "norm unit #2");
var v13 = new dwv.math.Vector3D(1,1,0);
assert.equal(v13.norm(), Math.sqrt(2), "norm other #0");
var v14 = new dwv.math.Vector3D(0,1,1);
assert.equal(v14.norm(), Math.sqrt(2), "norm other #1");
var v15 = new dwv.math.Vector3D(1,0,1);
assert.equal(v15.norm(), Math.sqrt(2), "norm other #2");
var v16 = new dwv.math.Vector3D(1,1,1);
assert.equal(v16.norm(), Math.sqrt(3), "norm other #3");
var v17 = new dwv.math.Vector3D(1,2,3);
assert.equal(v17.norm(), Math.sqrt(14), "norm other #4");
});
/**
* Tests for {@link dwv.math.Vector3D}.
* @function module:tests/math~Vector3D
*/
QUnit.test("Test Vector3D crossProduct.", function (assert) {
// test vectors
var v0 = new dwv.math.Vector3D(0,0,0);
var v0x = new dwv.math.Vector3D(1,0,0);
var v0y = new dwv.math.Vector3D(0,1,0);
var v0my = new dwv.math.Vector3D(0,-1,0);
var v0z = new dwv.math.Vector3D(0,0,1);
var v0mz = new dwv.math.Vector3D(0,0,-1);
// self cross product is zero vector
assert.equal(v0x.crossProduct(v0x).equals(v0), true, "crossProduct self");
// cross product of parallel vector is zero vector
var v1x = new dwv.math.Vector3D(2,0,0);
assert.equal(v0x.crossProduct(v1x).equals(v0), true, "crossProduct parallel #0");
var v1y = new dwv.math.Vector3D(0,6,0);
assert.equal(v0y.crossProduct(v1y).equals(v0), true, "crossProduct parallel #1");
var v10 = new dwv.math.Vector3D(1,1,1);
var v11 = new dwv.math.Vector3D(5,5,5);
assert.equal(v10.crossProduct(v11).equals(v0), true, "crossProduct parallel #2");
var v12 = new dwv.math.Vector3D(-5,-5,-5);
assert.equal(v10.crossProduct(v12).equals(v0), true, "crossProduct parallel #3");
// unit vectors
assert.equal(v0x.crossProduct(v0y).equals(v0z), true, "crossProduct unit #0");
// anticommutative a * b = - (b * a)
assert.equal(v0y.crossProduct(v0x).equals(v0mz), true, "crossProduct unit #1");
assert.equal(v0z.crossProduct(v0x).equals(v0y), true, "crossProduct unit #2");
assert.equal(v0x.crossProduct(v0z).equals(v0my), true, "crossProduct unit #3");
});
/**
* Tests for {@link dwv.math.Vector3D}.
* @function module:tests/math~Vector3D
*/
QUnit.test("Test Vector3D dotProduct.", function (assert) {
// orthogonal
var v00 = new dwv.math.Vector3D(1,0,0);
var v01 = new dwv.math.Vector3D(0,1,0);
assert.equal(v00.dotProduct(v01), 0, "dotProduct orthogonal #0");
var v02 = new dwv.math.Vector3D(0,0,1);
assert.equal(v00.dotProduct(v02), 0, "dotProduct orthogonal #1");
// parallel
var v10 = new dwv.math.Vector3D(2,0,0);
assert.equal(v00.dotProduct(v10), 2, "dotProduct parallel #0");
var v11 = new dwv.math.Vector3D(-1,0,0);
assert.equal(v00.dotProduct(v11), -1, "dotProduct parallel #1");
var simiFunc = function (a,b) {
return Math.abs(a - b) < 1e-6;
};
// regular
var v20 = new dwv.math.Vector3D(1,1,0);
var dot20 = v20.norm() * v00.norm() * Math.cos(Math.PI/4);
assert.equal(simiFunc(v20.dotProduct(v00), dot20), true, "dotProduct regular #0");
var v21 = new dwv.math.Vector3D(0,1,0);
var dot21 = v20.norm() * v21.norm() * Math.cos(Math.PI/4);
assert.equal(simiFunc(v20.dotProduct(v21), dot21), true, "dotProduct regular #1");
});