overte-AleziaKurdis/scripts/developer/utilities/tests/mathPerfTest.js
2016-04-25 17:36:35 -07:00

127 lines
No EOL
4.3 KiB
JavaScript

//
// 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();
})();