mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
238 lines
4.8 KiB
JavaScript
238 lines
4.8 KiB
JavaScript
function test(desc, actual, expected)
|
|
{
|
|
if (expected == actual)
|
|
return print(desc, ": passed");
|
|
print(desc, ": FAILED: expected", typeof(expected), "(", expected, ") != actual",
|
|
typeof(actual), "(", actual, ")");
|
|
}
|
|
|
|
function ifInsideLoop()
|
|
{
|
|
var cond = true, count = 0;
|
|
for (var i = 0; i < 5000; i++) {
|
|
if (cond)
|
|
count++;
|
|
}
|
|
return count;
|
|
}
|
|
test("tracing if", ifInsideLoop(), 5000);
|
|
|
|
function bitwiseAnd(bitwiseAndValue) {
|
|
for (var i = 0; i < 60000; i++)
|
|
bitwiseAndValue = bitwiseAndValue & i;
|
|
return bitwiseAndValue;
|
|
}
|
|
test("bitwise and with arg/var", bitwiseAnd(12341234), 0)
|
|
|
|
bitwiseAndValue = Math.pow(2,32);
|
|
for (var i = 0; i < 60000; i++)
|
|
bitwiseAndValue = bitwiseAndValue & i;
|
|
test("bitwise on undeclared globals", bitwiseAndValue, 0);
|
|
|
|
function equalInt()
|
|
{
|
|
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++) {
|
|
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]++;
|
|
}
|
|
return hits.toString();
|
|
}
|
|
test("int equality", equalInt(),
|
|
"5000,5000,5000,5000,5000,5000,0,0,0,0,0,0,0,0,0,0,0,0,0");
|
|
|
|
|
|
function setelem(a)
|
|
{
|
|
var l = a.length;
|
|
for (var i = 0; i < l; i++) {
|
|
a[i] = i;
|
|
}
|
|
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");
|
|
|
|
function doMath(cos)
|
|
{
|
|
var s = 0;
|
|
var sin = Math.sin;
|
|
for (var i = 0; i < 200; i++)
|
|
s = -Math.pow(sin(i) + cos(i * 0.75), 4);
|
|
return s;
|
|
}
|
|
test("Math.sin/cos/pow", doMath(Math.cos), -0.5405549555611059);
|
|
|
|
function unknownCall(Math)
|
|
{
|
|
var s = 0;
|
|
for (var i = 0; i < 200; i++)
|
|
s = Math.log(i);
|
|
return s;
|
|
}
|
|
test("untraced call", unknownCall(Math), 5.293304824724492);
|
|
|
|
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);
|
|
|
|
function xprop()
|
|
{
|
|
a = 0;
|
|
for (var i = 0; i < 20; i++)
|
|
a += 7;
|
|
return a;
|
|
}
|
|
test("xprop", xprop(), 140);
|
|
|
|
var a = 2;
|
|
function getprop(o2)
|
|
{
|
|
var o = {a:5};
|
|
var t = this;
|
|
var x = 0;
|
|
for (var i = 0; i < 20; i++) {
|
|
t = this;
|
|
x += o.a + o2.a + this.a + t.a;
|
|
}
|
|
return x;
|
|
}
|
|
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();
|
|
}
|
|
test("mod", mod(), "4.5,0,42,4,NaN");
|
|
|
|
function global_func() {
|
|
return 1;
|
|
}
|
|
function call()
|
|
{
|
|
var q1 = 0, q2 = 0, q3 = 0, q4 = 0;
|
|
var o = {};
|
|
function f1() {
|
|
return 1;
|
|
}
|
|
function f2(f) {
|
|
return f();
|
|
}
|
|
o.f = f1;
|
|
for (var i = 0; i < 100; ++i) {
|
|
q1 += f1();
|
|
q2 += f2(f1);
|
|
q3 += global_func();
|
|
q4 += o.f();
|
|
}
|
|
var ret = [q1, q2, q3, q4];
|
|
return ret;
|
|
}
|
|
test("call", call(), "100,100,100,100");
|