more combine tests

This commit is contained in:
WhatCats
2026-03-12 23:04:09 +01:00
parent 23f529b8dd
commit 28cf21f89a

View File

@@ -8,10 +8,7 @@ import org.junit.jupiter.api.Test;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.AbstractMap; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -117,6 +114,58 @@ public final class PromiseTests {
assert result.equals(unsizedIntStream(1000).boxed().toList()); assert result.equals(unsizedIntStream(1000).boxed().toList());
} }
@Test
public void testCombine() {
List<Promise<Integer>> 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<Promise<Integer>> 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<Promise<Integer>> 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 @Test
public void testCombineNull() { public void testCombineNull() {
var result1 = promises.combine(Arrays.asList(null, null, null)).await(); var result1 = promises.combine(Arrays.asList(null, null, null)).await();