/**
  * @return new eager SimpleReact builder configured with standard parallel executor By default
  *     this is the ForkJoinPool common instance but is configurable in the ThreadPools class
  * @see ThreadPools#getStandard() see RetryBuilder#getDefaultInstance()
  */
 public static SimpleReact parallelCommonBuilder() {
   return SimpleReact.builder()
       .executor(ThreadPools.getStandard())
       .async(true)
       .retrier(
           RetryBuilder.getDefaultInstance().withScheduler(ThreadPools.getCommonFreeThreadRetry()))
       .build();
 }
 /**
  * @return new eager SimpleReact builder configured to run on a separate thread (non-blocking
  *     current thread), sequentially Common free thread Executor from
  */
 public static SimpleReact sequentialCommonBuilder() {
   return SimpleReact.builder()
       .async(false)
       .executor(ThreadPools.getCommonFreeThread())
       .retrier(
           RetryBuilder.getDefaultInstance().withScheduler(ThreadPools.getCommonFreeThreadRetry()))
       .build();
 }
  /** Wrap a Stream into a SimpleReactStream. */
  static <T> SimpleReactStream<T> of(Stream<T> stream) {

    if (stream instanceof FutureStream)
      stream = ((FutureStream) stream).toQueue().stream(((FutureStream) stream).getSubscription());

    SimpleReact sr =
        new SimpleReact(
            ThreadPools.getSequential(),
            RetryBuilder.getDefaultInstance().withScheduler(ThreadPools.getSequentialRetry()),
            false);
    return new SimpleReactStreamImpl<T>(sr, stream.map(CompletableFuture::completedFuture), null);
  }
 @Test
 public void shouldZipInfiniteWithFiniteSeq() throws Exception {
   ThreadPools.setUseCommon(false);
   final LazyFutureStream<Integer> units =
       LazyFutureStream.iterate(
           1,
           n ->
               n
                   + 1); // <-- MEMORY LEAK!- no auto-closing yet, so writes infinetely to it's
                         // async queue
   final Seq<Integer> hundreds = LazyFutureStream.iterate(100, n -> n + 100).limit(5);
   final Seq<String> zipped = units.zip(hundreds, (n, p) -> n + ": " + p);
   assertThat(
       zipped.limit(5).join(),
       equalTo(LazyFutureStream.of("1: 100", "2: 200", "3: 300", "4: 400", "5: 500").join()));
   ThreadPools.setUseCommon(true);
 }
 /** Trigger a lazy stream */
 default void run() {
   // FIXME this should use an elastic pool of executors try {  } finally { }
   runOn(ThreadPools.getLazyExecutor());
 }