/* Copyright (c) 2006, Sriram Srinivasan * * You may distribute this software under the terms of the license * specified in the file "License" */ package kilim.test; import junit.framework.TestCase; import kilim.ExitMsg; import kilim.Mailbox; import kilim.Scheduler; import kilim.Task; import kilim.test.ex.ExYieldBase; public class TestYield extends TestCase { public void testStackBottom_st() throws Exception { runTask(new kilim.test.ex.ExYieldStack(0)); } public void testStackBottom_v() throws Exception { runTask(new kilim.test.ex.ExYieldStack(1)); } public void testStackBottom_av() throws Exception { runTask(new kilim.test.ex.ExYieldStack(2)); } public void testFactorial_st() throws Exception { runTask(new kilim.test.ex.ExYieldStack(3)); } public void testFactorial_av() throws Exception { runTask(new kilim.test.ex.ExYieldStack(4)); } public void testDupsInVars() throws Exception { runTask(new kilim.test.ex.ExYieldDups(0)); } public void testDupsInStack() throws Exception { runTask(new kilim.test.ex.ExYieldDups(1)); } public void testConstantsInStack() throws Exception { runTask(new kilim.test.ex.ExYieldConstants(0)); } public void testLoop() throws Exception { kilim.test.ex.ExLoop ex = new kilim.test.ex.ExLoop(); runTask(ex); assertTrue(ex.verify()); } public static void runTask(String taskClassName, int testCase) throws Exception { ExYieldBase task; task = (ExYieldBase) (Class.forName(taskClassName).newInstance()); task.testCase = testCase; runTask(task); } public static void runTask(Task task) throws Exception { Mailbox<ExitMsg> exitmb = new Mailbox<ExitMsg>(); Scheduler s = new Scheduler(1); task.informOnExit(exitmb); task.setScheduler(s); task.start(); ExitMsg m = exitmb.getb(); if (m == null) { fail("Timed Out"); } else { Object res = m.result; if (res instanceof Throwable) { ((Throwable)res).printStackTrace(); fail(m.toString()); } } s.shutdown(); } }