diff --git a/reactor-core/pom.xml b/reactor-core/pom.xml
index 12f481c96f..d387471d56 100644
--- a/reactor-core/pom.xml
+++ b/reactor-core/pom.xml
@@ -26,11 +26,17 @@
${assertj.version}
test
-
+
+
+ io.projectreactor
+ reactor-test
+ ${reactor-core.version}
+ test
+
- 3.0.5.RELEASE
+ 3.1.3.RELEASE
3.6.1
diff --git a/reactor-core/src/test/java/com/baeldung/reactor/core/CombiningPublishersTest.java b/reactor-core/src/test/java/com/baeldung/reactor/core/CombiningPublishersTest.java
new file mode 100644
index 0000000000..9d5d094875
--- /dev/null
+++ b/reactor-core/src/test/java/com/baeldung/reactor/core/CombiningPublishersTest.java
@@ -0,0 +1,182 @@
+package com.baeldung.reactor.core;
+
+import java.time.Duration;
+
+import org.junit.Test;
+
+import reactor.core.publisher.Flux;
+import reactor.test.StepVerifier;
+
+public class CombiningPublishersTest {
+
+ private static Integer min = 1;
+ private static Integer max = 5;
+
+ private static Flux evenNumbers = Flux.range(min, max).filter(x -> x % 2 == 0);
+ private static Flux oddNumbers = Flux.range(min, max).filter(x -> x % 2 > 0);
+
+
+ @Test
+ public void testMerge() {
+ Flux fluxOfIntegers = Flux.merge(
+ evenNumbers,
+ oddNumbers);
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(2)
+ .expectNext(4)
+ .expectNext(1)
+ .expectNext(3)
+ .expectNext(5)
+ .expectComplete()
+ .verify();
+ }
+
+ @Test
+ public void testMergeWithDelayedElements() {
+ Flux fluxOfIntegers = Flux.merge(
+ evenNumbers.delayElements(Duration.ofMillis(500L)),
+ oddNumbers.delayElements(Duration.ofMillis(300L)));
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(1)
+ .expectNext(2)
+ .expectNext(3)
+ .expectNext(5)
+ .expectNext(4)
+ .expectComplete()
+ .verify();
+ }
+
+ @Test
+ public void testConcat() {
+ Flux fluxOfIntegers = Flux.concat(
+ evenNumbers.delayElements(Duration.ofMillis(500L)),
+ oddNumbers.delayElements(Duration.ofMillis(300L)));
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(2)
+ .expectNext(4)
+ .expectNext(1)
+ .expectNext(3)
+ .expectNext(5)
+ .expectComplete()
+ .verify();
+ }
+
+ @Test
+ public void testConcatWith() {
+ Flux fluxOfIntegers = evenNumbers
+ .concatWith(oddNumbers);
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(2)
+ .expectNext(4)
+ .expectNext(1)
+ .expectNext(3)
+ .expectNext(5)
+ .expectComplete()
+ .verify();
+ }
+
+ @Test
+ public void testCombineLatest() {
+ Flux fluxOfIntegers = Flux.combineLatest(
+ evenNumbers,
+ oddNumbers,
+ (a, b) -> a + b);
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(5)
+ .expectNext(7)
+ .expectNext(9)
+ .expectComplete()
+ .verify();
+
+ }
+
+ @Test
+ public void testCombineLatest1() {
+ StepVerifier.create(Flux.combineLatest(obj -> (int) obj[1], evenNumbers, oddNumbers))
+ .expectNext(1)
+ .expectNext(3)
+ .expectNext(5)
+ .verifyComplete();
+ }
+
+ @Test
+ public void testMergeSequential() {
+ Flux fluxOfIntegers = Flux.mergeSequential(
+ evenNumbers,
+ oddNumbers);
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(2)
+ .expectNext(4)
+ .expectNext(1)
+ .expectNext(3)
+ .expectNext(5)
+ .expectComplete()
+ .verify();
+ }
+
+
+ @Test
+ public void testMergeDelayError() {
+ Flux fluxOfIntegers = Flux.mergeDelayError(1,
+ evenNumbers.delayElements(Duration.ofMillis(500L)),
+ oddNumbers.delayElements(Duration.ofMillis(300L)));
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(1)
+ .expectNext(2)
+ .expectNext(3)
+ .expectNext(5)
+ .expectNext(4)
+ .expectComplete()
+ .verify();
+ }
+
+ @Test
+ public void testMergeWith() {
+ Flux fluxOfIntegers = evenNumbers.mergeWith(oddNumbers);
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(2)
+ .expectNext(4)
+ .expectNext(1)
+ .expectNext(3)
+ .expectNext(5)
+ .expectComplete()
+ .verify();
+ }
+
+ @Test
+ public void testZip() {
+ Flux fluxOfIntegers = Flux.zip(
+ evenNumbers,
+ oddNumbers,
+ (a, b) -> a + b);
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(3)
+ .expectNext(7)
+ .expectComplete()
+ .verify();
+ }
+
+ @Test
+ public void testZipWith() {
+ Flux fluxOfIntegers = evenNumbers
+ .zipWith(oddNumbers,
+ (a, b) -> a * b);
+
+ StepVerifier.create(fluxOfIntegers)
+ .expectNext(2)
+ .expectNext(12)
+ .expectComplete()
+ .verify();
+ }
+
+
+}