127 lines · 4.3 KB · JavaScript
RawDownload
////  Created by Seiji Emery on 9/4/15//  Copyright 2015 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// Script.include("perfTest.js"); // Native vec3 (for comparison)var Native = {};(function () {    Native.Vec3 = function (x, y, z) {        this.x = x || 0.0;        this.y = y || 0.0;        this.z = z || 0.0;    }    Native.Vec3.prototype.add = function (other) {        this.x += other.x;        this.y += other.y;        this.z += other.z;    }    Native.Vec3.prototype.distance = function (other) {        var rx = this.x - other.x;        var ry = this.y - other.y;        var rz = this.z - other.z;        return Math.sqrt(rx * rx + ry * ry + rz * rz);    }    Native.Vec3.prototype.dist2 = function (other) {        var rx = this.x - other.x;        var ry = this.y - other.y;        var rz = this.z - other.z;        return rx * rx + ry * ry + rz * rz;    }     Native.Quaternion = function (x, y, z, w) {        this.x = x || 0.0;        this.y = y || 0.0;        this.z = z || 0.0;        this.w = w || 0.0;    }    // Pulled from THREE.js    Native.Quaternion.prototype.multiply = function(quat2) {        var qax = this.x,  qay = this.y,  qaz = this.z,  qaw = this.w,        qbx = quat2.x, qby = quat2.y, qbz = quat2.z, qbw = quat2.w;        this.x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;        this.y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;        this.z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;        this.w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;        return this;    }})(); // Create + run tests(function () {    var mathTests = new TestRunner();    var foo;     print("math tests:");    var iterations = [ 1000, 10000, 100000, 1000000 ];     print("builtin Vec3 + Quat (wrapped glm::vec3 + glm::quat)");    var builtinTests = new TestRunner();    builtinTests.addTestCase('Vec3.sum')        .run(function () {            foo = Vec3.sum({x: 10, y: 12, z: 3}, {x: 1, y: 2, z: 4});        })    builtinTests.addTestCase('Vec3.distance')        .run(function () {            foo = Vec3.distance({x: 1209, y: 298, z: 238}, {x: 239, y: 20, z: 23})        })    builtinTests.addTestCase('Quat.multiply')        .run(function () {            foo = Quat.multiply({x: 2190.0, y: 2109.0, z: 1209.0, w: 829.0}, {x: -1293.0, y: 1029.1, z: 2190.1, w: 129.0})        });    builtinTests.runAllTestsWithIterations([ 1e3, 1e4, 1e5 ], 1e3, 10);     print("");    print("native JS Vec3 + Quaternion");    var nativeTests = new TestRunner();    nativeTests.addTestCase('Native Vec3.sum')        .run(function () {            foo = new Native.Vec3(10, 12, 3).add(new Native.Vec3(1, 2, 4));        })    nativeTests.addTestCase('Native Vec3.distance')        .run(function () {            foo = new Native.Vec3(1209, 298, 238).distance(new Native.Vec3(239, 20, 23));        })    nativeTests.addTestCase('Native Vec3.dist2')        .run(function () {            foo = new Native.Vec3(1209, 298, 238).dist2(new Native.Vec3(239, 20, 23));        })    nativeTests.addTestCase('Native Quat.multiply')        .run(function () {            foo = new Native.Quaternion(2190.0, 2109.0, 1209.0, 829.0).multiply(new Native.Quaternion(-1293.0, 1029.1, 2190.1, 129.0));        });    nativeTests.runAllTestsWithIterations([ 1e3, 1e4, 1e5, 1e6 ], 1e6, 10);     print("");    print("no-ops (for test assignment / construction overhead)")    mathTests.addTestCase('no-op')        .run(function(){});    mathTests.addTestCase('assign null')        .run(function () {            foo = null;        });    mathTests.addTestCase('assign object')        .run(function () {            foo = { x: 1902, y: 129, z: 21 };        });    mathTests.addTestCase('Native Vec3.construct -- 3 args')        .run(function () {            foo = new Native.Vec3(1209, 298, 238);        });    mathTests.addTestCase('Native Vec3.construct -- 2 args')        .run(function () {            foo = new Native.Vec3(1209, 298);        });    mathTests.addTestCase('Native Vec3.construct -- no args')        .run(function() {            foo = new Native.Vec3();        });     mathTests.runAllTestsWithIterations([1e3, 1e4, 1e5, 1e6], 1e6, 10);    mathTests.writeResultsToLog();})();