@Test
  public void forEachXWithEvents() {

    List<Integer> list = new ArrayList<>();

    LazyFutureStream<Integer> stream =
        LazyFutureStream.of(
                () -> 1,
                () -> 2,
                () -> 3,
                (Supplier<Integer>)
                    () -> {
                      throw new RuntimeException();
                    })
            .map(Supplier::get);
    Subscription s =
        stream.forEachXEvents(2, i -> list.add(i), e -> error = e, () -> complete = true);

    assertThat(list, hasItems(1, 2));
    assertThat(list.size(), equalTo(2));
    System.out.println("first batch");
    s.request(1);
    assertFalse(complete);
    assertThat(list, hasItems(1, 2, 3));
    assertThat(list.size(), equalTo(3));
    assertThat(error, nullValue());
    s.request(2);
    assertThat(error, instanceOf(RuntimeException.class));

    assertTrue(complete);
  }