@Test
@Timeout(value = 300, unit = TimeUnit.MILLISECONDS)
public void testNegative() throws InterruptedException {

    Semaphore s = new Semaphore(0);
    scheduler.after(() -> {
        s.release(1);
        return null;
    }, Duration.ofMillis(-1000));
    Thread.sleep(200);
    assertEquals(1, s.availablePermits(), "Negative value should mean after finished right away");
}