Mercurial > pub > ImplabNet
comparison Implab.Test/AsyncTests.cs @ 10:aa33d0bb8c0c promises
implemeted new cancellable promises concept
| author | cin |
|---|---|
| date | Sun, 03 Nov 2013 18:07:38 +0400 |
| parents | 381095ad0a69 |
| children | 6ec82bf68c8e |
comparison
equal
deleted
inserted
replaced
| 9:c82e0dfbb4dd | 10:aa33d0bb8c0c |
|---|---|
| 1 using System; | 1 using System; |
| 2 using Microsoft.VisualStudio.TestTools.UnitTesting; | 2 using Microsoft.VisualStudio.TestTools.UnitTesting; |
| 3 using Implab; | |
| 4 using System.Reflection; | 3 using System.Reflection; |
| 5 using System.Threading; | 4 using System.Threading; |
| 6 | 5 |
| 7 namespace Implab.Tests | 6 namespace Implab.Test |
| 8 { | 7 { |
| 9 [TestClass] | 8 [TestClass] |
| 10 public class AsyncTests | 9 public class AsyncTests |
| 11 { | 10 { |
| 12 [TestMethod] | 11 [TestMethod] |
| 88 | 87 |
| 89 [TestMethod] | 88 [TestMethod] |
| 90 public void PoolTest () | 89 public void PoolTest () |
| 91 { | 90 { |
| 92 var pid = Thread.CurrentThread.ManagedThreadId; | 91 var pid = Thread.CurrentThread.ManagedThreadId; |
| 93 var p = AsyncPool.Invoke (() => { | 92 var p = AsyncPool.Invoke (() => Thread.CurrentThread.ManagedThreadId); |
| 94 return Thread.CurrentThread.ManagedThreadId; | |
| 95 }); | |
| 96 | 93 |
| 97 Assert.AreNotEqual (pid, p.Join ()); | 94 Assert.AreNotEqual (pid, p.Join ()); |
| 98 } | 95 } |
| 96 | |
| 97 [TestMethod] | |
| 98 public void ComplexCase1Test() { | |
| 99 var flags = new bool[3]; | |
| 100 | |
| 101 // op1 (aync 200ms) => op2 (async 200ms) => op3 (sync map) | |
| 102 | |
| 103 var p = PromiseHelper | |
| 104 .Sleep(200, "Alan") | |
| 105 .Cancelled(() => flags[0] = true) | |
| 106 .Chain(x => | |
| 107 PromiseHelper | |
| 108 .Sleep(200, "Hi, " + x) | |
| 109 .Map( y => y ) | |
| 110 .Cancelled(() => flags[1] = true) | |
| 111 ) | |
| 112 .Cancelled(() => flags[2] = true); | |
| 113 Thread.Sleep(300); | |
| 114 p.Cancel(); | |
| 115 try { | |
| 116 Assert.AreEqual(p.Join(), "Hi, Alan"); | |
| 117 Assert.Fail("Shouldn't get here"); | |
| 118 } catch(OperationCanceledException) { | |
| 119 } | |
| 120 | |
| 121 Assert.IsFalse(flags[0]); | |
| 122 Assert.IsTrue(flags[1]); | |
| 123 Assert.IsTrue(flags[2]); | |
| 124 } | |
| 99 } | 125 } |
| 100 } | 126 } |
| 101 | 127 |
