package st.gravel.support.compiler;
import org.junit.Before;
import org.junit.Test;
import st.gravel.support.compiler.testtools.ClassBuilder;
import st.gravel.support.compiler.testtools.TestBootstrap;
import st.gravel.support.jvm.runtime.ImageBootstrapper;
import st.gravel.support.jvm.runtime.MethodTools;
public class ProcessTest {
@Before
public void setUp() {
TestBootstrap.getSingleton();
}
@Test
public void test_ForkProcesses() throws Throwable {
Class stClass = new ClassBuilder("FooObject_ForkProcesses").
method("runForked: aName semaphore: sema " +
"[1 to: 10 do: [:i |" +
"Transcript cr; show: aName,': ', i printString. " +
"(Delay forMilliseconds: 100) wait]. " +
" sema signal] fork." +
"").
method("runForked" +
"| sema |" +
"sema := Semaphore new. " +
"self runForked: 'A' semaphore: sema. " +
"self runForked: 'B' semaphore: sema. " +
"self runForked: 'C' semaphore: sema. " +
"sema wait. "+
"sema wait. "+
"sema wait. "
).
build();
Object fooObject = stClass.newInstance();
MethodTools.perform(fooObject, "runForked");
}
@Test
public void test_ParallelCollect() throws Throwable {
Class stClass = new ClassBuilder("FooObject_ParallelCollect").
method("parallelCollect" +
"^(1 to: 1000) parallel: 20 collect: [:each |" +
"| s | s := 0. " +
"1 to: 100 do: [:i | 1 to: 100 do: [:j | s := s + (i * j)]]." +
"s" +
"]"
).
build();
Object fooObject = stClass.newInstance();
MethodTools.perform(fooObject, "parallelCollect");
}
}