We use unit test suites to verify the correctness of our virtual machine. Here you can access the source code of the tests.
/*
* Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
package at.ssw.hotswap.test.fields;
import static org.junit.Assert.*;
import org.junit.Before;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import org.junit.Test;
import at.ssw.hotswap.HotSwapTool;
/**
* Test case that produces a list of integer values recursively.
* The recursive function does not contain a conditional statement.
* The recursion is stopped by swapping the recursive method with a different non-recursive implementation.
*
* @author Thomas Wuerthinger
*/
public class YieldTest {
// Version 0
public static class Base {
protected List<Integer> arr = new ArrayList<Integer>();
public void reset() {
HotSwapTool.toVersion(YieldTest.class, 0);
}
public void next() {
HotSwapTool.toVersion(YieldTest.class, HotSwapTool.getCurrentVersion(YieldTest.class) + 1);
}
}
public static abstract class A extends Base {
public List<Integer> gen() {
arr.add(produce());
next();
return gen();
}
public abstract int produce();
}
public static class B extends A {
public int produce() {
return 1;
}
}
public static class B___10 extends A {
public int produce() {
return 2;
}
}
public static class B___20 extends A {
private int x;
public int produce() {
return ++x;
}
}
public static class A___30 extends Base {
public List<Integer> gen() {
reset();
return arr;
}
}
@Before
public void setUp() throws Exception {
HotSwapTool.toVersion(YieldTest.class, 0);
}
@Test
public void testYield() {
assert HotSwapTool.getCurrentVersion(YieldTest.class) == 0;
B b = new B();
assertEquals(Arrays.asList(
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10), b.gen());
assert HotSwapTool.getCurrentVersion(YieldTest.class) == 0;
}
}