Merge pull request #2034 from alexrp/ctx-cleanup
[mono.git] / mcs / class / System.Threading.Tasks.Dataflow / Test / System.Threading.Tasks.Dataflow / BatchedJoinBlockTest.cs
index 84e17641375a0b25bc3cf99378d42f27b0dcc0ef..50983f5d9cac16884eb8b3853a06d22412938db0 100644 (file)
@@ -52,7 +52,7 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
 
                        Assert.IsTrue (block.Target2.Post (2));
 
-                       Assert.IsTrue (evt.Wait (100));
+                       Assert.IsTrue (evt.Wait (1000));
 
                        Assert.IsNotNull (result);
                        CollectionAssert.AreEqual (new[] { 1 }, result.Item1);
@@ -68,7 +68,7 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
                        Assert.IsNull (result);
 
                        Assert.IsTrue (block.Target1.Post (4));
-                       Assert.IsTrue (evt.Wait (100));
+                       Assert.IsTrue (evt.Wait (1000));
 
                        Assert.IsNotNull (result);
                        CollectionAssert.AreEqual (new[] { 3, 4 }, result.Item1);
@@ -84,11 +84,66 @@ namespace MonoTests.System.Threading.Tasks.Dataflow {
                        Assert.IsNull (result);
 
                        Assert.IsTrue (block.Target2.Post (6));
-                       Assert.IsTrue (evt.Wait (100));
+                       Assert.IsTrue (evt.Wait (1000));
 
                        Assert.IsNotNull (result);
                        CollectionAssert.IsEmpty (result.Item1);
                        CollectionAssert.AreEqual (new[] { 5, 6 }, result.Item2);
                }
+
+               [Test]
+               public void BoundedCapacityTest ()
+               {
+                       AssertEx.Throws<ArgumentException> (
+                               () =>
+                               new BatchedJoinBlock<int, int> (2,
+                                       new GroupingDataflowBlockOptions { BoundedCapacity = 3 }));
+               }
+
+               [Test]
+               public void CompletionTest ()
+               {
+                       var block = new BatchedJoinBlock<int, int> (2);
+
+                       Assert.IsTrue (block.Target1.Post (1));
+
+                       block.Complete ();
+
+                       Tuple<IList<int>, IList<int>> batch;
+                       Assert.IsTrue (block.TryReceive (out batch));
+                       CollectionAssert.AreEqual (new[] { 1 }, batch.Item1);
+                       CollectionAssert.IsEmpty (batch.Item2);
+
+                       Assert.IsTrue (block.Completion.Wait (1000));
+               }
+
+               [Test]
+               public void MaxNumberOfGroupsTest ()
+               {
+                       var scheduler = new TestScheduler ();
+                       var block = new BatchedJoinBlock<int, int> (1,
+                               new GroupingDataflowBlockOptions
+                               { MaxNumberOfGroups = 2, TaskScheduler = scheduler });
+
+                       Assert.IsTrue (block.Target1.Post (1));
+
+                       Assert.IsTrue (block.Target2.Post (2));
+
+                       Assert.IsFalse (block.Target2.Post (3));
+                       Assert.IsFalse (block.Target1.Post (4));
+
+                       Tuple<IList<int>, IList<int>> batch;
+                       Assert.IsTrue (block.TryReceive (out batch));
+                       CollectionAssert.AreEqual (new[] { 1 }, batch.Item1);
+                       CollectionAssert.IsEmpty (batch.Item2);
+
+                       Assert.IsTrue (block.TryReceive (out batch));
+                       CollectionAssert.IsEmpty (batch.Item1);
+                       CollectionAssert.AreEqual (new[] { 2 }, batch.Item2);
+
+                       scheduler.ExecuteAll ();
+
+                       Assert.IsTrue (block.Completion.Wait (1000));
+               }
        }
 }
\ No newline at end of file