topical media & game development
mobile-sugar-test-QuaternionTest.js / js
(function() {
'use strict';
module('Quaternion');
test('constructor', function() {
var quat1 = new DivSugar.Quaternion();
strictEqual(quat1.x, 0);
strictEqual(quat1.y, 0);
strictEqual(quat1.z, 0);
strictEqual(quat1.w, 0);
var quat2 = new DivSugar.Quaternion(1, 2, 3, 4);
strictEqual(quat2.x, 1);
strictEqual(quat2.y, 2);
strictEqual(quat2.z, 3);
strictEqual(quat2.w, 4);
var quat3 = new DivSugar.Quaternion(quat2);
strictEqual(quat3.x, 1);
strictEqual(quat3.y, 2);
strictEqual(quat3.z, 3);
strictEqual(quat3.w, 4);
raises(function() {
var quat4 = new DivSugar.Quaternion(1, 2, 3);
}, function(e) {
strictEqual(e, 'DivSugar: Invalid number of arguments');
return true;
});
});
test('set', function() {
var quat1 = new DivSugar.Quaternion();
quat1.set(1, 2, 3, 4);
deepEqual(quat1, new DivSugar.Quaternion(1, 2, 3, 4));
var quat2 = new DivSugar.Quaternion();
quat2.set(quat1);
deepEqual(quat2, quat1);
raises(function() {
var quat3 = new DivSugar.Quaternion();
quat3.set(1, 2, 3);
}, function(e) {
strictEqual(e, 'DivSugar: Invalid number of arguments');
return true;
});
ok(quat1.set(0, 0, 0, 0).set(quat2).set(1, 1, 1, 1));
});
test('fromMatrix', function() {
var quat = new DivSugar.Quaternion();
quat.fromMatrix(DivSugar.Matrix.UNIT);
deepEqual(quat, new DivSugar.Quaternion(0, 0, 0, 1));
ok(quat.fromMatrix(DivSugar.Matrix.UNIT).fromMatrix(DivSugar.Matrix.UNIT));
});
test('slerp', function() {
var quat1 = new DivSugar.Quaternion();
var quat2 = new DivSugar.Quaternion();
var quat3 = new DivSugar.Quaternion();
for (var ratio = 0; ratio <= 1; ratio += 0.1) {
quat1.fromMatrix(new DivSugar.Matrix(DivSugar.Matrix.UNIT));
quat2.fromMatrix((new DivSugar.Matrix(DivSugar.Matrix.UNIT)).rotate(90, 0, 0));
quat3.fromMatrix((new DivSugar.Matrix(DivSugar.Matrix.UNIT)).rotate(90 * ratio, 0, 0));
quat1.slerp(quat2, ratio);
nearlyEqual(quat1, quat3);
quat1.fromMatrix(new DivSugar.Matrix(DivSugar.Matrix.UNIT));
quat2.fromMatrix((new DivSugar.Matrix(DivSugar.Matrix.UNIT)).rotate(0, 90, 0));
quat3.fromMatrix((new DivSugar.Matrix(DivSugar.Matrix.UNIT)).rotate(0, 90 * ratio, 0));
quat1.slerp(quat2, ratio);
nearlyEqual(quat1, quat3);
quat1.fromMatrix(new DivSugar.Matrix(DivSugar.Matrix.UNIT));
quat2.fromMatrix((new DivSugar.Matrix(DivSugar.Matrix.UNIT)).rotate(0, 0, 90));
quat3.fromMatrix((new DivSugar.Matrix(DivSugar.Matrix.UNIT)).rotate(0, 0, 90 * ratio));
quat1.slerp(quat2, ratio);
nearlyEqual(quat1, quat3);
}
ok(quat1.slerp(quat2, 0).slerp(quat2, 0.5).slerp(quat2, 1).slerp(quat2, 0));
});
test('equal', function() {
var quat1 = new DivSugar.Quaternion();
var quat2 = new DivSugar.Quaternion();
quat1.set(1, 2, 3, 4);
quat2.set(quat1);
ok(quat1.equal(quat2));
quat2.set(1.1, 2, 3, 4);
ok(!quat1.equal(quat2));
quat2.set(1, 2.1, 3, 4);
ok(!quat1.equal(quat2));
quat2.set(1, 2, 3.1, 4);
ok(!quat1.equal(quat2));
quat2.set(1, 2, 3, 4.1);
ok(!quat1.equal(quat2));
});
test('toString', function() {
var quat = new DivSugar.Quaternion(1, 2, 3, 4);
strictEqual(quat.toString(), '(1, 2, 3, 4)');
});
})();
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.