1 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. 2 3 using System; 4 using System.Collections.Generic; 5 using System.Reactive.Concurrency; 6 using System.Reactive.Disposables; 7 using Microsoft.Reactive.Testing; 8 #if NUNIT 9 using NUnit.Framework; 10 using TestClassAttribute = NUnit.Framework.TestFixtureAttribute; 11 using TestMethodAttribute = NUnit.Framework.TestAttribute; 12 using TestInitializeAttribute = NUnit.Framework.SetUpAttribute; 13 #else 14 using Microsoft.VisualStudio.TestTools.UnitTesting; 15 #endif 16 17 namespace ReactiveTests 18 { 19 [TestClass] 20 public class ScheduledItemTest : ReactiveTest 21 { 22 [TestMethod] ArgumentChecking()23 public void ArgumentChecking() 24 { 25 ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(default(IScheduler), 42, (x, y) => Disposable.Empty, DateTimeOffset.Now)); 26 ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(Scheduler.Default, 42, default(Func<IScheduler, int, IDisposable>), DateTimeOffset.Now)); 27 28 ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(default(IScheduler), 42, (x, y) => Disposable.Empty, DateTimeOffset.Now, Comparer<DateTimeOffset>.Default)); 29 ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(Scheduler.Default, 42, default(Func<IScheduler, int, IDisposable>), DateTimeOffset.Now, Comparer<DateTimeOffset>.Default)); 30 ReactiveAssert.Throws<ArgumentNullException>(() => new ScheduledItem<DateTimeOffset, int>(Scheduler.Default, 42, (x, y) => Disposable.Empty, DateTimeOffset.Now, default(IComparer<DateTimeOffset>))); 31 } 32 33 [TestMethod] Inequalities()34 public void Inequalities() 35 { 36 var si1 = new SI(42); 37 var si2 = new SI(43); 38 var si3 = new SI(42); 39 40 Assert.IsTrue(si1 < si2); 41 Assert.IsFalse(si1 < si3); 42 Assert.IsTrue(si1 <= si2); 43 Assert.IsTrue(si1 <= si3); 44 Assert.IsTrue(si2 > si1); 45 Assert.IsFalse(si3 > si1); 46 Assert.IsTrue(si2 >= si1); 47 Assert.IsTrue(si3 >= si1); 48 49 Assert.IsTrue(si1.CompareTo(si2) < 0); 50 Assert.IsTrue(si2.CompareTo(si1) > 0); 51 Assert.IsTrue(si1.CompareTo(si1) == 0); 52 Assert.IsTrue(si1.CompareTo(si3) == 0); 53 54 Assert.IsTrue(si2 > null); 55 Assert.IsTrue(si2 >= null); 56 Assert.IsFalse(si2 < null); 57 Assert.IsFalse(si2 <= null); 58 Assert.IsTrue(null < si1); 59 Assert.IsTrue(null <= si1); 60 Assert.IsFalse(null > si1); 61 Assert.IsFalse(null >= si1); 62 63 Assert.IsTrue(si1.CompareTo(null) > 0); 64 65 var si4 = new SI2(43, -1); 66 var si5 = new SI2(44, -1); 67 68 Assert.IsTrue(si4 > si1); 69 Assert.IsTrue(si4 >= si1); 70 Assert.IsTrue(si1 < si4); 71 Assert.IsTrue(si1 <= si4); 72 Assert.IsFalse(si4 > si2); 73 Assert.IsTrue(si4 >= si2); 74 Assert.IsFalse(si2 < si4); 75 Assert.IsTrue(si2 <= si4); 76 77 Assert.IsTrue(si5 > si4); 78 Assert.IsTrue(si5 >= si4); 79 Assert.IsFalse(si4 > si5); 80 Assert.IsFalse(si4 >= si5); 81 Assert.IsTrue(si4 < si5); 82 Assert.IsTrue(si4 <= si5); 83 Assert.IsFalse(si5 < si4); 84 Assert.IsFalse(si5 <= si4); 85 } 86 87 [TestMethod] Equalities()88 public void Equalities() 89 { 90 var si1 = new SI2(42, 123); 91 var si2 = new SI2(42, 123); 92 var si3 = new SI2(42, 321); 93 var si4 = new SI2(43, 123); 94 95 #pragma warning disable 1718 96 Assert.IsFalse(si1 != si1); 97 Assert.IsTrue(si1 == si1); 98 #pragma warning restore 1718 99 Assert.IsTrue(si1.Equals(si1)); 100 101 Assert.IsTrue(si1 != si2); 102 Assert.IsFalse(si1 == si2); 103 Assert.IsFalse(si1.Equals(si2)); 104 105 Assert.IsTrue(si1 != null); 106 Assert.IsTrue(null != si1); 107 Assert.IsFalse(si1 == null); 108 Assert.IsFalse(null == si1); 109 110 Assert.AreEqual(si1.GetHashCode(), si1.GetHashCode()); 111 Assert.AreNotEqual(si1.GetHashCode(), si2.GetHashCode()); 112 Assert.AreNotEqual(si1.GetHashCode(), si3.GetHashCode()); 113 } 114 115 class SI : ScheduledItem<int> 116 { SI(int dueTime)117 public SI(int dueTime) 118 : base(dueTime, Comparer<int>.Default) 119 { 120 } 121 InvokeCore()122 protected override IDisposable InvokeCore() 123 { 124 throw new NotImplementedException(); 125 } 126 } 127 128 class SI2 : ScheduledItem<int> 129 { 130 private readonly int _value; 131 SI2(int dueTime, int value)132 public SI2(int dueTime, int value) 133 : base(dueTime, Comparer<int>.Default) 134 { 135 _value = value; 136 } 137 InvokeCore()138 protected override IDisposable InvokeCore() 139 { 140 throw new NotImplementedException(); 141 } 142 } 143 } 144 } 145