!7 p { // Easy case - finishes in time print("Test 1"); Either e = evalWithTimeout(1500, f f); assertEquals(0, l(evalWithTimeout_inTime)); while (l(evalWithTimeout_allThreads) > 0) sleep(1); assertEqualsVerbose("yo!", e.a()); // Medium case - is in sleep or wait, interruptible print("Test 2"); e = evalWithTimeout(500, f f); assertEquals(0, l(evalWithTimeout_inTime)); assertTrue(e.isB()); assertTrue(l(evalWithTimeout_allThreads) <= 1); while (l(evalWithTimeout_allThreads) > 0) sleep(1); // Hard case - busy computing, doesn't call ping print("Test 3"); e = evalWithTimeout(500, f g); assertEquals(0, l(evalWithTimeout_inTime)); sleep(10); assertEquals(1, l(evalWithTimeout_allThreads)); assertTrue(e.isB()); while (l(evalWithTimeout_allThreads) > 0) sleep(1); print("All OK"); } static S f() { sleep(1000); ret print("yo!"); } static S g() { busySleepSeconds_noPing(1); ret print("yo!"); }