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/ReorderConstantExpressionTest.java
github-classroom[bot] e42e547e48
Initial commit
2023-04-25 11:33:41 +00:00

123 lines
3.4 KiB
Java

/*
* Copyright 2011 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;
/**
* Unit test for {@ReorderConstantExpression}
*
*/
public class ReorderConstantExpressionTest extends CompilerTestCase {
@Override
protected CompilerPass getProcessor(final Compiler compiler) {
return new PeepholeOptimizationsPass(compiler,
new ReorderConstantExpression());
}
@Override
protected void setUp() throws Exception {
super.setUp();
super.enableLineNumberCheck(true);
disableTypeCheck();
}
public void testSymmetricOperations() throws Exception {
set1Tests("==");
set2Tests("==");
set3Tests("==");
set1Tests("!=");
set2Tests("!=");
set3Tests("!=");
set1Tests("===");
set2Tests("===");
set3Tests("===");
set1Tests("!==");
set2Tests("!==");
set3Tests("!==");
set1Tests("*");
set2Tests("*");
set3Tests("*");
}
public void testRelationalOperations() throws Exception {
set1Tests(">", "<");
set3Tests(">");
set1Tests("<", ">");
set3Tests("<");
set1Tests(">=", "<=");
set3Tests(">=");
set1Tests("<=", ">=");
set3Tests("<=");
}
private void set1Tests(String op) throws Exception {
set1Tests(op, op);
}
/**
* This set has a mutable on the right and an Immutable on the left.
* Applies for relational and symmetric operations.
*/
private void set1Tests(String op1, String op2) throws Exception {
test("a " + op1 + " 0", "0 " + op2 + " a");
test("a " + op1 + " '0'", "'0' " + op2 + " a");
test("a " + op1 + " ''", "'' " + op2 + " a");
test("a " + op1 + " -1.0", "-1.0 " + op2 + " a");
test("function f(a){a " + op1 + " 0}",
"function f(a){0 " + op2 + " a}");
test("f() " + op1 + " 0", "0 " + op2 + " f()");
test("(a + b) " + op1 + " 0", "0 " + op2 + " (a + b)");
test("(a + 1) " + op1 + " 0", "0 " + op2 + " (a + 1)");
test("x++ " + op1 + " 0", "0 " + op2 + " x++");
test("x = 0; function f(){x++; return x}; f() " + op1 + " 0",
"x = 0; function f(){x++; return x}; 0 " + op2 + " f()");
}
/**
* This set has a mutable on the right and an Immutable on the left.
* Applies only for symmetric operations.
*/
private void set2Tests(String op) throws Exception {
test("a " + op + " NaN", "NaN " + op + " a");
test("a " + op + " Infinity", "Infinity " + op + " a");
testSame("NaN " + op + " a");
testSame("Infinity " + op + " a");
}
/**
* This set has an the immutable on the left already, or both non-immutable.
*/
private void set3Tests(String op) throws Exception {
testSame("0 " + op + " a");
testSame("'0' " + op + " a");
testSame("'' " + op + " a");
testSame("-1.0 " + op + " a");
testSame("-1.0 " + op + " a");
testSame("0 " + op + " 1");
testSame("a " + op + " b");
}
}