| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
- #if STRESS
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Reactive.Concurrency;
- using System.Threading;
- using System.Reactive.Linq;
- namespace ReactiveTests.Stress.Linq
- {
- public class Replay
- {
- /// <summary>
- /// Tests the Replay operator with different schedulers, supporting ISchedulerLongRunning and otherwise.
- /// Stresses the ScheduledObserver implementation with its counting logic.
- /// </summary>
- public static void DifferentSchedulers()
- {
- while (true)
- {
- for (int i = 100; i <= 10000; i *= 10)
- {
- foreach (var s in new IScheduler[] { Scheduler.Default, TaskPoolScheduler.Default, ThreadPoolScheduler.Instance })
- {
- foreach (var b in new[] { true, false })
- {
- var t = b ? s : s.DisableOptimizations();
- var e = new ManualResetEvent(false);
- var xs = Observable.Range(0, i, TaskPoolScheduler.Default.DisableOptimizations()).Do(_ => { }, () => e.Set());
- var ys = xs.Replay(t);
- var f = new ManualResetEvent(false);
- var r = new List<int>();
- ys.Subscribe(r.Add, () => f.Set());
- ys.Connect();
-
- e.WaitOne();
- f.WaitOne();
- if (!r.SequenceEqual(Enumerable.Range(0, i)))
- throw new Exception();
- Console.Write(".");
- }
- }
- }
- }
- }
- }
- }
- #endif
|