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