Search in sources :

Example 46 with Worker

use of io.reactivex.rxjava3.core.Scheduler.Worker in project RxJava by ReactiveX.

the class SchedulerMultiWorkerSupportTest method getShutdownWorkers.

@Test
public void getShutdownWorkers() {
    final List<Worker> list = new ArrayList<>();
    ComputationScheduler.NONE.createWorkers(max * 2, new WorkerCallback() {

        @Override
        public void onWorker(int i, Worker w) {
            list.add(w);
        }
    });
    assertEquals(max * 2, list.size());
    for (Worker w : list) {
        assertEquals(ComputationScheduler.SHUTDOWN_WORKER, w);
    }
}
Also used : WorkerCallback(io.reactivex.rxjava3.internal.schedulers.SchedulerMultiWorkerSupport.WorkerCallback) Worker(io.reactivex.rxjava3.core.Scheduler.Worker) RxJavaTest(io.reactivex.rxjava3.core.RxJavaTest) Test(org.junit.Test)

Example 47 with Worker

use of io.reactivex.rxjava3.core.Scheduler.Worker in project RxJava by ReactiveX.

the class SchedulerMultiWorkerSupportTest method moreThanMaxWorkers.

@Test
public void moreThanMaxWorkers() {
    final List<Worker> list = new ArrayList<>();
    SchedulerMultiWorkerSupport mws = (SchedulerMultiWorkerSupport) Schedulers.computation();
    mws.createWorkers(max * 2, new WorkerCallback() {

        @Override
        public void onWorker(int i, Worker w) {
            list.add(w);
        }
    });
    assertEquals(max * 2, list.size());
}
Also used : WorkerCallback(io.reactivex.rxjava3.internal.schedulers.SchedulerMultiWorkerSupport.WorkerCallback) Worker(io.reactivex.rxjava3.core.Scheduler.Worker) RxJavaTest(io.reactivex.rxjava3.core.RxJavaTest) Test(org.junit.Test)

Example 48 with Worker

use of io.reactivex.rxjava3.core.Scheduler.Worker in project RxJava by ReactiveX.

the class SchedulerMultiWorkerSupportTest method distinctThreads.

@Test
public void distinctThreads() throws Exception {
    for (int i = 0; i < TestHelper.RACE_DEFAULT_LOOPS; i++) {
        final CompositeDisposable composite = new CompositeDisposable();
        try {
            final CountDownLatch cdl = new CountDownLatch(max * 2);
            final Set<String> threads1 = Collections.synchronizedSet(new HashSet<>());
            final Set<String> threads2 = Collections.synchronizedSet(new HashSet<>());
            Runnable parallel1 = new Runnable() {

                @Override
                public void run() {
                    final List<Worker> list1 = new ArrayList<>();
                    SchedulerMultiWorkerSupport mws = (SchedulerMultiWorkerSupport) Schedulers.computation();
                    mws.createWorkers(max, new WorkerCallback() {

                        @Override
                        public void onWorker(int i, Worker w) {
                            list1.add(w);
                            composite.add(w);
                        }
                    });
                    Runnable run = new Runnable() {

                        @Override
                        public void run() {
                            threads1.add(Thread.currentThread().getName());
                            cdl.countDown();
                        }
                    };
                    for (Worker w : list1) {
                        w.schedule(run);
                    }
                }
            };
            Runnable parallel2 = new Runnable() {

                @Override
                public void run() {
                    final List<Worker> list2 = new ArrayList<>();
                    SchedulerMultiWorkerSupport mws = (SchedulerMultiWorkerSupport) Schedulers.computation();
                    mws.createWorkers(max, new WorkerCallback() {

                        @Override
                        public void onWorker(int i, Worker w) {
                            list2.add(w);
                            composite.add(w);
                        }
                    });
                    Runnable run = new Runnable() {

                        @Override
                        public void run() {
                            threads2.add(Thread.currentThread().getName());
                            cdl.countDown();
                        }
                    };
                    for (Worker w : list2) {
                        w.schedule(run);
                    }
                }
            };
            TestHelper.race(parallel1, parallel2);
            assertTrue(cdl.await(5, TimeUnit.SECONDS));
            assertEquals(threads1.toString(), max, threads1.size());
            assertEquals(threads2.toString(), max, threads2.size());
        } finally {
            composite.dispose();
        }
    }
}
Also used : WorkerCallback(io.reactivex.rxjava3.internal.schedulers.SchedulerMultiWorkerSupport.WorkerCallback) Worker(io.reactivex.rxjava3.core.Scheduler.Worker) CompositeDisposable(io.reactivex.rxjava3.disposables.CompositeDisposable) RxJavaTest(io.reactivex.rxjava3.core.RxJavaTest) Test(org.junit.Test)

