207 lines
7.4 KiB
JavaScript
207 lines
7.4 KiB
JavaScript
/**
|
|
* 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");
|
|
});
|