diff options
author | Jo Shields <directhex@apebox.org> | 2014-02-19 22:12:43 +0000 |
---|---|---|
committer | Jo Shields <directhex@apebox.org> | 2014-02-19 22:12:43 +0000 |
commit | 9972bf87b4f27d9c8f358ef8414ac1ab957a2f0f (patch) | |
tree | 5bb230c1d698659115f918e243c1d4b0aa4c7f51 /mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs | |
parent | d0a215f5626219ff7927f576588a777e5331c7be (diff) | |
download | mono-upstream/3.2.8+dfsg.tar.gz |
Imported Upstream version 3.2.8+dfsgupstream/3.2.8+dfsg
Diffstat (limited to 'mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs')
-rw-r--r-- | mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs | 55 |
1 files changed, 55 insertions, 0 deletions
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<string> (); + var b = new BlockingCollection<string> (); + var arr = new [] { a, b }; + string res = null; + + Task<int> t = Task.Factory.StartNew (() => BlockingCollection<string>.TakeFromAny (arr, out res)); + a.Add ("foo"); + Assert.AreEqual (0, t.Result, "#1"); + Assert.AreEqual ("foo", res, "#2"); + + t = Task.Factory.StartNew (() => BlockingCollection<string>.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<string> (); + var b = new BlockingCollection<string> (); + var arr = new [] { a, b }; + var cts = new CancellationTokenSource (); + string res = null; + + Task<int> t = Task.Factory.StartNew (() => BlockingCollection<string>.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<string>.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<string>.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 |