Example 49 with Worker

use of io.reactivex.rxjava3.core.Scheduler.Worker in project RxJava by ReactiveX.

the class TrampolineSchedulerInternalTest method reentrantScheduleShutdown.

@Test
public void reentrantScheduleShutdown() {
    final Worker w = Schedulers.trampoline().createWorker();
    try {
        final int[] calls = { 0, 0 };
        w.schedule(new Runnable() {

            @Override
            public void run() {
                calls[0]++;
                w.schedule(new Runnable() {

                    @Override
                    public void run() {
                        calls[1]++;
                    }
                }, 1, TimeUnit.MILLISECONDS);
                w.dispose();
            }
        });
        assertEquals(1, calls[0]);
        assertEquals(0, calls[1]);
    } finally {
        w.dispose();
    }
}
Also used : Worker(io.reactivex.rxjava3.core.Scheduler.Worker) Test(org.junit.Test)

Example 50 with Worker

use of io.reactivex.rxjava3.core.Scheduler.Worker in project RxJava by ReactiveX.

the class TrampolineSchedulerInternalTest method reentrantScheduleDispose.

@Test
public void reentrantScheduleDispose() {
    final Worker w = Schedulers.trampoline().createWorker();
    try {
        final int[] calls = { 0, 0 };
        w.schedule(new Runnable() {

            @Override
            public void run() {
                calls[0]++;
                w.schedule(new Runnable() {

                    @Override
                    public void run() {
                        calls[1]++;
                    }
                }).dispose();
            }
        });
        assertEquals(1, calls[0]);
        assertEquals(0, calls[1]);
    } finally {
        w.dispose();
    }
}
Also used : Worker(io.reactivex.rxjava3.core.Scheduler.Worker) Test(org.junit.Test)

Aggregations

Worker (io.reactivex.rxjava3.core.Scheduler.Worker)91 Test (org.junit.Test)87 Disposable (io.reactivex.rxjava3.disposables.Disposable)28 CountingRunnable (io.reactivex.rxjava3.android.testutil.CountingRunnable)22 Scheduler (io.reactivex.rxjava3.core.Scheduler)18 EmptyDisposable (io.reactivex.rxjava3.internal.disposables.EmptyDisposable)10 AtomicReference (java.util.concurrent.atomic.AtomicReference)9 Ignore (org.junit.Ignore)7 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)6 RxJavaTest (io.reactivex.rxjava3.core.RxJavaTest)4 TrampolineScheduler (io.reactivex.rxjava3.internal.schedulers.TrampolineScheduler)4 SuppressUndeliverable (io.reactivex.rxjava3.testsupport.SuppressUndeliverable)4 IoScheduler (io.reactivex.rxjava3.internal.schedulers.IoScheduler)3 WorkerCallback (io.reactivex.rxjava3.internal.schedulers.SchedulerMultiWorkerSupport.WorkerCallback)3 CountDownLatch (java.util.concurrent.CountDownLatch)3 ThrowingRunnable (org.junit.function.ThrowingRunnable)3 Message (android.os.Message)2 CompositeDisposable (io.reactivex.rxjava3.disposables.CompositeDisposable)2 TestException (io.reactivex.rxjava3.exceptions.TestException)2 NewThreadWorker (io.reactivex.rxjava3.internal.schedulers.NewThreadWorker)2