summaryrefslogtreecommitdiff
path: root/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs
diff options
context:
space:
mode:
Diffstat (limited to 'external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs')
-rw-r--r--external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs78
1 files changed, 78 insertions, 0 deletions
diff --git a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs
index e226ca27c1..40c3eec309 100644
--- a/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs
+++ b/external/rx/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs
@@ -154,6 +154,69 @@ namespace ReactiveTests.Tests
}
[TestMethod]
+ public void StartPeriodicTimer_Fast()
+ {
+ var e = new MarshalByRefCell<ManualResetEvent> { Value = new ManualResetEvent(false) };
+ _domain.SetData("state", e);
+
+ Run(() =>
+ {
+ var n = 0;
+
+ Scheduler.Default.SchedulePeriodic(TimeSpan.Zero, () =>
+ {
+ var state = (MarshalByRefCell<ManualResetEvent>)_domain.GetData("state");
+
+ if (n++ == 10)
+ state.Value.Set();
+ });
+ });
+
+ e.Value.WaitOne();
+ }
+
+ [TestMethod]
+ public void StartPeriodicTimer_Fast_Cancel()
+ {
+ var e = new MarshalByRefCell<ManualResetEvent> { Value = new ManualResetEvent(false) };
+ _domain.SetData("set_cancel", e);
+
+ Run(() =>
+ {
+ var n = 0;
+
+ var schedule = Scheduler.Default.SchedulePeriodic(TimeSpan.Zero, () =>
+ {
+ _domain.SetData("value", n++);
+ });
+
+ _domain.SetData("cancel", new MarshalByRefAction(schedule.Dispose));
+
+ var setCancel = (MarshalByRefCell<ManualResetEvent>)_domain.GetData("set_cancel");
+ setCancel.Value.Set();
+ });
+
+ e.Value.WaitOne();
+
+ var value = (int)_domain.GetData("value");
+
+ var cancel = (MarshalByRefAction)_domain.GetData("cancel");
+ cancel.Invoke();
+
+ Thread.Sleep(TimeSpan.FromMilliseconds(50));
+
+ var newValue = (int)_domain.GetData("value");
+
+ Assert.IsTrue(newValue >= value);
+
+ Thread.Sleep(TimeSpan.FromMilliseconds(50));
+
+ value = (int)_domain.GetData("value");
+
+ Assert.AreEqual(newValue, value);
+ }
+
+ [TestMethod]
public void CreateThread()
{
var e = new MarshalByRefCell<ManualResetEvent> { Value = new ManualResetEvent(false) };
@@ -294,5 +357,20 @@ namespace ReactiveTests.Tests
{
public T Value;
}
+
+ public class MarshalByRefAction : MarshalByRefObject
+ {
+ private readonly Action _action;
+
+ public MarshalByRefAction(Action action)
+ {
+ _action = action;
+ }
+
+ public void Invoke()
+ {
+ _action();
+ }
+ }
}
#endif \ No newline at end of file