blob: 5bdedd85b80fd094db6fe6449d1e581c43e4a4d0 [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* 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.gwt.dev.jjs.impl.gflow.constants;
import com.google.gwt.dev.jjs.SourceOrigin;
import com.google.gwt.dev.jjs.ast.JIntLiteral;
import com.google.gwt.dev.jjs.ast.JLocal;
import com.google.gwt.dev.jjs.ast.JMethodBody;
import com.google.gwt.dev.jjs.ast.JPrimitiveType;
import com.google.gwt.dev.jjs.ast.JProgram;
import junit.framework.TestCase;
/**
* Test for ConstantsAssumption.
*
* We use toString comparison in this test to make it simpler.
*/
public class ConstantsAssumptionTest extends TestCase {
private final JIntLiteral zero = newIntLiteral(0);
private final JIntLiteral one = newIntLiteral(1);
private final JLocal i = newLocal("i", JPrimitiveType.INT);
private final JLocal j = newLocal("j", JPrimitiveType.INT);
public void testEmptyAssumption() {
ConstantsAssumption a = new ConstantsAssumption();
assertEquals("T", a.toString());
}
public void testSet() {
ConstantsAssumption a = new ConstantsAssumption();
a.set(i, zero);
assertEquals("{i = 0}", a.toString());
a.set(j, one);
assertEquals("{i = 0, j = 1}", a.toString());
a.set(i, null);
assertEquals("{j = 1}", a.toString());
}
public void testJoin_SameValues() {
ConstantsAssumption a1 = new ConstantsAssumption();
a1.set(i, zero);
a1.set(j, one);
ConstantsAssumption a2 = new ConstantsAssumption();
a2.set(i, zero);
a2.set(j, one);
assertEquals("{i = 0, j = 1}", a1.join(a2).toString());
}
public void testJoin_WithEmpty() {
ConstantsAssumption a1 = new ConstantsAssumption();
a1.set(i, zero);
assertEquals("T", a1.join(new ConstantsAssumption()).toString());
assertEquals("T", new ConstantsAssumption().join(a1).toString());
assertEquals("T", a1.join(ConstantsAssumption.TOP).toString());
assertEquals("T", ConstantsAssumption.TOP.join(a1).toString());
assertEquals(a1, a1.join(null));
}
public void testJoin_DifferentValues() {
ConstantsAssumption a1 = new ConstantsAssumption();
a1.set(i, zero);
a1.set(j, one);
ConstantsAssumption a2 = new ConstantsAssumption();
a2.set(i, one);
a2.set(j, zero);
assertEquals("T", a1.join(a2).toString());
}
public void testJoin_DifferentKeys() {
ConstantsAssumption a1 = new ConstantsAssumption();
a1.set(i, zero);
ConstantsAssumption a2 = new ConstantsAssumption();
a2.set(j, zero);
assertEquals("T", a1.join(a2).toString());
}
public void testEquals_ComparesValues() {
ConstantsAssumption a1 = new ConstantsAssumption();
a1.set(i, newIntLiteral(0));
ConstantsAssumption a2 = new ConstantsAssumption();
a2.set(i, newIntLiteral(0));
assertTrue(a1.equals(a2));
}
private JIntLiteral newIntLiteral(int value) {
return new JIntLiteral(SourceOrigin.UNKNOWN, value);
}
private JLocal newLocal(String name, JPrimitiveType type) {
return JProgram.createLocal(SourceOrigin.UNKNOWN, name, type, false,
new JMethodBody(SourceOrigin.UNKNOWN));
}
}