gecko/js/src/trace-test.js

269 lines
5.3 KiB
JavaScript
Raw Normal View History

2008-07-17 01:58:34 -07:00
var fails = [], passes=[];
2008-07-11 14:47:51 -07:00
function test(desc, actual, expected)
{
2008-07-17 01:58:34 -07:00
if (expected == actual) {
passes.push(desc);
return print(desc, ": passed");
2008-07-17 01:58:34 -07:00
}
fails.push(desc);
print(desc, ": FAILED: expected", typeof(expected), "(", expected, ") != actual",
typeof(actual), "(", actual, ")");
}
function ifInsideLoop()
{
2008-07-18 08:01:51 -07:00
var cond = true, intCond = 5, count = 0;
for (var i = 0; i < 100; i++) {
if (cond)
count++;
2008-07-18 08:01:51 -07:00
if (intCond)
count++;
}
return count;
}
2008-07-18 08:01:51 -07:00
test("tracing if", ifInsideLoop(), 200);
function bitwiseAnd(bitwiseAndValue) {
for (var i = 0; i < 60000; i++)
bitwiseAndValue = bitwiseAndValue & i;
return bitwiseAndValue;
}
test("bitwise and with arg/var", bitwiseAnd(12341234), 0)
2008-07-09 18:09:11 -07:00
bitwiseAndValue = Math.pow(2,32);
for (var i = 0; i < 60000; i++)
bitwiseAndValue = bitwiseAndValue & i;
test("bitwise on undeclared globals", bitwiseAndValue, 0);
function equalInt()
{
2008-07-13 19:33:08 -07:00
var i1 = 55;
var hits = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
for (var i = 0; i < 5000; i++) {
2008-07-13 19:33:08 -07:00
if (i1 == 55) hits[0]++;
if (i1 != 56) hits[1]++;
if (i1 < 56) hits[2]++;
if (i1 > 50) hits[3]++;
if (i1 <= 60) hits[4]++;
if (i1 >= 30) hits[5]++;
if (i1 == 7) hits[6]++;
if (i1 != 55) hits[7]++;
if (i1 < 30) hits[8]++;
if (i1 > 90) hits[9]++;
if (i1 <= 40) hits[10]++;
if (i1 >= 70) hits[11]++;
}
2008-07-13 19:33:08 -07:00
return hits.toString();
}
2008-07-13 19:33:08 -07:00
test("int equality", equalInt(),
"5000,5000,5000,5000,5000,5000,0,0,0,0,0,0,0,0,0,0,0,0,0");
2008-07-01 19:44:24 -07:00
function setelem(a)
{
var l = a.length;
for (var i = 0; i < l; i++) {
a[i] = i;
}
2008-07-13 19:33:08 -07:00
return a.toString();
}
var a = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
a = a.concat(a, a, a);
setelem(a)
test("setelem", a, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83");
function getelem(a)
{
var accum = 0;
var l = a.length;
for (var i = 0; i < l; i++) {
accum += a[i];
}
return accum;
}
test("getelem", getelem(a), 3486);
globalName = 907;
function name()
{
var a = 0;
for (var i = 0; i < 100; i++)
a = globalName;
return a;
}
test("undeclared globals from function", name(), 907);
var globalInt = 0;
for (var i = 0; i < 500; i++)
globalInt = globalName + i;
test("get undeclared global at top level", globalInt, globalName + 499);
for (var i = 0; i < 500; i++)
globalInt = i;
test("setting global variable", globalInt, 499);
function arith()
{
var accum = 0;
for (var i = 0; i < 100; i++) {
accum += (i * 2) - 1;
}
return accum;
}
test("basic arithmetic", arith(), 9800);
function lsh(n)
{
var r;
for (var i = 0; i < 35; i++)
r = 0x1 << n;
return r;
}
test("lsh", [lsh(15),lsh(55),lsh(1),lsh(0)],"32768,8388608,2,1");
function rsh(n)
{
var r;
for (var i = 0; i < 35; i++)
r = 0x11010101 >> n;
return r;
}
test("rsh", [rsh(8),rsh(5),rsh(35),rsh(-1)],"1114369,8914952,35659808,0");
function ursh(n)
{
var r;
for (var i = 0; i < 35; i++)
r = -55 >>> n;
return r;
}
test("ursh", [ursh(8),ursh(33),ursh(0),ursh(1)],
"16777215,2147483620,4294967241,2147483620");
2008-07-11 14:47:51 -07:00
2008-07-15 20:37:57 -07:00
function doMath(cos)
{
var s = 0;
2008-07-15 20:37:57 -07:00
var sin = Math.sin;
for (var i = 0; i < 200; i++)
2008-07-15 20:37:57 -07:00
s = -Math.pow(sin(i) + cos(i * 0.75), 4);
return s;
}
2008-07-17 08:43:55 -07:00
test("Math-nativecall", doMath(Math.cos), -0.5405549555611059);
2008-07-11 14:47:51 -07:00
function fannkuch(n) {
var count = Array(n);
var r = n;
var done = 0;
while (done < 40) {
// write-out the first 30 permutations
done += r;
while (r != 1) { count[r - 1] = r; r--; }
while (true) {
count[r] = count[r] - 1;
if (count[r] > 0) break;
r++;
}
}
return done;
}
test("fannkuch", fannkuch(8), 41);
2008-07-15 10:17:51 -07:00
function xprop()
{
a = 0;
for (var i = 0; i < 20; i++)
a += 7;
return a;
}
test("xprop", xprop(), 140);
var a = 2;
2008-07-15 10:17:51 -07:00
function getprop(o2)
{
var o = {a:5};
var t = this;
2008-07-15 10:17:51 -07:00
var x = 0;
for (var i = 0; i < 20; i++) {
t = this;
x += o.a + o2.a + this.a + t.a;
}
2008-07-15 10:17:51 -07:00
return x;
}
2008-07-15 20:19:29 -07:00
test("getprop", getprop({a:9}), 360);
function mod()
{
var mods = [-1,-1,-1,-1];
var a = 9.5, b = -5, c = 42, d = (1/0);
for (var i = 0; i < 20; i++) {
mods[0] = a % b;
mods[1] = b % 1;
mods[2] = c % d;
mods[3] = c % a;
mods[4] = b % 0;
}
return mods.toString();
}
2008-07-15 20:37:57 -07:00
test("mod", mod(), "4.5,0,42,4,NaN");
2008-07-16 15:26:51 -07:00
function glob_f1() {
return 1;
}
function glob_f2() {
return glob_f1();
}
2008-07-16 15:26:51 -07:00
function call()
{
2008-07-16 22:08:59 -07:00
var q1 = 0, q2 = 0, q3 = 0, q4 = 0, q5 = 0;
2008-07-16 15:53:04 -07:00
var o = {};
2008-07-16 15:26:51 -07:00
function f1() {
return 1;
}
function f2(f) {
2008-07-16 22:08:59 -07:00
return f();
}
2008-07-16 15:53:04 -07:00
o.f = f1;
2008-07-16 15:26:51 -07:00
for (var i = 0; i < 100; ++i) {
q1 += f1();
q2 += f2(f1);
q3 += glob_f1();
2008-07-16 15:53:04 -07:00
q4 += o.f();
2008-07-16 22:08:59 -07:00
q5 += glob_f2();
2008-07-17 01:58:34 -07:00
}
2008-07-16 22:08:59 -07:00
var ret = [q1, q2, q3, q4, q5];
2008-07-16 15:26:51 -07:00
return ret;
}
2008-07-16 22:08:59 -07:00
test("call", call(), "100,100,100,100,100");
function setprop()
{
var obj = { a:-1 };
var obj2 = { b:-1, a:-1 };
for (var i = 0; i < 20; i++) {
obj2.b = obj.a = i;
}
return [obj.a, obj2.a, obj2.b].toString();
}
test("setprop", setprop(), "19,-1,19");
2008-07-17 02:03:56 -07:00
function testif() {
var q = 0;
for (var i = 0; i < 100; i++) {
if ((i & 1) == 0)
q++;
else
q--;
}
return q;
}
test("testif", testif(), "0");
2008-07-17 01:58:34 -07:00
if (passes.length)
print("pass:", passes.join(","));
if (fails.length)
print("FAIL:", fails.join(","));
2008-07-17 02:03:56 -07:00