From 28cf21f89a1ec1156232561fb631b31390beff4e Mon Sep 17 00:00:00 2001 From: WhatCats Date: Thu, 12 Mar 2026 23:04:09 +0100 Subject: [PATCH] more combine tests --- .../java/dev/tommyjs/futur/PromiseTests.java | 57 +++++++++++++++++-- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/futur-api/src/test/java/dev/tommyjs/futur/PromiseTests.java b/futur-api/src/test/java/dev/tommyjs/futur/PromiseTests.java index c9a47de..98008f8 100644 --- a/futur-api/src/test/java/dev/tommyjs/futur/PromiseTests.java +++ b/futur-api/src/test/java/dev/tommyjs/futur/PromiseTests.java @@ -8,10 +8,7 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.AbstractMap; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -117,6 +114,58 @@ public final class PromiseTests { assert result.equals(unsizedIntStream(1000).boxed().toList()); } + @Test + public void testCombine() { + List> promises = new ArrayList<>(); + promises.add(this.promises.start().thenSupplyDelayedAsync(() -> 0, 300, TimeUnit.MILLISECONDS)); + + int size = 1000; + for (int i = 1; i < size; i++) { + int finalI = i; + if (i % 10 == 0) { + promises.add(this.promises.start().thenComposeAsync(v -> this.promises.resolve(finalI))); + } else { + promises.add(this.promises.start().thenSupplyDelayedAsync(() -> finalI, i % 100, TimeUnit.MILLISECONDS)); + } + + promises.add(null); + } + + promises.add(null); + promises.add(null); + + var result = this.promises.combine(promises).thenApply(v -> v).await(); + assert result.equals(IntStream.range(0, size).boxed().toList()); + } + + @Test + public void testCombine2() { + List> promises = new ArrayList<>(); + for (int i = 0; i < 1000; i++) { + if (i == 100) { + promises.add(this.promises.start().thenSupplyDelayedAsync(() -> { + throw new Exception("test"); + }, 100, TimeUnit.MILLISECONDS)); + } else { + int finalI = i; + promises.add(this.promises.start().thenSupplyDelayedAsync(() -> finalI, 500 - i, TimeUnit.MILLISECONDS)); + } + } + + assert this.promises.combine(promises).orDefault(() -> null).await() == null; + } + + @Test + public void testCombine3() { + List> promises = new ArrayList<>(); + for (int i = 0; i < 3; i++) { + promises.add(this.promises.resolve(i)); + } + + var result = this.promises.combine(promises).await(); + assert result.equals(List.of(0, 1, 2)); + } + @Test public void testCombineNull() { var result1 = promises.combine(Arrays.asList(null, null, null)).await();