Mercurial > pub > ImplabNet
comparison Implab.Test/AsyncTests.cs @ 76:c761fc982e1d v2
Refactoring of the IPromise<T> interface
Added tests
| author | cin |
|---|---|
| date | Wed, 10 Sep 2014 17:53:05 +0400 |
| parents | 3b8393be3441 |
| children | 91362ffbecf8 |
comparison
equal
deleted
inserted
replaced
| 75:4439140706d0 | 76:c761fc982e1d |
|---|---|
| 36 Assert.AreEqual(err.Message, "error"); | 36 Assert.AreEqual(err.Message, "error"); |
| 37 | 37 |
| 38 } | 38 } |
| 39 | 39 |
| 40 [TestMethod] | 40 [TestMethod] |
| 41 public void CancelExceptionTest() { | |
| 42 var p = new Promise<bool>(); | |
| 43 p.Cancel(); | |
| 44 | |
| 45 var p2 = p.Cancelled(() => { | |
| 46 throw new ApplicationException("CANCELLED"); | |
| 47 }); | |
| 48 | |
| 49 try { | |
| 50 p2.Join(); | |
| 51 Assert.Fail(); | |
| 52 } catch (ApplicationException err) { | |
| 53 Assert.AreEqual("CANCELLED", err.InnerException.Message); | |
| 54 } | |
| 55 | |
| 56 } | |
| 57 | |
| 58 [TestMethod] | |
| 59 public void ContinueOnCancelTest() { | |
| 60 var p = new Promise<bool>(); | |
| 61 p.Cancel(); | |
| 62 | |
| 63 var p2 = p | |
| 64 .Cancelled(() => { | |
| 65 throw new ApplicationException("CANCELLED"); | |
| 66 }) | |
| 67 .Error(e => true); | |
| 68 | |
| 69 Assert.AreEqual(true, p2.Join()); | |
| 70 } | |
| 71 | |
| 72 [TestMethod] | |
| 41 public void JoinSuccessTest() { | 73 public void JoinSuccessTest() { |
| 42 var p = new Promise<int>(); | 74 var p = new Promise<int>(); |
| 43 p.Resolve(100); | 75 p.Resolve(100); |
| 44 Assert.AreEqual(p.Join(), 100); | 76 Assert.AreEqual(p.Join(), 100); |
| 45 } | 77 } |
| 61 | 93 |
| 62 [TestMethod] | 94 [TestMethod] |
| 63 public void MapTest() { | 95 public void MapTest() { |
| 64 var p = new Promise<int>(); | 96 var p = new Promise<int>(); |
| 65 | 97 |
| 66 var p2 = p.Map(x => x.ToString()); | 98 var p2 = p.Then(x => x.ToString()); |
| 67 p.Resolve(100); | 99 p.Resolve(100); |
| 68 | 100 |
| 69 Assert.AreEqual(p2.Join(), "100"); | 101 Assert.AreEqual(p2.Join(), "100"); |
| 70 } | 102 } |
| 71 | 103 |
| 183 int writers = 0; | 215 int writers = 0; |
| 184 int readers = 0; | 216 int readers = 0; |
| 185 var stop = new ManualResetEvent(false); | 217 var stop = new ManualResetEvent(false); |
| 186 int total = 0; | 218 int total = 0; |
| 187 | 219 |
| 188 int itemsPerWriter = 1000; | 220 int itemsPerWriter = 10000; |
| 189 int writersCount = 3; | 221 int writersCount = 10; |
| 190 | 222 |
| 191 for (int i = 0; i < writersCount; i++) { | 223 for (int i = 0; i < writersCount; i++) { |
| 192 Interlocked.Increment(ref writers); | 224 Interlocked.Increment(ref writers); |
| 193 var wn = i; | 225 var wn = i; |
| 194 AsyncPool | 226 AsyncPool |
| 316 .Sleep(200, "Alan") | 348 .Sleep(200, "Alan") |
| 317 .Cancelled(() => flags[0] = true) | 349 .Cancelled(() => flags[0] = true) |
| 318 .Chain(x => | 350 .Chain(x => |
| 319 PromiseHelper | 351 PromiseHelper |
| 320 .Sleep(200, "Hi, " + x) | 352 .Sleep(200, "Hi, " + x) |
| 321 .Map(y => y) | 353 .Then(y => y) |
| 322 .Cancelled(() => flags[1] = true) | 354 .Cancelled(() => flags[1] = true) |
| 323 ) | 355 ) |
| 324 .Cancelled(() => flags[2] = true); | 356 .Cancelled(() => flags[2] = true); |
| 325 Thread.Sleep(300); | 357 Thread.Sleep(300); |
| 326 p.Cancel(); | 358 p.Cancel(); |
| 339 public void ChainedCancel1Test() { | 371 public void ChainedCancel1Test() { |
| 340 // при отмене сцепленной асинхронной операции все обещание должно | 372 // при отмене сцепленной асинхронной операции все обещание должно |
| 341 // завершаться ошибкой OperationCanceledException | 373 // завершаться ошибкой OperationCanceledException |
| 342 var p = PromiseHelper | 374 var p = PromiseHelper |
| 343 .Sleep(1, "Hi, HAL!") | 375 .Sleep(1, "Hi, HAL!") |
| 344 .Chain(x => { | 376 .Then(x => { |
| 345 // запускаем две асинхронные операции | 377 // запускаем две асинхронные операции |
| 346 var result = PromiseHelper.Sleep(1000, "HEM ENABLED!!!"); | 378 var result = PromiseHelper.Sleep(1000, "HEM ENABLED!!!"); |
| 347 // вторая операция отменяет первую до завершения | 379 // вторая операция отменяет первую до завершения |
| 348 PromiseHelper | 380 PromiseHelper |
| 349 .Sleep(100, "HAL, STOP!") | 381 .Sleep(100, "HAL, STOP!") |
| 358 } | 390 } |
| 359 | 391 |
| 360 [TestMethod] | 392 [TestMethod] |
| 361 public void ChainedCancel2Test() { | 393 public void ChainedCancel2Test() { |
| 362 // при отмене цепочки обещаний, вложенные операции также должны отменяться | 394 // при отмене цепочки обещаний, вложенные операции также должны отменяться |
| 363 IPromise p = null; | |
| 364 var pSurvive = new Promise<bool>(); | 395 var pSurvive = new Promise<bool>(); |
| 365 var hemStarted = new ManualResetEvent(false); | 396 var hemStarted = new ManualResetEvent(false); |
| 366 p = PromiseHelper | 397 var p = PromiseHelper |
| 367 .Sleep(1, "Hi, HAL!") | 398 .Sleep(1, "Hi, HAL!") |
| 368 .Chain(x => { | 399 .Chain(x => { |
| 369 hemStarted.Set(); | 400 hemStarted.Set(); |
| 370 // запускаем две асинхронные операции | 401 // запускаем две асинхронные операции |
| 371 var result = PromiseHelper | 402 var result = PromiseHelper |
| 372 .Sleep(1000, "HEM ENABLED!!!") | 403 .Sleep(10000, "HEM ENABLED!!!") |
| 373 .Then(s => pSurvive.Resolve(false)); | 404 .Then(s => pSurvive.Resolve(false)); |
| 374 | 405 |
| 375 result | 406 result |
| 376 .Cancelled(() => pSurvive.Resolve(true)); | 407 .Cancelled(() => pSurvive.Resolve(true)); |
| 377 | 408 |
