blob: 192c82bdda3e3f5d32b5ecef2fc38d9976e04f0b [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.benchmarks.client;
/**
* Basic Benchmark testing.
*/
public class BenchmarkTest extends Benchmark {
/**
* Test enum.
*/
protected enum TestEnum {
A, B, C;
}
final IntRange intRange = new IntRange(0, 20, Operator.ADD, 5);
final IntRange intRange2 = new IntRange(10, 1000, Operator.MULTIPLY, 10);
long startTime;
String stateString = null;
final String stringField = "foo";
final IntRange veryLargeRange = new IntRange(0, Integer.MAX_VALUE,
Operator.ADD, 1);
public void disabledTestTimeLimit() {
}
/**
* Tests {@link @IterationTimeLimit}.
*
* <p>
* TODO(tobyr) Disabled, because it can hang some browsers (Safari at least)
* TimeLimits work in general (as evidenced by working benchmarks), but
* there's something peculiar about this test causing problems.
* </p>
*
* @param numIterations
*/
@IterationTimeLimit(1L)
public void disabledTestTimeLimit(@RangeField("veryLargeRange")
Integer numIterations) {
somethingExpensive();
// Make sure we hit the time limit, instead of running through all
// iterations.
assertTrue(numIterations < Integer.MAX_VALUE);
}
public String getModuleName() {
return "com.google.gwt.benchmarks.Benchmarks";
}
public void disableTestAutoboxing() {
}
/**
* Tests that autoboxing works correctly.
*
* <p>
* TODO(tobyr): this causes the generated code to not compile; should probably
* be a warning or error if autoboxing args isn't supported.
* </p>
*/
public void disableTestAutoboxing(@SuppressWarnings("unused")
@RangeField("intRange")
int value) {
}
public void testEnumRange() {
}
/**
* Tests that we receive the enums in a range.
*
* @param enumValue
*/
@Setup("setupEnum")
@Teardown("teardownEnum")
public void testEnumRange(@RangeEnum(TestEnum.class)
TestEnum enumValue) {
assertNotNull(enumValue);
}
/**
* Tests that a zero argument function works correctly.
*
*/
public void testNoParameters() {
assertEquals("foo", stringField);
}
public void testOneParameterField() {
}
/**
* Tests that a single argument function works correctly.
*
* @param value
*/
public void testOneParameterField(@RangeField("intRange")
Integer value) {
assertTrue(value >= 0 && value <= 100 && value % 5 == 0);
}
/**
* Tests {@link Setup} and {@link Teardown}.
*
*/
@Setup("customSetup")
@Teardown("customTeardown")
public void testSetupAndTeardown() {
assertEquals("setup", stateString);
stateString = "running";
}
/**
* Tests that this method without a corresponding zero-arg method won't break
* the compile.
*/
public void testStrayMethodCompiles(@SuppressWarnings("unused")
@RangeField("intRange")
int value) {
}
public void testTwoParameterField() {
}
/**
* Tests that a multiple argument function works correctly.
*
*/
public void testTwoParameterField(@RangeField("intRange")
Integer intOne, @RangeField("intRange2")
Integer intTwo) {
assertTrue(intOne >= 0 && intOne <= 100 && intOne % 5 == 0);
assertTrue(intTwo >= 10 && intTwo <= 1000 && intTwo % 10 == 0);
}
protected void customSetup() {
assertNull(stateString);
stateString = "setup";
}
protected void customTeardown() {
assertNotNull(stateString);
assertTrue(stateString.equals("running") || stateString.equals("setup"));
stateString = null;
}
/**
* Do something that is relatively expensive both in hosted mode and web mode.
*/
private native void somethingExpensive() /*-{
var deadField = 0;
for (var i = 0; i < 10000; ++i) {
deadField += Math.pow(deadField, i);
}
}-*/;
}