ScheduledItemTest.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Reactive.Concurrency;
  7. using System.Reactive.Disposables;
  8. using Microsoft.Reactive.Testing;
  9. using Microsoft.VisualStudio.TestTools.UnitTesting;
  10. using Assert = Xunit.Assert;
  11. namespace ReactiveTests
  12. {
  13. [TestClass]
  14. public class ScheduledItemTest : ReactiveTest
  15. {
  16. [TestMethod]
  17. public void ArgumentChecking()
  18. {
  19. #pragma warning disable CA1806 // (Unused new instance.) We expect the constructor to throw.
  20. ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(default, 42, (x, y) => Disposable.Empty, DateTimeOffset.Now));
  21. ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(Scheduler.Default, 42, default, DateTimeOffset.Now));
  22. ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(default, 42, (x, y) => Disposable.Empty, DateTimeOffset.Now, Comparer<DateTimeOffset>.Default));
  23. ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(Scheduler.Default, 42, default, DateTimeOffset.Now, Comparer<DateTimeOffset>.Default));
  24. ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(Scheduler.Default, 42, (x, y) => Disposable.Empty, DateTimeOffset.Now, default));
  25. #pragma warning restore CA1806
  26. }
  27. [TestMethod]
  28. public void Inequalities()
  29. {
  30. var si1 = new SI(42);
  31. var si2 = new SI(43);
  32. var si3 = new SI(42);
  33. Assert.True(si1 < si2);
  34. Assert.False(si1 < si3);
  35. Assert.True(si1 <= si2);
  36. Assert.True(si1 <= si3);
  37. Assert.True(si2 > si1);
  38. Assert.False(si3 > si1);
  39. Assert.True(si2 >= si1);
  40. Assert.True(si3 >= si1);
  41. Assert.True(si1.CompareTo(si2) < 0);
  42. Assert.True(si2.CompareTo(si1) > 0);
  43. Assert.True(si1.CompareTo(si1) == 0);
  44. Assert.True(si1.CompareTo(si3) == 0);
  45. Assert.True(si2 > null);
  46. Assert.True(si2 >= null);
  47. Assert.False(si2 < null);
  48. Assert.False(si2 <= null);
  49. Assert.True(null < si1);
  50. Assert.True(null <= si1);
  51. Assert.False(null > si1);
  52. Assert.False(null >= si1);
  53. Assert.True(si1.CompareTo(null) > 0);
  54. var si4 = new SI2(43, -1);
  55. var si5 = new SI2(44, -1);
  56. Assert.True(si4 > si1);
  57. Assert.True(si4 >= si1);
  58. Assert.True(si1 < si4);
  59. Assert.True(si1 <= si4);
  60. Assert.False(si4 > si2);
  61. Assert.True(si4 >= si2);
  62. Assert.False(si2 < si4);
  63. Assert.True(si2 <= si4);
  64. Assert.True(si5 > si4);
  65. Assert.True(si5 >= si4);
  66. Assert.False(si4 > si5);
  67. Assert.False(si4 >= si5);
  68. Assert.True(si4 < si5);
  69. Assert.True(si4 <= si5);
  70. Assert.False(si5 < si4);
  71. Assert.False(si5 <= si4);
  72. }
  73. [TestMethod]
  74. public void Equalities()
  75. {
  76. var si1 = new SI2(42, 123);
  77. var si2 = new SI2(42, 123);
  78. var si3 = new SI2(42, 321);
  79. #pragma warning disable 1718
  80. Assert.False(si1 != si1);
  81. Assert.True(si1 == si1);
  82. #pragma warning restore 1718
  83. Assert.True(si1.Equals(si1));
  84. Assert.True(si1 != si2);
  85. Assert.False(si1 == si2);
  86. Assert.False(si1.Equals(si2));
  87. Assert.True(si1 != null);
  88. Assert.True(null != si1);
  89. Assert.False(si1 == null);
  90. Assert.False(null == si1);
  91. Assert.Equal(si1.GetHashCode(), si1.GetHashCode());
  92. Assert.NotEqual(si1.GetHashCode(), si2.GetHashCode());
  93. Assert.NotEqual(si1.GetHashCode(), si3.GetHashCode());
  94. }
  95. private class SI : ScheduledItem<int>
  96. {
  97. public SI(int dueTime)
  98. : base(dueTime, Comparer<int>.Default)
  99. {
  100. }
  101. protected override IDisposable InvokeCore()
  102. {
  103. throw new NotImplementedException();
  104. }
  105. }
  106. private class SI2 : ScheduledItem<int>
  107. {
  108. public SI2(int dueTime, int _)
  109. : base(dueTime, Comparer<int>.Default)
  110. {
  111. }
  112. protected override IDisposable InvokeCore()
  113. {
  114. throw new NotImplementedException();
  115. }
  116. }
  117. }
  118. }