PageRenderTime 39ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 1ms

/System.Reactive.Tests/System.Reactive.Concurrency/SchedulerTest.cs

https://github.com/gshackles/mono-reactive
C# | 100 lines | 93 code | 7 blank | 0 comment | 6 complexity | af6aefdcc744d5e55303076160851e9a MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reactive;
  6. using System.Reactive.Concurrency;
  7. using System.Reactive.Linq;
  8. using System.Threading;
  9. using NUnit.Framework;
  10. namespace System.Reactive.Concurrency.Tests
  11. {
  12. [TestFixture]
  13. public class SchedulerTest
  14. {
  15. [Test]
  16. public void SimpleAction ()
  17. {
  18. var sch = Scheduler.CurrentThread;
  19. int i = 0;
  20. var dis = sch.Schedule (() => i += 5);
  21. Thread.Sleep (100);
  22. Assert.AreEqual (5, i, "#1"); // at least, do not repeat.
  23. dis.Dispose ();
  24. }
  25. [Test]
  26. public void SimpleActionDateTimeOffset ()
  27. {
  28. var sch = Scheduler.CurrentThread;
  29. int i = 0;
  30. var dis = sch.Schedule (DateTimeOffset.Now, () => i += 5);
  31. Thread.Sleep (100);
  32. Assert.AreEqual (5, i, "#1"); // at least, do not repeat.
  33. dis.Dispose ();
  34. }
  35. [Test]
  36. public void SimpleActionTimeSpan ()
  37. {
  38. var sch = Scheduler.CurrentThread;
  39. int i = 0;
  40. var dis = sch.Schedule (TimeSpan.Zero, () => i += 5);
  41. Thread.Sleep (100);
  42. Thread.Sleep (100);
  43. Assert.AreEqual (5, i, "#1"); // at least, do not repeat.
  44. dis.Dispose ();
  45. }
  46. [Test]
  47. public void RecursiveAction ()
  48. {
  49. var sch = Scheduler.CurrentThread;
  50. int i = 0;
  51. bool done = true;
  52. var dis = sch.Schedule ((Action a) => { i++; if (i < 10) a (); else done = true; });
  53. SpinWait.SpinUntil (() => done, 1000);
  54. Assert.AreEqual (10, i, "#1");
  55. Assert.IsTrue (done, "#2");
  56. dis.Dispose ();
  57. }
  58. [Test]
  59. public void RecursiveActionTimeSpan ()
  60. {
  61. var sch = Scheduler.CurrentThread;
  62. int i = 0;
  63. bool done = true;
  64. var dueTime = TimeSpan.FromMilliseconds (20);
  65. var dis = sch.Schedule (dueTime, (Action<TimeSpan> a) => { i++; if (i < 10) a (dueTime); else done = true; });
  66. SpinWait.SpinUntil (() => done, 1000);
  67. Assert.AreEqual (10, i, "#1");
  68. dis.Dispose ();
  69. }
  70. [Test]
  71. public void RecursiveActionTimeSpan2 ()
  72. {
  73. int i = 0;
  74. var scheduler = new HistoricalScheduler ();
  75. var span = TimeSpan.FromMilliseconds (50);
  76. scheduler.Schedule<object> (null, span, (object obj,Action<object,TimeSpan> a) => { i++; a (obj, span); });
  77. scheduler.AdvanceBy (TimeSpan.FromSeconds (1));
  78. Assert.AreEqual (20, i, "#1");
  79. }
  80. [Test]
  81. public void RecursiveActionDateTimeOffset ()
  82. {
  83. var sch = Scheduler.CurrentThread;
  84. int i = 0;
  85. bool done = true;
  86. DateTimeOffset dueTime = DateTimeOffset.Now.AddMilliseconds (20);
  87. var dis = sch.Schedule (dueTime, (Action<DateTimeOffset> a) => { i++; if (i < 10) a (dueTime); else done = true; });
  88. SpinWait.SpinUntil (() => done, 1000);
  89. Assert.AreEqual (10, i, "#1");
  90. dis.Dispose ();
  91. }
  92. }
  93. }