package test.scj;
import javax.safetycritical.Terminal;
import com.jopdesign.sys.GC;
import com.jopdesign.sys.Memory;
import com.jopdesign.sys.Native;
public class ArrayReferenceTest {
public static Terminal terminal;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
terminal = Terminal.getTerminal();
terminal.writeln("Hello world");
MyWorker mw = new MyWorker();
Memory mem = new Memory(1024, 2048);
mem.enter(mw);
}
}
class MyWorker implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
ArrayReferenceTest.terminal.writeln("Hello from scope");
Object[] Array = new Object[10];
// Add GC.getOffSpace() method to GC.java
int i = Native.rdMem(Native.toInt(Array) + GC.OFF_SCOPE_LEVEL);
System.out.println(Native.toInt(Array) + GC.OFF_SCOPE_LEVEL);
ArrayReferenceTest.terminal.writeln("Array level: " +i); // Expected value: 1
for (int j = 0; j < Array.length; j++){
Array[j] = new Object();
}
// Pick a random element in the array...
int j = Native.rdMem(Native.toInt(Array[0]) + GC.OFF_SCOPE_LEVEL);
System.out.println(Native.toInt(Array[0]) + GC.OFF_SCOPE_LEVEL);
ArrayReferenceTest.terminal.writeln("Array object level: " + j); // Expected value: 1
i = Native.rdMem(Native.toInt(Array) + GC.OFF_SCOPE_LEVEL);
System.out.println(Native.toInt(Array) + GC.OFF_SCOPE_LEVEL);
ArrayReferenceTest.terminal.writeln("Array level after storing elements: " +i);
// Expected value: 1, as storing references
// in array elements should not change the
// array object itself.
}
}