This repository has been archived on 2023-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
ima02/resources/defects4j-checkout-closure-1f/test/com/google/javascript/jscomp/PeepholeCollectPropertyAssignmentsTest.java

219 lines
6.3 KiB
Java
Raw Normal View History

2023-04-25 11:33:41 +00:00
/*
* Copyright 2010 The Closure Compiler Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.javascript.jscomp;
public class PeepholeCollectPropertyAssignmentsTest extends CompilerTestCase {
@Override
protected CompilerPass getProcessor(final Compiler compiler) {
return new PeepholeOptimizationsPass(
compiler, new PeepholeCollectPropertyAssignments());
}
public final void testArrayOptimization1() {
test("var a = []; a[0] = 1; a[1] = 2; a[2] = 3;",
"var a = [1, 2, 3];");
}
public final void testArrayOptimization2() {
test("var a; a = []; a[0] = 1; a[1] = 2; a[2] = 3;",
"var a; a = [1, 2, 3];");
}
public final void testArrayOptimization3() {
testSame("var a; a.b = []; a.b[0] = 1; a.b[1] = 2; a.b[2] = 3;");
}
public final void testCompoundAssignment() {
testSame("var x, a; a = []; a[0] *= x;");
}
public final void testNegativeArrayIndex1() {
testSame("var a = []; a[-1] = 1;");
}
public final void testNegativeArrayIndex2() {
testSame("var a; a = []; a[-1] = 1;");
}
public final void testFractionalArrayIndex1() {
testSame("var a = []; a[0.5] = 1;");
}
public final void testFractionalArrayIndex2() {
testSame("var a; a = []; a[0.5] = 1;");
}
public final void testArrayOptimizationOfPartiallyBuiltArray1() {
test("var a = [1, 2]; a[2] = 3;",
"var a = [1, 2, 3];");
}
public final void testArrayOptimizationOfPartiallyBuiltArray2() {
test("var a; a = [1, 2]; a[2] = 3;",
"var a; a = [1, 2, 3];");
}
public final void testArrayOptimizationWithAHole1() {
test("var a = []; a[0] = 1; a[1] = 2; a[3] = 4;",
"var a = [1, 2, , 4];");
}
public final void testArrayOptimizationWithAHole2() {
test("var a; a = []; a[0] = 1; a[1] = 2; a[3] = 4;",
"var a; a = [1, 2, , 4];");
}
public final void testEarlyUsage1() {
testSame(
"function c() {return sum(a)};"
+ "var a = [1,2,3];"
+ "a[4] = c();");
}
public final void testEarlyUsage2() {
testSame(
"function c() {return sum(a)};"
+ "var a; a = [1,2,3];"
+ "a[4] = c();");
}
public final void testArrayTooSparseOptimization1() {
test("var a = []; a[0] = 1; a[1] = 2; a[100] = 4;",
"var a = [1, 2]; a[100] = 4;");
}
public final void testArrayTooSparseOptimization2() {
test("var a; a = []; a[0] = 1; a[1] = 2; a[100] = 4;",
"var a; a = [1, 2]; a[100] = 4;");
}
public final void testArrayOutOfOrder() {
test("var a = []; a[1] = 1; a[0] = 0;",
"var a = [0, 1];");
test("var a; a = []; a[1] = 1; a[0] = 0;",
"var a; a = [0, 1];");
// We cannot change the order of side-effects.
// The below should not be
// var x = 0; var a = [x++, x++]
// since that would produce
// var a = [0, 1], x = 2;
// instead of
// var a = [1, 0], x = 2;
testSame("var x = 0; var a = []; a[1] = x++; a[0] = x++;");
testSame("var x; x = 0; var a = []; a[1] = x++; a[0] = x++;");
}
public final void testMultipleNames1() {
test("var b = []; b[0] = 2; var a = []; a[0] = 1;",
"var b = [2]; var a = [1];");
}
public final void testMultipleNames2() {
test("var b; b = []; b[0] = 2; var a = []; a[0] = 1;",
"var b; b = [2]; var a = [1];");
}
public final void testArrayReassignedInValue1() {
test("var a = []; a[0] = 1; a[1] = (a = []); a[3] = 4;",
"var a = [1]; a[1] = (a = []); a[3] = 4;");
}
public final void testArrayReassignedInValue2() {
test("var a; a = []; a[0] = 1; a[1] = (a = []); a[3] = 4;",
"var a; a = [1]; a[1] = (a = []); a[3] = 4;");
}
public final void testArrayReassignedInSubsequentVar1() {
testSame("var a = []; a[0] = a = []; a[1] = 2;");
}
public final void testArrayReassignedInSubsequentVar2() {
testSame("var a; a = []; a[0] = a = []; a[1] = 2;");
}
public final void testForwardReference1() {
test("var a; a = []; a[0] = 1; a[1] = a;",
"var a; a = [1]; a[1] = a;");
}
public final void testForwardReference2() {
test("var a; a = []; a[0] = 1; a[1] = a;",
"var a; a = [1]; a[1] = a;");
}
public final void testObjectOptimization1() {
test("var o = {}; o.x = 0; o['y'] = 1; o[2] = 2;",
"var o = { x: 0, \"y\": 1, \"2\": 2 };");
}
public final void testObjectOptimization2() {
test("var o; o = {}; o.x = 0; o['y'] = 1; o[2] = 2;",
"var o; o = { x: 0, \"y\": 1, \"2\": 2 };");
}
public final void testObjectReassignedInValue1() {
test("var o = {}; o.x = 1; o.y = (o = {}); o.z = 4;",
"var o = {x:1}; o.y = (o = {}); o.z = 4;");
}
public final void testObjectReassignedInValue2() {
test("var o; o = {}; o.x = 1; o.y = (o = {}); o.z = 4;",
"var o; o = {x:1}; o.y = (o = {}); o.z = 4;");
}
public final void testObjectFunctionRollup1() {
test("var o; o = {};" +
"o.x = function() {};",
"var o; o = {x:function () {}};");
}
public final void testObjectFunctionRollup2() {
testSame(
"var o; o = {};" +
"o.x = (function() {return o})();");
}
public final void testObjectFunctionRollup3() {
test("var o; o = {};" +
"o.x = function() {return o};",
"var o; o = {x:function () {return o}};");
}
public final void testObjectFunctionRollup4() {
testSame(
"function f() {return o};" +
"var o; o = {};" +
"o.x = f();");
}
public final void testObjectFunctionRollup5() {
test("var o; o = {};" +
"o.x = function() {return o};" +
"o.y = [function() {return o}];" +
"o.z = {a:function() {return o}};",
"var o; o = {" +
"x:function () {return o}, " +
"y:[function () {return o}], " +
"z:{a:function () {return o}}};");
}
}