Merge pull request #3796 from ntherning/windows-backend-for-MemoryMappedFile
[mono.git] / mcs / class / System.Threading.Tasks.Dataflow / Test / System.Threading.Tasks.Dataflow / BoundedCapacityTest.cs
index 862d5ef13f53c667f65173e34bb5de8f4dc3ce29..46953497fd3b0669a9f1d3339492d34c64df71ba 100644 (file)
@@ -77,13 +77,13 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
                        Assert.AreEqual (DataflowMessageStatus.Postponed,
                                target.OfferMessage (header, 43, source, false));
 
-                       Assert.AreEqual (42, block.Receive (TimeSpan.FromMilliseconds (100)));
+                       Assert.AreEqual (42, block.Receive (TimeSpan.FromMilliseconds (1000)));
 
                        Assert.IsFalse (block.Completion.Wait (100));
 
                        Assert.IsTrue (source.WasConsumed (header));
 
-                       Assert.AreEqual (43, block.Receive (TimeSpan.FromMilliseconds (100)));
+                       Assert.AreEqual (43, block.Receive (TimeSpan.FromMilliseconds (1000)));
 
                        Assert.AreEqual (DataflowMessageStatus.Accepted,
                                target.OfferMessage (new DataflowMessageHeader (3), 44, source, false));
@@ -131,9 +131,9 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
                        Assert.IsTrue (transform.Post (1));
                        Assert.IsTrue (transform.Post (2));
 
-                       Assert.GreaterOrEqual (scheduler.ExecuteAll (), 1);
+                       AssertHelper.GreaterOrEqual (scheduler.ExecuteAll (), 1);
 
-                       Assert.AreEqual (2, Thread.VolatileRead (ref n));
+                       Assert.AreEqual (2, Volatile.Read (ref n));
                }
 
                [Test]
@@ -154,9 +154,9 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
                        Assert.IsTrue (transform.Post (1));
                        Assert.IsTrue (transform.Post (2));
 
-                       Assert.GreaterOrEqual (scheduler.ExecuteAll (), 1);
+                       AssertHelper.GreaterOrEqual (scheduler.ExecuteAll (), 1);
 
-                       Assert.AreEqual (2, Thread.VolatileRead (ref n));
+                       Assert.AreEqual (2, Volatile.Read (ref n));
                }
 
                int n;
@@ -177,11 +177,11 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
 
                        Assert.IsFalse (transform.Post (101));
 
-                       Assert.GreaterOrEqual (scheduler.ExecuteAll (), 1);
+                       AssertHelper.GreaterOrEqual (scheduler.ExecuteAll (), 1);
 
                        Assert.IsFalse (transform.Post (102));
 
-                       Assert.AreEqual (10000, Thread.VolatileRead (ref n));
+                       Assert.AreEqual (10000, Volatile.Read (ref n));
                }
 
                IEnumerable<int> ComputeResults ()
@@ -251,6 +251,8 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
 
                readonly HashSet<DataflowMessageHeader> consumed =
                        new HashSet<DataflowMessageHeader> ();
+               readonly HashSet<DataflowMessageHeader> reserved =
+                       new HashSet<DataflowMessageHeader> ();
 
                public void Complete ()
                {
@@ -274,11 +276,20 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
                        return consumed.Contains (header);
                }
 
+               public bool WasReserved (DataflowMessageHeader header)
+               {
+                       return reserved.Contains (header);
+               }
+
+               public Action ConsumeWaiter { get; set; }
+                        
                public T ConsumeMessage (DataflowMessageHeader messageHeader,
                                         ITargetBlock<T> target, out bool messageConsumed)
                {
                        T item;
                        if (messages.TryGetValue (messageHeader, out item)) {
+                               if (ConsumeWaiter != null)
+                                       ConsumeWaiter ();
                                messages.Remove (messageHeader);
                                consumed.Add (messageHeader);
                                messageConsumed = true;
@@ -297,6 +308,7 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
                public bool ReserveMessage (DataflowMessageHeader messageHeader,
                                            ITargetBlock<T> target)
                {
+                       reserved.Add (messageHeader);
                        return messages.ContainsKey (messageHeader);
                }
 
@@ -306,4 +318,4 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
                        throw new NotImplementedException ();
                }
        }
-}
\ No newline at end of file
+}