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);
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);
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