@Override public void run() { c.decrementAndGet(); while (c.get() != 0 && !pp.hasSubscribers()) { } TestCommonHelper.race(r1, r2); } });
/** * Synchronizes the execution of two runnables (as much as possible) * to test race conditions. * <p>The method blocks until both have run to completion. * @param r1 the first runnable * @param r2 the second runnable */ public static void race(final Runnable r1, final Runnable r2) { race(r1, r2, Schedulers.single()); } /**
@Test public void disposeRace() { for (int i = 0; i < 500; i++) { final AtomicReference<Disposable> d = new AtomicReference<Disposable>(); Runnable r = new Runnable() { @Override public void run() { DisposableHelper.dispose(d); } }; TestCommonHelper.race(r, r, Schedulers.io()); } }
@Test public void cancelRace() { for (int i = 0; i < 500; i++) { final AtomicReference<Subscription> s = new AtomicReference<Subscription>(); Runnable r = new Runnable() { @Override public void run() { SubscriptionHelper.cancel(s); } }; TestCommonHelper.race(r, r, Schedulers.single()); } }
@Test public void setReplace() { for (int i = 0; i < 500; i++) { final AtomicReference<Disposable> d = new AtomicReference<Disposable>(); Runnable r = new Runnable() { @Override public void run() { DisposableHelper.replace(d, Disposables.empty()); } }; TestCommonHelper.race(r, r, Schedulers.io()); } }
@Test public void cancelRace() { for (int i = 0; i < 500; i++) { final FutureSubscriber<Integer> fs = new FutureSubscriber<Integer>(); Runnable r = new Runnable() { @Override public void run() { fs.cancel(false); } }; TestCommonHelper.race(r, r, Schedulers.single()); } }
@Test public void disposeRace() { for (int i = 0; i < 500; i++) { final ListCompositeDisposable cd = new ListCompositeDisposable(); Runnable run = new Runnable() { @Override public void run() { cd.dispose(); } }; TestCommonHelper.race(run, run, Schedulers.io()); } }
@Test public void addRace() { for (int i = 0; i < 500; i++) { final ListCompositeDisposable cd = new ListCompositeDisposable(); Runnable run = new Runnable() { @Override public void run() { cd.add(Disposables.empty()); } }; TestCommonHelper.race(run, run, Schedulers.io()); } }
@Test public void connectRace() { for (int i = 0; i < 500; i++) { final ConnectableObservable<Integer> co = Observable.<Integer>empty().publish(); Runnable r1 = new Runnable() { @Override public void run() { co.connect(); } }; TestCommonHelper.race(r1, r1); } }
@Test public void replaceRace() { for (int i = 0; i < 100; i++) { final ArrayCompositeDisposable acd = new ArrayCompositeDisposable(2); Runnable r = new Runnable() { @Override public void run() { acd.replaceResource(0, Disposables.empty()); } }; TestCommonHelper.race(r, r, Schedulers.io()); } }
@Test public void addAllRace() { for (int i = 0; i < 500; i++) { final ListCompositeDisposable cd = new ListCompositeDisposable(); Runnable run = new Runnable() { @Override public void run() { cd.addAll(Disposables.empty()); } }; TestCommonHelper.race(run, run, Schedulers.io()); } }
@Test public void subscribeRace() { for (int i = 0; i < 500; i++) { final ReplaySubject<Integer> rp = ReplaySubject.create(); Runnable r1 = new Runnable() { @Override public void run() { rp.test(); } }; TestCommonHelper.race(r1, r1, Schedulers.single()); } }
@Test public void setRace() { for (int i = 0; i < 100; i++) { final ArrayCompositeDisposable acd = new ArrayCompositeDisposable(2); Runnable r = new Runnable() { @Override public void run() { acd.setResource(0, Disposables.empty()); } }; TestCommonHelper.race(r, r, Schedulers.io()); } }
@Test public void disposeRace() { for (int i = 0; i < 500; i++) { final ArrayCompositeSubscription ac = new ArrayCompositeSubscription(1000); Runnable r = new Runnable() { @Override public void run() { ac.dispose(); } }; TestCommonHelper.race(r, r, Schedulers.single()); } }
@Test public void addRace() { for (int i = 0; i < 500; i++) { final CompositeDisposable cd = new CompositeDisposable(); Runnable run = new Runnable() { @Override public void run() { cd.add(Disposables.empty()); } }; TestCommonHelper.race(run, run, Schedulers.io()); } }
@Test public void connectRace() { for (int i = 0; i < 500; i++) { final ConnectableObservable<Integer> co = Observable.range(1, 3).replay(); Runnable r = new Runnable() { @Override public void run() { co.connect(); } }; TestCommonHelper.race(r, r); } }
@Test public void disposeRace() { for (int i = 0; i < 500; i++) { final CompositeDisposable cd = new CompositeDisposable(); Runnable run = new Runnable() { @Override public void run() { cd.dispose(); } }; TestCommonHelper.race(run, run, Schedulers.io()); } }
@Test public void addAllRace() { for (int i = 0; i < 500; i++) { final CompositeDisposable cd = new CompositeDisposable(); Runnable run = new Runnable() { @Override public void run() { cd.addAll(Disposables.empty()); } }; TestCommonHelper.race(run, run, Schedulers.io()); } }
@Test public void disposeRace() { for (int i = 0; i < 100; i++) { final Disposable d = Disposables.empty(); Runnable r = new Runnable() { @Override public void run() { d.dispose(); } }; TestCommonHelper.race(r, r, Schedulers.io()); } }
@Test public void cancelRace() { for (int i = 0; i < 500; i++) { final Future<?> f = Single.never().toFuture(); Runnable r = new Runnable() { @Override public void run() { f.cancel(true); } }; TestCommonHelper.race(r, r, Schedulers.single()); } }