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