@Test
public void testThenRun() throws InterruptedException {

    CompletionStage<Void> firstCompletionStage = Async.supplyAsync(latchSupplier(latch1), executorA);
    latch1.countDown();
    firstCompletionStage.toCompletableFuture().join();
    assertHits(executorA, 1);
    
    CompletionStage<Void> secondCompletionStage = firstCompletionStage.thenRun(noopRunnable());
    secondCompletionStage.toCompletableFuture().join();
    assertHits(executorA, 1);
    
    CompletionStage<Void> thirdCompletionStage = secondCompletionStage.thenRunAsync(latchRunnable(latch2));
    latch2.countDown();
    thirdCompletionStage.toCompletableFuture().join();
    assertHits(executorA, 2);
    
    CompletionStage<Void> fourthCompletionStage = thirdCompletionStage.thenRunAsync(latchRunnable(latch3), executorB);
    latch3.countDown();
    fourthCompletionStage.toCompletableFuture().join();
    assertHits(executorA, 2);
    assertHits(executorB, 1);
}