mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-25 20:15:15 +02:00
140 lines
4.4 KiB
JavaScript
140 lines
4.4 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
|
|
//
|
|
// Checks various types of js iteration (for loops, for/in loops, Array.forEach, and Object.keys)
|
|
// for speed + efficiency. Mostly a sanity check for my own code.
|
|
//
|
|
|
|
Script.include("perfTest.js");
|
|
|
|
(function () {
|
|
var input1 = [];
|
|
var input2 = [];
|
|
var N = 1000;
|
|
for (var i = 0; i < N; ++i) {
|
|
input1.push(Math.random());
|
|
input2.push(Math.random());
|
|
}
|
|
TestCase.prototype.withArray = function(n, func) {
|
|
this.before(function () {
|
|
this.array = [];
|
|
for (var i = 0; i < n; ++i) {
|
|
this.array.push(0);
|
|
}
|
|
});
|
|
this.run(fcn);
|
|
}
|
|
|
|
print("For loop test -- prelim tests");
|
|
var prelimTests = new TestRunner();
|
|
prelimTests.addTestCase('Array.push (test component)')
|
|
.before(function () {
|
|
this.array = [];
|
|
})
|
|
.run(function () {
|
|
this.array.push(1);
|
|
});
|
|
prelimTests.addTestCase('Array.push with mul op (test component)')
|
|
.before(function() {
|
|
this.array = [];
|
|
})
|
|
.run(function (i) {
|
|
this.array.push(input1[i] * Math.PI);
|
|
})
|
|
prelimTests.runAllTestsWithIterations([1e4, 1e5, 1e6], 1e6, 10);
|
|
|
|
print("For loop test (n = " + N + ")");
|
|
var loopTests = new TestRunner();
|
|
loopTests.addTestCase('for (var i = 0; i < n; ++i) { ... }')
|
|
.before(function () {
|
|
this.array = [];
|
|
})
|
|
.run(function () {
|
|
for (var i = 0; i < N; ++i) {
|
|
this.array.push(input1[i] * Math.PI);
|
|
}
|
|
})
|
|
loopTests.addTestCase('while (n --> 0) { ... } (reversed)')
|
|
.before(function () {
|
|
this.array = [];
|
|
})
|
|
.run(function () {
|
|
var n = N;
|
|
while (n --> 0) {
|
|
this.array.push(input1[n] * Math.PI);
|
|
}
|
|
})
|
|
loopTests.addTestCase('Array.forEach(function(v, i) { ... })')
|
|
.before(function () {
|
|
this.array = [];
|
|
})
|
|
.run(function () {
|
|
input1.forEach(function(v) {
|
|
this.array.push(v * Math.PI);
|
|
}, this);
|
|
})
|
|
loopTests.addTestCase('Array.map(function(v, i) { ... })')
|
|
.run(function () {
|
|
this.array = input1.map(function (v) {
|
|
return v * Math.PI;
|
|
}, this);
|
|
});
|
|
loopTests.runAllTestsWithIterations([10, 100, 1000], 1e3, 10);
|
|
|
|
|
|
// Test iteration on object keys
|
|
|
|
// http://stackoverflow.com/questions/10726909/random-alpha-numeric-string-in-javascript
|
|
function makeRandomString(length, chars) {
|
|
var result = '';
|
|
for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
|
|
return result;
|
|
}
|
|
function randomString () {
|
|
var n = Math.floor(Math.random() * 18) + 12;
|
|
return makeRandomString(n, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
|
|
}
|
|
|
|
var obj = {}, numKeys = 1000;
|
|
while (numKeys --> 0) {
|
|
obj[randomString()] = Math.floor(Math.random() * 255);
|
|
}
|
|
print("Object iter tests (object has " + Object.keys(obj).length + " keys)");
|
|
var iterTests = new TestRunner();
|
|
iterTests.addTestCase('for (var k in obj) { foo(obj[k]); }')
|
|
.before(function () {
|
|
this.x = 0;
|
|
})
|
|
.run(function () {
|
|
for (var k in obj) {
|
|
this.x = (this.x + obj[k]) % 256;
|
|
}
|
|
});
|
|
iterTests.addTestCase('for (var k in obj) { if (Object.hasOwnProperty(obj, k)) { foo(obj[k]); } }')
|
|
.before(function () {
|
|
this.x = 0;
|
|
})
|
|
.run(function () {
|
|
for (var k in obj) {
|
|
if (Object.hasOwnProperty(obj, k)) {
|
|
this.x = (this.x + obj[k]) % 256;
|
|
}
|
|
}
|
|
})
|
|
iterTests.addTestCase('Object.keys(obj).forEach(function(k) { foo(obj[k]); }')
|
|
.before(function () {
|
|
this.x = 0;
|
|
})
|
|
.run(function () {
|
|
Object.keys(obj).forEach(function (k) {
|
|
this.x = (this.x + obj[k]) % 256;
|
|
})
|
|
})
|
|
|
|
iterTests.runAllTestsWithIterations([10, 100, 1000], 1e3, 10);
|
|
})();
|
|
|