blob: f167965e216cd59c84f5ddc7dc663e703c1e1d4b [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
function testHoistability(unknown_i, unknown_n) {
var sum = 0, a;
a = [1, 2, 3, 4];
for(var i = 0; i < 4; ++i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = 3; i >= 0; --i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = 0, j = 0; i < 4; ++i, ++j)
sum += a[j];
a = [1, 2, 3, 4];
for(var i = 3, j = 3; i >= 0; --i, --j)
sum += a[j];
var a = [1, 2, 3, 4];
for(var i = unknown_i; i < unknown_n; ++i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = unknown_n - 1; i >= unknown_i; --i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = unknown_i, j = unknown_i; i < unknown_n; ++i, ++j)
sum += a[j];
a = [1, 2, 3, 4];
for(var i = unknown_n - 1, j = unknown_n - 1; i >= unknown_i; --i, --j)
sum += a[j];
return sum;
}
WScript.Echo("testHoistability: " + testHoistability(0, 4));
WScript.Echo("testHoistability: " + testHoistability(0, 4));
WScript.Echo("");
function testUnhoistability(unknown_i, unknown_n) {
var sum = 0, a;
a = [1, 2, 3, 4];
for(var i = -1; i < 4; ++i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = 3; i >= -1; --i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = 0; i < 5; ++i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = 4; i >= 0; --i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = -1, j = -1; i < 4; ++i, ++j)
sum += a[j];
a = [1, 2, 3, 4];
for(var i = 3, j = 3; i >= -1; --i, --j)
sum += a[j];
a = [1, 2, 3, 4];
for(var i = 0, j = 0; i < 5; ++i, ++j)
sum += a[j];
a = [1, 2, 3, 4];
for(var i = 4, j = 4; i >= 0; --i, --j)
sum += a[j];
var a = [1, 2, 3, 4];
for(var i = unknown_i - 1; i < unknown_n; ++i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = unknown_n - 1; i >= unknown_i - 1; --i)
sum += a[i];
var a = [1, 2, 3, 4];
for(var i = unknown_i; i <= unknown_n; ++i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = unknown_n; i >= unknown_i; --i)
sum += a[i];
a = [1, 2, 3, 4];
for(var i = unknown_i - 1, j = unknown_i - 1; i < unknown_n; ++i, ++j)
sum += a[j];
a = [1, 2, 3, 4];
for(var i = unknown_n - 1, j = unknown_n - 1; i >= unknown_i - 1; --i, --j)
sum += a[j];
a = [1, 2, 3, 4];
for(var i = unknown_i, j = unknown_i; i <= unknown_n; ++i, ++j)
sum += a[j];
a = [1, 2, 3, 4];
for(var i = unknown_n, j = unknown_n; i >= unknown_i; --i, --j)
sum += a[j];
return sum;
}
WScript.Echo("testUnhoistability: " + testUnhoistability(0, 4));
WScript.Echo("testUnhoistability: " + testUnhoistability(0, 4));
WScript.Echo("");
function testInductionVariableWithConstantValue_0(i) {
var a = [1, 2];
var sum = 0;
for(; i == 1; ++i)
sum += a[i];
return sum;
}
WScript.Echo("testInductionVariableWithConstantValue_0: " + testInductionVariableWithConstantValue_0(1));
WScript.Echo("testInductionVariableWithConstantValue_0: " + testInductionVariableWithConstantValue_0(1));
WScript.Echo("");
function testInductionVariableWithConstantValue_1(i) {
var a = [1, 2];
var sum = 0;
for(; i == 1; --i)
sum += a[i];
return sum;
}
WScript.Echo("testInductionVariableWithConstantValue_1: " + testInductionVariableWithConstantValue_1(1));
WScript.Echo("testInductionVariableWithConstantValue_1: " + testInductionVariableWithConstantValue_1(1));
WScript.Echo("");
function testInductionVariableWithConstantValue_2(i) {
var a = [1, 2];
var sum = 0;
for(var j = i; i == 1; ++i, ++j)
sum += a[j];
return sum;
}
WScript.Echo("testInductionVariableWithConstantValue_2: " + testInductionVariableWithConstantValue_2(1));
WScript.Echo("testInductionVariableWithConstantValue_2: " + testInductionVariableWithConstantValue_2(1));
WScript.Echo("");
function testInductionVariableWithConstantValue_3(i) {
var a = [1, 2];
var sum = 0;
for(var j = i; i == 1; --i, --j)
sum += a[j];
return sum;
}
WScript.Echo("testInductionVariableWithConstantValue_3: " + testInductionVariableWithConstantValue_3(1));
WScript.Echo("testInductionVariableWithConstantValue_3: " + testInductionVariableWithConstantValue_3(1));
WScript.Echo("");
(function() {
function testInductionVariableEqualsConstantAndHoistability(a, i, n) {
var sum = 0;
for(; i < n; ++i) {
if(i === 0)
sum = 0;
sum += a[i];
}
return sum;
}
var a = [1, 2];
testInductionVariableEqualsConstantAndHoistability(a, 0, 2);
testInductionVariableEqualsConstantAndHoistability(a, 0, 2);
WScript.Echo("");
})();
(function() {
function testHoistabilityAndCompatibilityAndBoundInfoPropagationOutOfLoop(a, b) {
var sum = 0;
var n = a.length;
for(var i = 0; i < n; ++i) {
if(a[i] === 0) {
++sum;
break;
}
}
if(b)
a[n] = 0;
return sum;
}
var a = [1, 2];
testHoistabilityAndCompatibilityAndBoundInfoPropagationOutOfLoop(a);
testHoistabilityAndCompatibilityAndBoundInfoPropagationOutOfLoop(a);
WScript.Echo("");
})();