/** * Copyright (c) 2016-present, RxJava Contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See * the License for the specific language governing permissions and limitations under the License. */ package io.reactivex.internal.operators.single; import java.util.Arrays; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.Assert.*; import org.junit.Test; import io.reactivex.Single; import io.reactivex.functions.*; public class SingleZipTest { @Test public void zip2() { Single.zip(Single.just(1), Single.just(2), new BiFunction<Integer, Integer, Object>() { @Override public Object apply(Integer a, Integer b) throws Exception { return a + "" + b; } }) .test() .assertResult("12"); } @Test public void zip3() { Single.zip(Single.just(1), Single.just(2), Single.just(3), new Function3<Integer, Integer, Integer, Object>() { @Override public Object apply(Integer a, Integer b, Integer c) throws Exception { return a + "" + b + c; } }) .test() .assertResult("123"); } @Test public void zip4() { Single.zip(Single.just(1), Single.just(2), Single.just(3), Single.just(4), new Function4<Integer, Integer, Integer, Integer, Object>() { @Override public Object apply(Integer a, Integer b, Integer c, Integer d) throws Exception { return a + "" + b + c + d; } }) .test() .assertResult("1234"); } @Test public void zip5() { Single.zip(Single.just(1), Single.just(2), Single.just(3), Single.just(4), Single.just(5), new Function5<Integer, Integer, Integer, Integer, Integer, Object>() { @Override public Object apply(Integer a, Integer b, Integer c, Integer d, Integer e) throws Exception { return a + "" + b + c + d + e; } }) .test() .assertResult("12345"); } @Test public void zip6() { Single.zip(Single.just(1), Single.just(2), Single.just(3), Single.just(4), Single.just(5), Single.just(6), new Function6<Integer, Integer, Integer, Integer, Integer, Integer, Object>() { @Override public Object apply(Integer a, Integer b, Integer c, Integer d, Integer e, Integer f) throws Exception { return a + "" + b + c + d + e + f; } }) .test() .assertResult("123456"); } @Test public void zip7() { Single.zip(Single.just(1), Single.just(2), Single.just(3), Single.just(4), Single.just(5), Single.just(6), Single.just(7), new Function7<Integer, Integer, Integer, Integer, Integer, Integer, Integer, Object>() { @Override public Object apply(Integer a, Integer b, Integer c, Integer d, Integer e, Integer f, Integer g) throws Exception { return a + "" + b + c + d + e + f + g; } }) .test() .assertResult("1234567"); } @Test public void zip8() { Single.zip(Single.just(1), Single.just(2), Single.just(3), Single.just(4), Single.just(5), Single.just(6), Single.just(7), Single.just(8), new Function8<Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Object>() { @Override public Object apply(Integer a, Integer b, Integer c, Integer d, Integer e, Integer f, Integer g, Integer h) throws Exception { return a + "" + b + c + d + e + f + g + h; } }) .test() .assertResult("12345678"); } @Test public void zip9() { Single.zip(Single.just(1), Single.just(2), Single.just(3), Single.just(4), Single.just(5), Single.just(6), Single.just(7), Single.just(8), Single.just(9), new Function9<Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Integer, Object>() { @Override public Object apply(Integer a, Integer b, Integer c, Integer d, Integer e, Integer f, Integer g, Integer h, Integer i) throws Exception { return a + "" + b + c + d + e + f + g + h + i; } }) .test() .assertResult("123456789"); } @Test public void noDisposeOnAllSuccess() { final AtomicInteger counter = new AtomicInteger(); Single<Integer> source = Single.just(1).doOnDispose(new Action() { @Override public void run() throws Exception { counter.getAndIncrement(); } }); Single.zip(source, source, new BiFunction<Integer, Integer, Object>() { @Override public Integer apply(Integer a, Integer b) throws Exception { return a + b; } }) .test() .assertResult(2); assertEquals(0, counter.get()); } @SuppressWarnings("unchecked") @Test public void noDisposeOnAllSuccess2() { final AtomicInteger counter = new AtomicInteger(); Single<Integer> source = Single.just(1).doOnDispose(new Action() { @Override public void run() throws Exception { counter.getAndIncrement(); } }); Single.zip(Arrays.asList(source, source), new Function<Object[], Object>() { @Override public Integer apply(Object[] o) throws Exception { return (Integer)o[0] + (Integer)o[1]; } }) .test() .assertResult(2); assertEquals(0, counter.get()); } }