From 9972bf87b4f27d9c8f358ef8414ac1ab957a2f0f Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Wed, 19 Feb 2014 22:12:43 +0000 Subject: Imported Upstream version 3.2.8+dfsg --- .../BlockingCollectionTests.cs | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs') diff --git a/mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs b/mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs index 0098e2de92..9f0e9b0190 100644 --- a/mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs +++ b/mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs @@ -27,6 +27,7 @@ using System; using System.Threading; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Threading.Tasks; using NUnit.Framework; @@ -192,6 +193,60 @@ namespace MonoTests.System.Collections.Concurrent Assert.IsNull (o); Assert.IsFalse (success); } + + [Test] + public void TakeAnyFromSecondCollection () + { + var a = new BlockingCollection (); + var b = new BlockingCollection (); + var arr = new [] { a, b }; + string res = null; + + Task t = Task.Factory.StartNew (() => BlockingCollection.TakeFromAny (arr, out res)); + a.Add ("foo"); + Assert.AreEqual (0, t.Result, "#1"); + Assert.AreEqual ("foo", res, "#2"); + + t = Task.Factory.StartNew (() => BlockingCollection.TakeFromAny (arr, out res)); + b.Add ("bar"); + Assert.AreEqual (1, t.Result, "#3"); + Assert.AreEqual ("bar", res, "#4"); + } + + [Test] + public void TakeAnyCancellable () + { + var a = new BlockingCollection (); + var b = new BlockingCollection (); + var arr = new [] { a, b }; + var cts = new CancellationTokenSource (); + string res = null; + + Task t = Task.Factory.StartNew (() => BlockingCollection.TakeFromAny (arr, out res, cts.Token)); + Thread.Sleep (100); + a.Add ("foo"); + Assert.AreEqual (0, t.Result, "#1"); + Assert.AreEqual ("foo", res, "#2"); + + t = Task.Factory.StartNew (() => BlockingCollection.TakeFromAny (arr, out res, cts.Token)); + Thread.Sleep (100); + b.Add ("bar"); + Assert.AreEqual (1, t.Result, "#3"); + Assert.AreEqual ("bar", res, "#4"); + + t = Task.Factory.StartNew (() => { + try { + return BlockingCollection.TakeFromAny (arr, out res, cts.Token); + } catch (OperationCanceledException WE_GOT_CANCELED) { + res = "canceled"; + return -10; + } + }); + + cts.Cancel (); + Assert.AreEqual (-10, t.Result, "#5"); + Assert.AreEqual ("canceled", res, "#6"); + } } } #endif -- cgit v1.2.3