topical media & game development

talk show tell print

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.