ObservableAsyncTest.cs 141 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710
  1. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
  2. using System;
  3. using System.Linq;
  4. using System.Reactive;
  5. using System.Reactive.Concurrency;
  6. using System.Reactive.Linq;
  7. using System.Threading;
  8. using Microsoft.Reactive.Testing;
  9. using Microsoft.VisualStudio.TestTools.UnitTesting;
  10. #if !NO_TPL
  11. using System.Threading.Tasks;
  12. #endif
  13. namespace ReactiveTests.Tests
  14. {
  15. [TestClass]
  16. public partial class ObservableAsyncTest : ReactiveTest
  17. {
  18. #if !NO_TPL
  19. private Task<int> doneTask;
  20. public ObservableAsyncTest()
  21. {
  22. var tcs = new TaskCompletionSource<int>();
  23. tcs.SetResult(42);
  24. doneTask = tcs.Task;
  25. }
  26. #endif
  27. #region FromAsyncPattern
  28. [TestMethod]
  29. public void FromAsyncPattern_ArgumentChecking()
  30. {
  31. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern(null, iar => { }));
  32. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>(null, iar => 0));
  33. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>(null, iar => { }));
  34. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>(null, iar => 0));
  35. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>(null, iar => { }));
  36. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>(null, iar => 0));
  37. #if !NO_LARGEARITY
  38. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>(null, iar => { }));
  39. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>(null, iar => 0));
  40. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>(null, iar => { }));
  41. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>(null, iar => 0));
  42. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>(null, iar => { }));
  43. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>(null, iar => 0));
  44. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>(null, iar => { }));
  45. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>(null, iar => 0));
  46. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>(null, iar => { }));
  47. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>(null, iar => 0));
  48. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>(null, iar => { }));
  49. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>(null, iar => 0));
  50. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>(null, iar => { }));
  51. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  52. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  53. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  54. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  55. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  56. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  57. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  58. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  59. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  60. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  61. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  62. #endif
  63. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern((cb, o) => null, default(Action<IAsyncResult>)));
  64. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>((cb, o) => null, default(Func<IAsyncResult, int>)));
  65. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>((a, cb, o) => null, default(Action<IAsyncResult>)));
  66. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>((a, cb, o) => null, default(Func<IAsyncResult, int>)));
  67. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>((a, b, cb, o) => null, default(Action<IAsyncResult>)));
  68. #if !NO_LARGEARITY
  69. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>((a, b, cb, o) => null, default(Func<IAsyncResult, int>)));
  70. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>((a, b, c, cb, o) => null, default(Action<IAsyncResult>)));
  71. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>((a, b, c, cb, o) => null, default(Func<IAsyncResult, int>)));
  72. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>((a, b, c, d, cb, o) => null, default(Action<IAsyncResult>)));
  73. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>((a, b, c, d, cb, o) => null, default(Func<IAsyncResult, int>)));
  74. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>((a, b, c, d, e, cb, o) => null, default(Action<IAsyncResult>)));
  75. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>((a, b, c, d, e, cb, o) => null, default(Func<IAsyncResult, int>)));
  76. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>((a, b, c, d, e, f, cb, o) => null, default(Action<IAsyncResult>)));
  77. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>((a, b, c, d, e, f, cb, o) => null, default(Func<IAsyncResult, int>)));
  78. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>((a, b, c, d, e, f, g, cb, o) => null, default(Action<IAsyncResult>)));
  79. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, cb, o) => null, default(Func<IAsyncResult, int>)));
  80. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, cb, o) => null, default(Action<IAsyncResult>)));
  81. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, cb, o) => null, default(Func<IAsyncResult, int>)));
  82. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, cb, o) => null, default(Action<IAsyncResult>)));
  83. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, cb, o) => null, default(Func<IAsyncResult, int>)));
  84. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, cb, o) => null, default(Action<IAsyncResult>)));
  85. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, cb, o) => null, default(Func<IAsyncResult, int>)));
  86. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, cb, o) => null, default(Action<IAsyncResult>)));
  87. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, cb, o) => null, default(Func<IAsyncResult, int>)));
  88. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, cb, o) => null, default(Action<IAsyncResult>)));
  89. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, cb, o) => null, default(Func<IAsyncResult, int>)));
  90. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, cb, o) => null, default(Action<IAsyncResult>)));
  91. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, cb, o) => null, default(Func<IAsyncResult, int>)));
  92. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, o) => null, default(Action<IAsyncResult>)));
  93. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, o) => null, default(Func<IAsyncResult, int>)));
  94. #endif
  95. }
  96. [TestMethod]
  97. public void FromAsyncPattern0()
  98. {
  99. var x = new Result();
  100. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  101. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  102. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  103. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  104. }
  105. [TestMethod]
  106. public void FromAsyncPatternAction0()
  107. {
  108. var x = new Result();
  109. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  110. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  111. var res = Observable.FromAsyncPattern(begin, end)().ToEnumerable().ToArray();
  112. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  113. }
  114. [TestMethod]
  115. public void FromAsyncPattern0_Error()
  116. {
  117. var x = new Result();
  118. var ex = new Exception();
  119. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  120. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  121. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  122. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  123. }
  124. [TestMethod]
  125. public void FromAsyncPattern0_ErrorBegin()
  126. {
  127. var x = new Result();
  128. var ex = new Exception();
  129. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); throw ex; };
  130. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  131. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  132. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  133. }
  134. [TestMethod]
  135. public void FromAsyncPattern1()
  136. {
  137. var x = new Result();
  138. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, _) =>
  139. {
  140. Assert.AreEqual(a, 2);
  141. cb(x);
  142. return x;
  143. };
  144. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  145. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  146. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  147. }
  148. [TestMethod]
  149. public void FromAsyncPatternAction1()
  150. {
  151. var x = new Result();
  152. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, _) =>
  153. {
  154. Assert.AreEqual(a, 2);
  155. cb(x);
  156. return x;
  157. };
  158. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  159. var res = Observable.FromAsyncPattern(begin, end)(2).ToEnumerable().ToArray();
  160. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  161. }
  162. [TestMethod]
  163. public void FromAsyncPattern1_Error()
  164. {
  165. var x = new Result();
  166. var ex = new Exception();
  167. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, o) => { cb(x); return x; };
  168. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  169. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  170. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  171. }
  172. [TestMethod]
  173. public void FromAsyncPattern1_ErrorBegin()
  174. {
  175. var x = new Result();
  176. var ex = new Exception();
  177. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, o) => { cb(x); throw ex; };
  178. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  179. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  180. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  181. }
  182. [TestMethod]
  183. public void FromAsyncPattern2()
  184. {
  185. var x = new Result();
  186. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, _) =>
  187. {
  188. Assert.AreEqual(a, 2);
  189. Assert.AreEqual(b, 3);
  190. cb(x);
  191. return x;
  192. };
  193. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  194. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  195. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  196. }
  197. [TestMethod]
  198. public void FromAsyncPatternAction2()
  199. {
  200. var x = new Result();
  201. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, _) =>
  202. {
  203. Assert.AreEqual(a, 2);
  204. Assert.AreEqual(b, 3);
  205. cb(x);
  206. return x;
  207. };
  208. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  209. var res = Observable.FromAsyncPattern(begin, end)(2, 3).ToEnumerable().ToArray();
  210. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  211. }
  212. [TestMethod]
  213. public void FromAsyncPattern2_Error()
  214. {
  215. var x = new Result();
  216. var ex = new Exception();
  217. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, o) => { cb(x); return x; };
  218. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  219. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  220. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  221. }
  222. [TestMethod]
  223. public void FromAsyncPattern2_ErrorBegin()
  224. {
  225. var x = new Result();
  226. var ex = new Exception();
  227. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, o) => { cb(x); throw ex; };
  228. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  229. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  230. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  231. }
  232. #if !NO_LARGEARITY
  233. [TestMethod]
  234. public void FromAsyncPattern3()
  235. {
  236. var x = new Result();
  237. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, _) =>
  238. {
  239. Assert.AreEqual(a, 2);
  240. Assert.AreEqual(b, 3);
  241. Assert.AreEqual(c, 4);
  242. cb(x);
  243. return x;
  244. };
  245. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  246. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  247. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  248. }
  249. [TestMethod]
  250. public void FromAsyncPatternAction3()
  251. {
  252. var x = new Result();
  253. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, _) =>
  254. {
  255. Assert.AreEqual(a, 2);
  256. Assert.AreEqual(b, 3);
  257. Assert.AreEqual(c, 4);
  258. cb(x);
  259. return x;
  260. };
  261. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  262. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).ToEnumerable().ToArray();
  263. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  264. }
  265. [TestMethod]
  266. public void FromAsyncPattern3_Error()
  267. {
  268. var x = new Result();
  269. var ex = new Exception();
  270. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, o) => { cb(x); return x; };
  271. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  272. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  273. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  274. }
  275. [TestMethod]
  276. public void FromAsyncPattern3_ErrorBegin()
  277. {
  278. var x = new Result();
  279. var ex = new Exception();
  280. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, o) => { cb(x); throw ex; };
  281. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  282. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  283. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  284. }
  285. [TestMethod]
  286. public void FromAsyncPattern4()
  287. {
  288. var x = new Result();
  289. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, _) =>
  290. {
  291. Assert.AreEqual(a, 2);
  292. Assert.AreEqual(b, 3);
  293. Assert.AreEqual(c, 4);
  294. Assert.AreEqual(d, 5);
  295. cb(x);
  296. return x;
  297. };
  298. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  299. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  300. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  301. }
  302. [TestMethod]
  303. public void FromAsyncPatternAction4()
  304. {
  305. var x = new Result();
  306. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, _) =>
  307. {
  308. Assert.AreEqual(a, 2);
  309. Assert.AreEqual(b, 3);
  310. Assert.AreEqual(c, 4);
  311. Assert.AreEqual(d, 5);
  312. cb(x);
  313. return x;
  314. };
  315. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  316. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).ToEnumerable().ToArray();
  317. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  318. }
  319. [TestMethod]
  320. public void FromAsyncPattern4_Error()
  321. {
  322. var x = new Result();
  323. var ex = new Exception();
  324. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, o) => { cb(x); return x; };
  325. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  326. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  327. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  328. }
  329. [TestMethod]
  330. public void FromAsyncPattern4_ErrorBegin()
  331. {
  332. var x = new Result();
  333. var ex = new Exception();
  334. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, o) => { cb(x); throw ex; };
  335. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  336. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  337. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  338. }
  339. [TestMethod]
  340. public void FromAsyncPattern5()
  341. {
  342. var x = new Result();
  343. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, _) =>
  344. {
  345. Assert.AreEqual(a, 2);
  346. Assert.AreEqual(b, 3);
  347. Assert.AreEqual(c, 4);
  348. Assert.AreEqual(d, 5);
  349. Assert.AreEqual(e, 6);
  350. cb(x);
  351. return x;
  352. };
  353. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  354. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  355. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  356. }
  357. [TestMethod]
  358. public void FromAsyncPatternAction5()
  359. {
  360. var x = new Result();
  361. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, _) =>
  362. {
  363. Assert.AreEqual(a, 2);
  364. Assert.AreEqual(b, 3);
  365. Assert.AreEqual(c, 4);
  366. Assert.AreEqual(d, 5);
  367. Assert.AreEqual(e, 6);
  368. cb(x);
  369. return x;
  370. };
  371. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  372. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).ToEnumerable().ToArray();
  373. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  374. }
  375. [TestMethod]
  376. public void FromAsyncPattern5_Error()
  377. {
  378. var x = new Result();
  379. var ex = new Exception();
  380. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, o) => { cb(x); return x; };
  381. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  382. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  383. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  384. }
  385. [TestMethod]
  386. public void FromAsyncPattern5_ErrorBegin()
  387. {
  388. var x = new Result();
  389. var ex = new Exception();
  390. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, o) => { cb(x); throw ex; };
  391. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  392. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  393. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  394. }
  395. [TestMethod]
  396. public void FromAsyncPattern6()
  397. {
  398. var x = new Result();
  399. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, _) =>
  400. {
  401. Assert.AreEqual(a, 2);
  402. Assert.AreEqual(b, 3);
  403. Assert.AreEqual(c, 4);
  404. Assert.AreEqual(d, 5);
  405. Assert.AreEqual(e, 6);
  406. Assert.AreEqual(f, 7);
  407. cb(x);
  408. return x;
  409. };
  410. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  411. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  412. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  413. }
  414. [TestMethod]
  415. public void FromAsyncPatternAction6()
  416. {
  417. var x = new Result();
  418. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, _) =>
  419. {
  420. Assert.AreEqual(a, 2);
  421. Assert.AreEqual(b, 3);
  422. Assert.AreEqual(c, 4);
  423. Assert.AreEqual(d, 5);
  424. Assert.AreEqual(e, 6);
  425. Assert.AreEqual(f, 7);
  426. cb(x);
  427. return x;
  428. };
  429. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  430. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).ToEnumerable().ToArray();
  431. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  432. }
  433. [TestMethod]
  434. public void FromAsyncPattern6_Error()
  435. {
  436. var x = new Result();
  437. var ex = new Exception();
  438. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, o) => { cb(x); return x; };
  439. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  440. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  441. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  442. }
  443. [TestMethod]
  444. public void FromAsyncPattern6_ErrorBegin()
  445. {
  446. var x = new Result();
  447. var ex = new Exception();
  448. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, o) => { cb(x); throw ex; };
  449. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  450. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  451. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  452. }
  453. [TestMethod]
  454. public void FromAsyncPattern7()
  455. {
  456. var x = new Result();
  457. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, _) =>
  458. {
  459. Assert.AreEqual(a, 2);
  460. Assert.AreEqual(b, 3);
  461. Assert.AreEqual(c, 4);
  462. Assert.AreEqual(d, 5);
  463. Assert.AreEqual(e, 6);
  464. Assert.AreEqual(f, 7);
  465. Assert.AreEqual(g, 8);
  466. cb(x);
  467. return x;
  468. };
  469. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  470. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  471. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  472. }
  473. [TestMethod]
  474. public void FromAsyncPatternAction7()
  475. {
  476. var x = new Result();
  477. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, _) =>
  478. {
  479. Assert.AreEqual(a, 2);
  480. Assert.AreEqual(b, 3);
  481. Assert.AreEqual(c, 4);
  482. Assert.AreEqual(d, 5);
  483. Assert.AreEqual(e, 6);
  484. Assert.AreEqual(f, 7);
  485. Assert.AreEqual(g, 8);
  486. cb(x);
  487. return x;
  488. };
  489. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  490. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).ToEnumerable().ToArray();
  491. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  492. }
  493. [TestMethod]
  494. public void FromAsyncPattern7_Error()
  495. {
  496. var x = new Result();
  497. var ex = new Exception();
  498. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, o) => { cb(x); return x; };
  499. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  500. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  501. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  502. }
  503. [TestMethod]
  504. public void FromAsyncPattern7_ErrorBegin()
  505. {
  506. var x = new Result();
  507. var ex = new Exception();
  508. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, o) => { cb(x); throw ex; };
  509. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  510. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  511. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  512. }
  513. [TestMethod]
  514. public void FromAsyncPattern8()
  515. {
  516. var x = new Result();
  517. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, _) =>
  518. {
  519. Assert.AreEqual(a, 2);
  520. Assert.AreEqual(b, 3);
  521. Assert.AreEqual(c, 4);
  522. Assert.AreEqual(d, 5);
  523. Assert.AreEqual(e, 6);
  524. Assert.AreEqual(f, 7);
  525. Assert.AreEqual(g, 8);
  526. Assert.AreEqual(h, 9);
  527. cb(x);
  528. return x;
  529. };
  530. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  531. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  532. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  533. }
  534. [TestMethod]
  535. public void FromAsyncPatternAction8()
  536. {
  537. var x = new Result();
  538. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, _) =>
  539. {
  540. Assert.AreEqual(a, 2);
  541. Assert.AreEqual(b, 3);
  542. Assert.AreEqual(c, 4);
  543. Assert.AreEqual(d, 5);
  544. Assert.AreEqual(e, 6);
  545. Assert.AreEqual(f, 7);
  546. Assert.AreEqual(g, 8);
  547. Assert.AreEqual(h, 9);
  548. cb(x);
  549. return x;
  550. };
  551. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  552. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).ToEnumerable().ToArray();
  553. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  554. }
  555. [TestMethod]
  556. public void FromAsyncPattern8_Error()
  557. {
  558. var x = new Result();
  559. var ex = new Exception();
  560. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, o) => { cb(x); return x; };
  561. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  562. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  563. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  564. }
  565. [TestMethod]
  566. public void FromAsyncPattern8_ErrorBegin()
  567. {
  568. var x = new Result();
  569. var ex = new Exception();
  570. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, o) => { cb(x); throw ex; };
  571. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  572. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  573. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  574. }
  575. [TestMethod]
  576. public void FromAsyncPattern9()
  577. {
  578. var x = new Result();
  579. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, _) =>
  580. {
  581. Assert.AreEqual(a, 2);
  582. Assert.AreEqual(b, 3);
  583. Assert.AreEqual(c, 4);
  584. Assert.AreEqual(d, 5);
  585. Assert.AreEqual(e, 6);
  586. Assert.AreEqual(f, 7);
  587. Assert.AreEqual(g, 8);
  588. Assert.AreEqual(h, 9);
  589. Assert.AreEqual(i, 10);
  590. cb(x);
  591. return x;
  592. };
  593. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  594. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  595. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  596. }
  597. [TestMethod]
  598. public void FromAsyncPatternAction9()
  599. {
  600. var x = new Result();
  601. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, _) =>
  602. {
  603. Assert.AreEqual(a, 2);
  604. Assert.AreEqual(b, 3);
  605. Assert.AreEqual(c, 4);
  606. Assert.AreEqual(d, 5);
  607. Assert.AreEqual(e, 6);
  608. Assert.AreEqual(f, 7);
  609. Assert.AreEqual(g, 8);
  610. Assert.AreEqual(h, 9);
  611. Assert.AreEqual(i, 10);
  612. cb(x);
  613. return x;
  614. };
  615. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  616. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).ToEnumerable().ToArray();
  617. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  618. }
  619. [TestMethod]
  620. public void FromAsyncPattern9_Error()
  621. {
  622. var x = new Result();
  623. var ex = new Exception();
  624. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, o) => { cb(x); return x; };
  625. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  626. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  627. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  628. }
  629. [TestMethod]
  630. public void FromAsyncPattern9_ErrorBegin()
  631. {
  632. var x = new Result();
  633. var ex = new Exception();
  634. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, o) => { cb(x); throw ex; };
  635. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  636. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  637. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  638. }
  639. [TestMethod]
  640. public void FromAsyncPattern10()
  641. {
  642. var x = new Result();
  643. Func<int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, cb, _) =>
  644. {
  645. Assert.AreEqual(a, 2);
  646. Assert.AreEqual(b, 3);
  647. Assert.AreEqual(c, 4);
  648. Assert.AreEqual(d, 5);
  649. Assert.AreEqual(e, 6);
  650. Assert.AreEqual(f, 7);
  651. Assert.AreEqual(g, 8);
  652. Assert.AreEqual(h, 9);
  653. Assert.AreEqual(i, 10);
  654. Assert.AreEqual(j, 11);
  655. cb(x);
  656. return x;
  657. };
  658. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  659. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  660. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  661. }
  662. [TestMethod]
  663. public void FromAsyncPatternAction10()
  664. {
  665. var x = new Result();
  666. Func<int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, cb, _) =>
  667. {
  668. Assert.AreEqual(a, 2);
  669. Assert.AreEqual(b, 3);
  670. Assert.AreEqual(c, 4);
  671. Assert.AreEqual(d, 5);
  672. Assert.AreEqual(e, 6);
  673. Assert.AreEqual(f, 7);
  674. Assert.AreEqual(g, 8);
  675. Assert.AreEqual(h, 9);
  676. Assert.AreEqual(i, 10);
  677. Assert.AreEqual(j, 11);
  678. cb(x);
  679. return x;
  680. };
  681. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  682. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).ToEnumerable().ToArray();
  683. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  684. }
  685. [TestMethod]
  686. public void FromAsyncPattern10_Error()
  687. {
  688. var x = new Result();
  689. var ex = new Exception();
  690. Func<int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, cb, o) => { cb(x); return x; };
  691. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  692. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  693. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  694. }
  695. [TestMethod]
  696. public void FromAsyncPattern10_ErrorBegin()
  697. {
  698. var x = new Result();
  699. var ex = new Exception();
  700. Func<int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, cb, o) => { cb(x); throw ex; };
  701. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  702. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  703. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  704. }
  705. [TestMethod]
  706. public void FromAsyncPattern11()
  707. {
  708. var x = new Result();
  709. Func<int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, cb, _) =>
  710. {
  711. Assert.AreEqual(a, 2);
  712. Assert.AreEqual(b, 3);
  713. Assert.AreEqual(c, 4);
  714. Assert.AreEqual(d, 5);
  715. Assert.AreEqual(e, 6);
  716. Assert.AreEqual(f, 7);
  717. Assert.AreEqual(g, 8);
  718. Assert.AreEqual(h, 9);
  719. Assert.AreEqual(i, 10);
  720. Assert.AreEqual(j, 11);
  721. Assert.AreEqual(k, 12);
  722. cb(x);
  723. return x;
  724. };
  725. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  726. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  727. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  728. }
  729. [TestMethod]
  730. public void FromAsyncPatternAction11()
  731. {
  732. var x = new Result();
  733. Func<int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, cb, _) =>
  734. {
  735. Assert.AreEqual(a, 2);
  736. Assert.AreEqual(b, 3);
  737. Assert.AreEqual(c, 4);
  738. Assert.AreEqual(d, 5);
  739. Assert.AreEqual(e, 6);
  740. Assert.AreEqual(f, 7);
  741. Assert.AreEqual(g, 8);
  742. Assert.AreEqual(h, 9);
  743. Assert.AreEqual(i, 10);
  744. Assert.AreEqual(j, 11);
  745. Assert.AreEqual(k, 12);
  746. cb(x);
  747. return x;
  748. };
  749. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  750. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).ToEnumerable().ToArray();
  751. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  752. }
  753. [TestMethod]
  754. public void FromAsyncPattern11_Error()
  755. {
  756. var x = new Result();
  757. var ex = new Exception();
  758. Func<int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, cb, o) => { cb(x); return x; };
  759. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  760. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  761. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  762. }
  763. [TestMethod]
  764. public void FromAsyncPattern11_ErrorBegin()
  765. {
  766. var x = new Result();
  767. var ex = new Exception();
  768. Func<int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, cb, o) => { cb(x); throw ex; };
  769. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  770. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  771. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  772. }
  773. [TestMethod]
  774. public void FromAsyncPattern12()
  775. {
  776. var x = new Result();
  777. Func<int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, cb, _) =>
  778. {
  779. Assert.AreEqual(a, 2);
  780. Assert.AreEqual(b, 3);
  781. Assert.AreEqual(c, 4);
  782. Assert.AreEqual(d, 5);
  783. Assert.AreEqual(e, 6);
  784. Assert.AreEqual(f, 7);
  785. Assert.AreEqual(g, 8);
  786. Assert.AreEqual(h, 9);
  787. Assert.AreEqual(i, 10);
  788. Assert.AreEqual(j, 11);
  789. Assert.AreEqual(k, 12);
  790. Assert.AreEqual(l, 13);
  791. cb(x);
  792. return x;
  793. };
  794. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  795. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  796. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  797. }
  798. [TestMethod]
  799. public void FromAsyncPatternAction12()
  800. {
  801. var x = new Result();
  802. Func<int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, cb, _) =>
  803. {
  804. Assert.AreEqual(a, 2);
  805. Assert.AreEqual(b, 3);
  806. Assert.AreEqual(c, 4);
  807. Assert.AreEqual(d, 5);
  808. Assert.AreEqual(e, 6);
  809. Assert.AreEqual(f, 7);
  810. Assert.AreEqual(g, 8);
  811. Assert.AreEqual(h, 9);
  812. Assert.AreEqual(i, 10);
  813. Assert.AreEqual(j, 11);
  814. Assert.AreEqual(k, 12);
  815. Assert.AreEqual(l, 13);
  816. cb(x);
  817. return x;
  818. };
  819. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  820. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).ToEnumerable().ToArray();
  821. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  822. }
  823. [TestMethod]
  824. public void FromAsyncPattern12_Error()
  825. {
  826. var x = new Result();
  827. var ex = new Exception();
  828. Func<int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, cb, o) => { cb(x); return x; };
  829. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  830. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  831. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  832. }
  833. [TestMethod]
  834. public void FromAsyncPattern12_ErrorBegin()
  835. {
  836. var x = new Result();
  837. var ex = new Exception();
  838. Func<int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, cb, o) => { cb(x); throw ex; };
  839. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  840. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  841. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  842. }
  843. [TestMethod]
  844. public void FromAsyncPattern13()
  845. {
  846. var x = new Result();
  847. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, cb, _) =>
  848. {
  849. Assert.AreEqual(a, 2);
  850. Assert.AreEqual(b, 3);
  851. Assert.AreEqual(c, 4);
  852. Assert.AreEqual(d, 5);
  853. Assert.AreEqual(e, 6);
  854. Assert.AreEqual(f, 7);
  855. Assert.AreEqual(g, 8);
  856. Assert.AreEqual(h, 9);
  857. Assert.AreEqual(i, 10);
  858. Assert.AreEqual(j, 11);
  859. Assert.AreEqual(k, 12);
  860. Assert.AreEqual(l, 13);
  861. Assert.AreEqual(m, 14);
  862. cb(x);
  863. return x;
  864. };
  865. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  866. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().ToArray();
  867. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  868. }
  869. [TestMethod]
  870. public void FromAsyncPatternAction13()
  871. {
  872. var x = new Result();
  873. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, cb, _) =>
  874. {
  875. Assert.AreEqual(a, 2);
  876. Assert.AreEqual(b, 3);
  877. Assert.AreEqual(c, 4);
  878. Assert.AreEqual(d, 5);
  879. Assert.AreEqual(e, 6);
  880. Assert.AreEqual(f, 7);
  881. Assert.AreEqual(g, 8);
  882. Assert.AreEqual(h, 9);
  883. Assert.AreEqual(i, 10);
  884. Assert.AreEqual(j, 11);
  885. Assert.AreEqual(k, 12);
  886. Assert.AreEqual(l, 13);
  887. Assert.AreEqual(m, 14);
  888. cb(x);
  889. return x;
  890. };
  891. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  892. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).ToEnumerable().ToArray();
  893. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  894. }
  895. [TestMethod]
  896. public void FromAsyncPattern13_Error()
  897. {
  898. var x = new Result();
  899. var ex = new Exception();
  900. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, cb, o) => { cb(x); return x; };
  901. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  902. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().ToArray();
  903. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  904. }
  905. [TestMethod]
  906. public void FromAsyncPattern13_ErrorBegin()
  907. {
  908. var x = new Result();
  909. var ex = new Exception();
  910. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, cb, o) => { cb(x); throw ex; };
  911. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  912. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().ToArray();
  913. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  914. }
  915. [TestMethod]
  916. public void FromAsyncPattern14()
  917. {
  918. var x = new Result();
  919. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, _) =>
  920. {
  921. Assert.AreEqual(a, 2);
  922. Assert.AreEqual(b, 3);
  923. Assert.AreEqual(c, 4);
  924. Assert.AreEqual(d, 5);
  925. Assert.AreEqual(e, 6);
  926. Assert.AreEqual(f, 7);
  927. Assert.AreEqual(g, 8);
  928. Assert.AreEqual(h, 9);
  929. Assert.AreEqual(i, 10);
  930. Assert.AreEqual(j, 11);
  931. Assert.AreEqual(k, 12);
  932. Assert.AreEqual(l, 13);
  933. Assert.AreEqual(m, 14);
  934. Assert.AreEqual(n, 15);
  935. cb(x);
  936. return x;
  937. };
  938. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 1; };
  939. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().ToArray();
  940. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  941. }
  942. [TestMethod]
  943. public void FromAsyncPatternAction14()
  944. {
  945. var x = new Result();
  946. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, _) =>
  947. {
  948. Assert.AreEqual(a, 2);
  949. Assert.AreEqual(b, 3);
  950. Assert.AreEqual(c, 4);
  951. Assert.AreEqual(d, 5);
  952. Assert.AreEqual(e, 6);
  953. Assert.AreEqual(f, 7);
  954. Assert.AreEqual(g, 8);
  955. Assert.AreEqual(h, 9);
  956. Assert.AreEqual(i, 10);
  957. Assert.AreEqual(j, 11);
  958. Assert.AreEqual(k, 12);
  959. Assert.AreEqual(l, 13);
  960. Assert.AreEqual(m, 14);
  961. Assert.AreEqual(n, 15);
  962. cb(x);
  963. return x;
  964. };
  965. Action<IAsyncResult> end = iar => { Assert.AreSame(x, iar); };
  966. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).ToEnumerable().ToArray();
  967. Assert.IsTrue(res.SequenceEqual(new[] { new Unit() }));
  968. }
  969. [TestMethod]
  970. public void FromAsyncPattern14_Error()
  971. {
  972. var x = new Result();
  973. var ex = new Exception();
  974. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, o) => { cb(x); return x; };
  975. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); throw ex; };
  976. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().ToArray();
  977. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  978. }
  979. [TestMethod]
  980. public void FromAsyncPattern14_ErrorBegin()
  981. {
  982. var x = new Result();
  983. var ex = new Exception();
  984. Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, cb, o) => { cb(x); throw ex; };
  985. Func<IAsyncResult, int> end = iar => { Assert.AreSame(x, iar); return 0; };
  986. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().ToArray();
  987. Assert.IsTrue(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  988. }
  989. #endif
  990. class Result : IAsyncResult
  991. {
  992. public object AsyncState
  993. {
  994. get { throw new NotImplementedException(); }
  995. }
  996. public System.Threading.WaitHandle AsyncWaitHandle
  997. {
  998. get { throw new NotImplementedException(); }
  999. }
  1000. public bool CompletedSynchronously
  1001. {
  1002. get { throw new NotImplementedException(); }
  1003. }
  1004. public bool IsCompleted
  1005. {
  1006. get { throw new NotImplementedException(); }
  1007. }
  1008. }
  1009. #endregion
  1010. #region Start
  1011. [TestMethod]
  1012. public void Start_ArgumentChecking()
  1013. {
  1014. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Start(null));
  1015. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Start<int>((Func<int>)null));
  1016. var someScheduler = new TestScheduler();
  1017. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Start(null, someScheduler));
  1018. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Start<int>(null, someScheduler));
  1019. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Start(() => { }, null));
  1020. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Start<int>(() => 1, null));
  1021. }
  1022. [TestMethod]
  1023. public void Start_Action()
  1024. {
  1025. bool done = false;
  1026. Assert.IsTrue(Observable.Start(() => { done = true; }).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  1027. Assert.IsTrue(done, "done");
  1028. }
  1029. [TestMethod]
  1030. public void Start_Action2()
  1031. {
  1032. var scheduler = new TestScheduler();
  1033. bool done = false;
  1034. var res = scheduler.Start(() =>
  1035. Observable.Start(() => { done = true; }, scheduler)
  1036. );
  1037. res.Messages.AssertEqual(
  1038. OnNext(200, new Unit()),
  1039. OnCompleted<Unit>(200)
  1040. );
  1041. Assert.IsTrue(done, "done");
  1042. }
  1043. [TestMethod]
  1044. public void Start_ActionError()
  1045. {
  1046. var ex = new Exception();
  1047. var res = Observable.Start(() => { throw ex; }).Materialize().ToEnumerable();
  1048. Assert.IsTrue(res.SequenceEqual(new[] {
  1049. Notification.CreateOnError<Unit>(ex)
  1050. }));
  1051. }
  1052. [TestMethod]
  1053. public void Start_Func()
  1054. {
  1055. var res = Observable.Start(() => 1).ToEnumerable();
  1056. Assert.IsTrue(res.SequenceEqual(new[] {
  1057. 1
  1058. }));
  1059. }
  1060. [TestMethod]
  1061. public void Start_Func2()
  1062. {
  1063. var scheduler = new TestScheduler();
  1064. var res = scheduler.Start(() =>
  1065. Observable.Start(() => 1, scheduler)
  1066. );
  1067. res.Messages.AssertEqual(
  1068. OnNext(200, 1),
  1069. OnCompleted<int>(200)
  1070. );
  1071. }
  1072. [TestMethod]
  1073. public void Start_FuncError()
  1074. {
  1075. var ex = new Exception();
  1076. var res = Observable.Start<int>(() => { throw ex; }).Materialize().ToEnumerable();
  1077. Assert.IsTrue(res.SequenceEqual(new[] {
  1078. Notification.CreateOnError<int>(ex)
  1079. }));
  1080. }
  1081. #endregion
  1082. #region StartAsync
  1083. #if !NO_TPL
  1084. #region Func
  1085. [TestMethod]
  1086. public void StartAsync_Func_ArgumentChecking()
  1087. {
  1088. var s = Scheduler.Immediate;
  1089. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync<int>(default(Func<Task<int>>)));
  1090. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync<int>(default(Func<CancellationToken, Task<int>>)));
  1091. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync<int>(default(Func<Task<int>>), s));
  1092. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync<int>(default(Func<CancellationToken, Task<int>>), s));
  1093. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync<int>(() => doneTask, default(IScheduler)));
  1094. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync<int>(ct => doneTask, default(IScheduler)));
  1095. }
  1096. [TestMethod]
  1097. public void StartAsync_Func_Success()
  1098. {
  1099. var n = 42;
  1100. var i = 0;
  1101. var xs = Observable.StartAsync(() =>
  1102. {
  1103. i++;
  1104. return Task.Factory.StartNew(() => n);
  1105. });
  1106. Assert.AreEqual(n, xs.Single());
  1107. Assert.AreEqual(1, i);
  1108. Assert.AreEqual(n, xs.Single());
  1109. Assert.AreEqual(1, i);
  1110. }
  1111. [TestMethod]
  1112. public void StartAsync_Func_Throw_Synchronous()
  1113. {
  1114. var ex = new Exception();
  1115. var xs = Observable.StartAsync<int>(() =>
  1116. {
  1117. throw ex;
  1118. });
  1119. ReactiveAssert.Throws(ex, () => xs.Single());
  1120. }
  1121. [TestMethod]
  1122. public void StartAsync_Func_Throw_Asynchronous()
  1123. {
  1124. var ex = new Exception();
  1125. var xs = Observable.StartAsync<int>(() =>
  1126. Task.Factory.StartNew<int>(() =>
  1127. {
  1128. throw ex;
  1129. })
  1130. );
  1131. ReactiveAssert.Throws(ex, () => xs.Single());
  1132. }
  1133. [TestMethod]
  1134. public void StartAsync_FuncWithCancel_Success()
  1135. {
  1136. var n = 42;
  1137. var i = 0;
  1138. var xs = Observable.StartAsync(ct =>
  1139. {
  1140. i++;
  1141. return Task.Factory.StartNew(() => n);
  1142. });
  1143. Assert.AreEqual(n, xs.Single());
  1144. Assert.AreEqual(1, i);
  1145. Assert.AreEqual(n, xs.Single());
  1146. Assert.AreEqual(1, i);
  1147. }
  1148. [TestMethod]
  1149. public void StartAsync_FuncWithCancel_Throw_Synchronous()
  1150. {
  1151. var ex = new Exception();
  1152. var xs = Observable.StartAsync<int>(ct =>
  1153. {
  1154. throw ex;
  1155. });
  1156. ReactiveAssert.Throws(ex, () => xs.Single());
  1157. }
  1158. [TestMethod]
  1159. public void StartAsync_FuncWithCancel_Throw_Asynchronous()
  1160. {
  1161. var ex = new Exception();
  1162. var xs = Observable.StartAsync<int>(ct =>
  1163. Task.Factory.StartNew<int>(() => { throw ex; })
  1164. );
  1165. ReactiveAssert.Throws(ex, () => xs.Single());
  1166. }
  1167. [TestMethod]
  1168. public void StartAsync_FuncWithCancel_Cancel()
  1169. {
  1170. var N = 10;
  1171. for (int n = 0; n < N; n++)
  1172. {
  1173. var e = new ManualResetEvent(false);
  1174. var f = new ManualResetEvent(false);
  1175. var t = default(Task<int>);
  1176. var xs = Observable.StartAsync(ct =>
  1177. t = Task.Factory.StartNew<int>(() =>
  1178. {
  1179. try
  1180. {
  1181. e.Set();
  1182. while (true)
  1183. ct.ThrowIfCancellationRequested();
  1184. }
  1185. finally
  1186. {
  1187. f.Set();
  1188. }
  1189. })
  1190. );
  1191. e.WaitOne();
  1192. var d = xs.Subscribe(_ => { });
  1193. d.Dispose();
  1194. f.WaitOne();
  1195. while (!t.IsCompleted)
  1196. ;
  1197. ReactiveAssert.Throws<OperationCanceledException>(() => xs.Single());
  1198. }
  1199. }
  1200. #if DESKTOPCLR
  1201. [TestMethod]
  1202. public void StartAsync_Func_Scheduler1()
  1203. {
  1204. var tcs = new TaskCompletionSource<int>();
  1205. var e = new ManualResetEvent(false);
  1206. var x = default(int);
  1207. var t = default(int);
  1208. var xs = Observable.StartAsync(() => tcs.Task, Scheduler.Immediate);
  1209. xs.Subscribe(res =>
  1210. {
  1211. x = res;
  1212. t = Thread.CurrentThread.ManagedThreadId;
  1213. e.Set();
  1214. });
  1215. tcs.SetResult(42);
  1216. e.WaitOne();
  1217. Assert.AreEqual(42, x);
  1218. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, t);
  1219. }
  1220. [TestMethod]
  1221. public void StartAsync_Func_Scheduler2()
  1222. {
  1223. var tcs = new TaskCompletionSource<int>();
  1224. var e = new ManualResetEvent(false);
  1225. var x = default(int);
  1226. var t = default(int);
  1227. var xs = Observable.StartAsync(ct => tcs.Task, Scheduler.Immediate);
  1228. xs.Subscribe(res =>
  1229. {
  1230. x = res;
  1231. t = Thread.CurrentThread.ManagedThreadId;
  1232. e.Set();
  1233. });
  1234. tcs.SetResult(42);
  1235. e.WaitOne();
  1236. Assert.AreEqual(42, x);
  1237. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, t);
  1238. }
  1239. #endif
  1240. #endregion
  1241. #region Action
  1242. [TestMethod]
  1243. public void StartAsync_Action_ArgumentChecking()
  1244. {
  1245. var s = Scheduler.Immediate;
  1246. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync(default(Func<Task>)));
  1247. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync(default(Func<CancellationToken, Task>)));
  1248. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync(default(Func<Task>), s));
  1249. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync(default(Func<CancellationToken, Task>), s));
  1250. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync(() => (Task)doneTask, default(IScheduler)));
  1251. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.StartAsync(ct => (Task)doneTask, default(IScheduler)));
  1252. }
  1253. [TestMethod]
  1254. public void StartAsync_Action_Success()
  1255. {
  1256. var i = 0;
  1257. var xs = Observable.StartAsync(() =>
  1258. {
  1259. i++;
  1260. return Task.Factory.StartNew(() => { });
  1261. });
  1262. Assert.AreEqual(Unit.Default, xs.Single());
  1263. Assert.AreEqual(1, i);
  1264. Assert.AreEqual(Unit.Default, xs.Single());
  1265. Assert.AreEqual(1, i);
  1266. }
  1267. [TestMethod]
  1268. public void StartAsync_Action_Throw_Synchronous()
  1269. {
  1270. var ex = new Exception();
  1271. var xs = Observable.StartAsync(() =>
  1272. {
  1273. throw ex;
  1274. });
  1275. ReactiveAssert.Throws(ex, () => xs.Single());
  1276. }
  1277. [TestMethod]
  1278. public void StartAsync_Action_Throw_Asynchronous()
  1279. {
  1280. var ex = new Exception();
  1281. var xs = Observable.StartAsync(() =>
  1282. Task.Factory.StartNew(() => { throw ex; })
  1283. );
  1284. ReactiveAssert.Throws(ex, () => xs.Single());
  1285. }
  1286. [TestMethod]
  1287. public void StartAsync_ActionWithCancel_Success()
  1288. {
  1289. var i = 0;
  1290. var xs = Observable.StartAsync(ct =>
  1291. {
  1292. i++;
  1293. return Task.Factory.StartNew(() => { });
  1294. });
  1295. Assert.AreEqual(Unit.Default, xs.Single());
  1296. Assert.AreEqual(1, i);
  1297. Assert.AreEqual(Unit.Default, xs.Single());
  1298. Assert.AreEqual(1, i);
  1299. }
  1300. [TestMethod]
  1301. public void StartAsync_ActionWithCancel_Throw_Synchronous()
  1302. {
  1303. var ex = new Exception();
  1304. var xs = Observable.StartAsync(ct =>
  1305. {
  1306. throw ex;
  1307. });
  1308. ReactiveAssert.Throws(ex, () => xs.Single());
  1309. }
  1310. [TestMethod]
  1311. public void StartAsync_ActionWithCancel_Throw_Asynchronous()
  1312. {
  1313. var ex = new Exception();
  1314. var xs = Observable.StartAsync(ct =>
  1315. Task.Factory.StartNew(() => { throw ex; })
  1316. );
  1317. ReactiveAssert.Throws(ex, () => xs.Single());
  1318. }
  1319. [TestMethod]
  1320. public void StartAsync_ActionWithCancel_Cancel()
  1321. {
  1322. var N = 10;
  1323. for (int n = 0; n < N; n++)
  1324. {
  1325. var e = new ManualResetEvent(false);
  1326. var f = new ManualResetEvent(false);
  1327. var t = default(Task);
  1328. var xs = Observable.StartAsync(ct =>
  1329. t = Task.Factory.StartNew(() =>
  1330. {
  1331. try
  1332. {
  1333. e.Set();
  1334. while (true)
  1335. ct.ThrowIfCancellationRequested();
  1336. }
  1337. finally
  1338. {
  1339. f.Set();
  1340. }
  1341. })
  1342. );
  1343. e.WaitOne();
  1344. var d = xs.Subscribe(_ => { });
  1345. d.Dispose();
  1346. f.WaitOne();
  1347. while (!t.IsCompleted)
  1348. ;
  1349. ReactiveAssert.Throws<OperationCanceledException>(() => xs.Single());
  1350. }
  1351. }
  1352. #if DESKTOPCLR
  1353. [TestMethod]
  1354. public void StartAsync_Action_Scheduler1()
  1355. {
  1356. var tcs = new TaskCompletionSource<int>();
  1357. var e = new ManualResetEvent(false);
  1358. var t = default(int);
  1359. var xs = Observable.StartAsync(() => (Task)tcs.Task, Scheduler.Immediate);
  1360. xs.Subscribe(res =>
  1361. {
  1362. t = Thread.CurrentThread.ManagedThreadId;
  1363. e.Set();
  1364. });
  1365. tcs.SetResult(42);
  1366. e.WaitOne();
  1367. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, t);
  1368. }
  1369. [TestMethod]
  1370. public void StartAsync_Action_Scheduler2()
  1371. {
  1372. var tcs = new TaskCompletionSource<int>();
  1373. var e = new ManualResetEvent(false);
  1374. var t = default(int);
  1375. var xs = Observable.StartAsync(ct => (Task)tcs.Task, Scheduler.Immediate);
  1376. xs.Subscribe(res =>
  1377. {
  1378. t = Thread.CurrentThread.ManagedThreadId;
  1379. e.Set();
  1380. });
  1381. tcs.SetResult(42);
  1382. e.WaitOne();
  1383. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, t);
  1384. }
  1385. #endif
  1386. #endregion
  1387. #endif
  1388. #endregion
  1389. #region FromAsync
  1390. #if !NO_TPL
  1391. #region Func
  1392. [TestMethod]
  1393. public void FromAsync_Func_ArgumentChecking()
  1394. {
  1395. var s = Scheduler.Immediate;
  1396. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync<int>(default(Func<Task<int>>)));
  1397. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync<int>(default(Func<CancellationToken, Task<int>>)));
  1398. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync<int>(default(Func<Task<int>>), s));
  1399. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync<int>(() => doneTask, default(IScheduler)));
  1400. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync<int>(default(Func<CancellationToken, Task<int>>), s));
  1401. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync<int>(ct => doneTask, default(IScheduler)));
  1402. }
  1403. [TestMethod]
  1404. public void FromAsync_Func_Success()
  1405. {
  1406. var n = 42;
  1407. var i = 0;
  1408. var xs = Observable.FromAsync(() =>
  1409. {
  1410. i++;
  1411. return Task.Factory.StartNew(() => n);
  1412. });
  1413. Assert.AreEqual(n, xs.Single());
  1414. Assert.AreEqual(1, i);
  1415. Assert.AreEqual(n, xs.Single());
  1416. Assert.AreEqual(2, i);
  1417. }
  1418. [TestMethod]
  1419. public void FromAsync_Func_Throw_Synchronous()
  1420. {
  1421. var ex = new Exception();
  1422. var xs = Observable.FromAsync<int>(() =>
  1423. {
  1424. throw ex;
  1425. });
  1426. ReactiveAssert.Throws(ex, () => xs.Single());
  1427. }
  1428. [TestMethod]
  1429. public void FromAsync_Func_Throw_Asynchronous()
  1430. {
  1431. var ex = new Exception();
  1432. var xs = Observable.FromAsync<int>(() =>
  1433. Task.Factory.StartNew<int>(() => { throw ex; })
  1434. );
  1435. ReactiveAssert.Throws(ex, () => xs.Single());
  1436. }
  1437. [TestMethod]
  1438. public void FromAsync_FuncWithCancel_Success()
  1439. {
  1440. var n = 42;
  1441. var i = 0;
  1442. var xs = Observable.FromAsync(ct =>
  1443. {
  1444. i++;
  1445. return Task.Factory.StartNew(() => n);
  1446. });
  1447. Assert.AreEqual(n, xs.Single());
  1448. Assert.AreEqual(1, i);
  1449. Assert.AreEqual(n, xs.Single());
  1450. Assert.AreEqual(2, i);
  1451. }
  1452. [TestMethod]
  1453. public void FromAsync_FuncWithCancel_Throw_Synchronous()
  1454. {
  1455. var ex = new Exception();
  1456. var xs = Observable.FromAsync<int>(ct =>
  1457. {
  1458. throw ex;
  1459. });
  1460. ReactiveAssert.Throws(ex, () => xs.Single());
  1461. }
  1462. [TestMethod]
  1463. public void FromAsync_FuncWithCancel_Throw_Asynchronous()
  1464. {
  1465. var ex = new Exception();
  1466. var xs = Observable.FromAsync<int>(ct =>
  1467. Task.Factory.StartNew<int>(() => { throw ex; })
  1468. );
  1469. ReactiveAssert.Throws(ex, () => xs.Single());
  1470. }
  1471. [TestMethod]
  1472. public void FromAsync_FuncWithCancel_Cancel()
  1473. {
  1474. var e = new ManualResetEvent(false);
  1475. var f = new ManualResetEvent(false);
  1476. var t = default(Task<int>);
  1477. var xs = Observable.FromAsync(ct =>
  1478. t = Task.Factory.StartNew<int>(() =>
  1479. {
  1480. try
  1481. {
  1482. e.Set();
  1483. while (true)
  1484. ct.ThrowIfCancellationRequested();
  1485. }
  1486. finally
  1487. {
  1488. f.Set();
  1489. }
  1490. })
  1491. );
  1492. var d = xs.Subscribe(_ => { });
  1493. e.WaitOne();
  1494. d.Dispose();
  1495. f.WaitOne();
  1496. while (!t.IsCompleted)
  1497. ;
  1498. }
  1499. #if DESKTOPCLR
  1500. [TestMethod]
  1501. public void FromAsync_Func_Scheduler1()
  1502. {
  1503. var e = new ManualResetEvent(false);
  1504. var x = default(int);
  1505. var t = default(int);
  1506. var tcs = new TaskCompletionSource<int>();
  1507. var xs = Observable.FromAsync(() => tcs.Task, Scheduler.Immediate);
  1508. xs.Subscribe(res =>
  1509. {
  1510. x = res;
  1511. t = Thread.CurrentThread.ManagedThreadId;
  1512. e.Set();
  1513. });
  1514. tcs.SetResult(42);
  1515. e.WaitOne();
  1516. Assert.AreEqual(42, x);
  1517. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, t);
  1518. }
  1519. [TestMethod]
  1520. public void FromAsync_Func_Scheduler2()
  1521. {
  1522. var e = new ManualResetEvent(false);
  1523. var x = default(int);
  1524. var t = default(int);
  1525. var tcs = new TaskCompletionSource<int>();
  1526. var xs = Observable.FromAsync(ct => tcs.Task, Scheduler.Immediate);
  1527. xs.Subscribe(res =>
  1528. {
  1529. x = res;
  1530. t = Thread.CurrentThread.ManagedThreadId;
  1531. e.Set();
  1532. });
  1533. tcs.SetResult(42);
  1534. e.WaitOne();
  1535. Assert.AreEqual(42, x);
  1536. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, t);
  1537. }
  1538. #endif
  1539. #endregion
  1540. #region Action
  1541. [TestMethod]
  1542. public void FromAsync_Action_ArgumentChecking()
  1543. {
  1544. var s = Scheduler.Immediate;
  1545. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync(default(Func<Task>)));
  1546. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync(default(Func<CancellationToken, Task>)));
  1547. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync(default(Func<Task>), s));
  1548. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync(() => (Task)doneTask, default(IScheduler)));
  1549. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync(default(Func<CancellationToken, Task>), s));
  1550. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsync(ct => (Task)doneTask, default(IScheduler)));
  1551. }
  1552. [TestMethod]
  1553. public void FromAsync_Action_Success()
  1554. {
  1555. var i = 0;
  1556. var xs = Observable.FromAsync(() =>
  1557. {
  1558. i++;
  1559. return Task.Factory.StartNew(() => { });
  1560. });
  1561. Assert.AreEqual(Unit.Default, xs.Single());
  1562. Assert.AreEqual(1, i);
  1563. Assert.AreEqual(Unit.Default, xs.Single());
  1564. Assert.AreEqual(2, i);
  1565. }
  1566. [TestMethod]
  1567. public void FromAsync_Action_Throw_Synchronous()
  1568. {
  1569. var ex = new Exception();
  1570. var xs = Observable.FromAsync(() =>
  1571. {
  1572. throw ex;
  1573. });
  1574. ReactiveAssert.Throws(ex, () => xs.Single());
  1575. }
  1576. [TestMethod]
  1577. public void FromAsync_Action_Throw_Asynchronous()
  1578. {
  1579. var ex = new Exception();
  1580. var xs = Observable.FromAsync(() =>
  1581. Task.Factory.StartNew(() => { throw ex; })
  1582. );
  1583. ReactiveAssert.Throws(ex, () => xs.Single());
  1584. }
  1585. [TestMethod]
  1586. public void FromAsync_ActionWithCancel_Success()
  1587. {
  1588. var i = 0;
  1589. var xs = Observable.FromAsync(ct =>
  1590. {
  1591. i++;
  1592. return Task.Factory.StartNew(() => { });
  1593. });
  1594. Assert.AreEqual(Unit.Default, xs.Single());
  1595. Assert.AreEqual(1, i);
  1596. Assert.AreEqual(Unit.Default, xs.Single());
  1597. Assert.AreEqual(2, i);
  1598. }
  1599. [TestMethod]
  1600. public void FromAsync_ActionWithCancel_Throw_Synchronous()
  1601. {
  1602. var ex = new Exception();
  1603. var xs = Observable.FromAsync(ct =>
  1604. {
  1605. throw ex;
  1606. });
  1607. ReactiveAssert.Throws(ex, () => xs.Single());
  1608. }
  1609. [TestMethod]
  1610. public void FromAsync_ActionWithCancel_Throw_Asynchronous()
  1611. {
  1612. var ex = new Exception();
  1613. var xs = Observable.FromAsync(ct =>
  1614. Task.Factory.StartNew(() => { throw ex; })
  1615. );
  1616. ReactiveAssert.Throws(ex, () => xs.Single());
  1617. }
  1618. [TestMethod]
  1619. public void FromAsync_ActionWithCancel_Cancel()
  1620. {
  1621. var e = new ManualResetEvent(false);
  1622. var f = new ManualResetEvent(false);
  1623. var t = default(Task);
  1624. var xs = Observable.FromAsync(ct =>
  1625. t = Task.Factory.StartNew(() =>
  1626. {
  1627. try
  1628. {
  1629. e.Set();
  1630. while (true)
  1631. ct.ThrowIfCancellationRequested();
  1632. }
  1633. finally
  1634. {
  1635. f.Set();
  1636. }
  1637. })
  1638. );
  1639. var d = xs.Subscribe(_ => { });
  1640. e.WaitOne();
  1641. d.Dispose();
  1642. f.WaitOne();
  1643. while (!t.IsCompleted)
  1644. ;
  1645. }
  1646. #if DESKTOPCLR
  1647. [TestMethod]
  1648. public void FromAsync_Action_Scheduler1()
  1649. {
  1650. var e = new ManualResetEvent(false);
  1651. var t = default(int);
  1652. var tcs = new TaskCompletionSource<int>();
  1653. var xs = Observable.FromAsync(() => (Task)tcs.Task, Scheduler.Immediate);
  1654. xs.Subscribe(res =>
  1655. {
  1656. t = Thread.CurrentThread.ManagedThreadId;
  1657. e.Set();
  1658. });
  1659. tcs.SetResult(42);
  1660. e.WaitOne();
  1661. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, t);
  1662. }
  1663. [TestMethod]
  1664. public void FromAsync_Action_Scheduler2()
  1665. {
  1666. var e = new ManualResetEvent(false);
  1667. var t = default(int);
  1668. var tcs = new TaskCompletionSource<int>();
  1669. var xs = Observable.FromAsync(ct => (Task)tcs.Task, Scheduler.Immediate);
  1670. xs.Subscribe(res =>
  1671. {
  1672. t = Thread.CurrentThread.ManagedThreadId;
  1673. e.Set();
  1674. });
  1675. tcs.SetResult(42);
  1676. e.WaitOne();
  1677. Assert.AreEqual(Thread.CurrentThread.ManagedThreadId, t);
  1678. }
  1679. #endif
  1680. #endregion
  1681. #endif
  1682. #endregion
  1683. #region ToAsync
  1684. [TestMethod]
  1685. public void ToAsync_ArgumentChecking()
  1686. {
  1687. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync(default(Action)));
  1688. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int>(default(Action<int>)));
  1689. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int>(default(Func<int>)));
  1690. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int>(default(Action<int, int>)));
  1691. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int>(default(Func<int, int>)));
  1692. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int>(default(Action<int, int, int>)));
  1693. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int>(default(Func<int, int, int>)));
  1694. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int>(default(Action<int, int, int, int>)));
  1695. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int>(default(Func<int, int, int, int>)));
  1696. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int>(default(Func<int, int, int, int, int>)));
  1697. #if !NO_LARGEARITY
  1698. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int>(default(Action<int, int, int, int, int>)));
  1699. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int>(default(Action<int, int, int, int, int, int>)));
  1700. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int>(default(Func<int, int, int, int, int, int>)));
  1701. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int>)));
  1702. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int>)));
  1703. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int>)));
  1704. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int>)));
  1705. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int>)));
  1706. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int>)));
  1707. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int>)));
  1708. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int>)));
  1709. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int>)));
  1710. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int>)));
  1711. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int>)));
  1712. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int>)));
  1713. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1714. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1715. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1716. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1717. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1718. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1719. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1720. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1721. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  1722. #endif
  1723. var someScheduler = new TestScheduler();
  1724. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync(default(Action), someScheduler));
  1725. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int>(default(Action<int>), someScheduler));
  1726. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int>(default(Func<int>), someScheduler));
  1727. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int>(default(Action<int, int>), someScheduler));
  1728. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int>(default(Func<int, int>), someScheduler));
  1729. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int>(default(Action<int, int, int>), someScheduler));
  1730. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int>(default(Func<int, int, int>), someScheduler));
  1731. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int>(default(Action<int, int, int, int>), someScheduler));
  1732. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int>(default(Func<int, int, int, int>), someScheduler));
  1733. #if !NO_LARGEARITY
  1734. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int>(default(Func<int, int, int, int, int>), someScheduler));
  1735. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int>(default(Action<int, int, int, int, int>), someScheduler));
  1736. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int>(default(Action<int, int, int, int, int, int>), someScheduler));
  1737. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int>(default(Func<int, int, int, int, int, int>), someScheduler));
  1738. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int>), someScheduler));
  1739. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int>), someScheduler));
  1740. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int>), someScheduler));
  1741. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int>), someScheduler));
  1742. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int>), someScheduler));
  1743. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int>), someScheduler));
  1744. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1745. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1746. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1747. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1748. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1749. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1750. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1751. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1752. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1753. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1754. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1755. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1756. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Action<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1757. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1758. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>), someScheduler));
  1759. #endif
  1760. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync(() => { }, null));
  1761. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int>(a => { }, null));
  1762. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int>(() => 1, null));
  1763. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int>((a, b) => { }, null));
  1764. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int>(a => 1, null));
  1765. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int>((a, b, c) => { }, null));
  1766. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int>((a, b) => 1, null));
  1767. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int>((a, b, c, d) => { }, null));
  1768. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int>((a, b, c) => 1, null));
  1769. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int>((a, b, c, d) => 1, null));
  1770. #if !NO_LARGEARITY
  1771. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int>((a, b, c, d, e) => { }, null));
  1772. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int>((a, b, c, d, e, f) => { }, null));
  1773. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int>((a, b, c, d, e) => 1, null));
  1774. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int>((a, b, c, d, e, f, g) => { }, null));
  1775. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int>((a, b, c, d, e, f) => 1, null));
  1776. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h) => { }, null));
  1777. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g) => 1, null));
  1778. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i) => { }, null));
  1779. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h) => 1, null));
  1780. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j) => { }, null));
  1781. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i) => 1, null));
  1782. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k) => { }, null));
  1783. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j) => 1, null));
  1784. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l) => { }, null));
  1785. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k) => 1, null));
  1786. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m) => { }, null));
  1787. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l) => 1, null));
  1788. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n) => { }, null));
  1789. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m) => 1, null));
  1790. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) => { }, null));
  1791. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n) => 1, null));
  1792. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) => { }, null));
  1793. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) => 1, null));
  1794. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) => 1, null));
  1795. #endif
  1796. }
  1797. [TestMethod]
  1798. public void ToAsync0()
  1799. {
  1800. Assert.IsTrue(Observable.ToAsync<int>(() => 0)().ToEnumerable().SequenceEqual(new[] { 0 }));
  1801. Assert.IsTrue(Observable.ToAsync<int>(() => 0, Scheduler.Default)().ToEnumerable().SequenceEqual(new[] { 0 }));
  1802. }
  1803. [TestMethod]
  1804. public void ToAsync1()
  1805. {
  1806. Assert.IsTrue(Observable.ToAsync<int, int>(a => a)(1).ToEnumerable().SequenceEqual(new[] { 1 }));
  1807. Assert.IsTrue(Observable.ToAsync<int, int>(a => a, Scheduler.Default)(1).ToEnumerable().SequenceEqual(new[] { 1 }));
  1808. }
  1809. [TestMethod]
  1810. public void ToAsync2()
  1811. {
  1812. Assert.IsTrue(Observable.ToAsync<int, int, int>((a, b) => a + b)(1, 2).ToEnumerable().SequenceEqual(new[] { 1 + 2 }));
  1813. Assert.IsTrue(Observable.ToAsync<int, int, int>((a, b) => a + b, Scheduler.Default)(1, 2).ToEnumerable().SequenceEqual(new[] { 1 + 2 }));
  1814. }
  1815. [TestMethod]
  1816. public void ToAsync3()
  1817. {
  1818. Assert.IsTrue(Observable.ToAsync<int, int, int, int>((a, b, c) => a + b + c)(1, 2, 3).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 }));
  1819. Assert.IsTrue(Observable.ToAsync<int, int, int, int>((a, b, c) => a + b + c, Scheduler.Default)(1, 2, 3).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 }));
  1820. }
  1821. [TestMethod]
  1822. public void ToAsync4()
  1823. {
  1824. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int>((a, b, c, d) => a + b + c + d)(1, 2, 3, 4).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 }));
  1825. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int>((a, b, c, d) => a + b + c + d, Scheduler.Default)(1, 2, 3, 4).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 }));
  1826. }
  1827. #if !NO_LARGEARITY
  1828. [TestMethod]
  1829. public void ToAsync5()
  1830. {
  1831. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int>((a, b, c, d, e) => a + b + c + d + e)(1, 2, 3, 4, 5).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 }));
  1832. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int>((a, b, c, d, e) => a + b + c + d + e, Scheduler.Default)(1, 2, 3, 4, 5).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 }));
  1833. }
  1834. [TestMethod]
  1835. public void ToAsync6()
  1836. {
  1837. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int>((a, b, c, d, e, f) => a + b + c + d + e + f)(1, 2, 3, 4, 5, 6).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 }));
  1838. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int>((a, b, c, d, e, f) => a + b + c + d + e + f, Scheduler.Default)(1, 2, 3, 4, 5, 6).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 }));
  1839. }
  1840. [TestMethod]
  1841. public void ToAsync7()
  1842. {
  1843. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g) => a + b + c + d + e + f + g)(1, 2, 3, 4, 5, 6, 7).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 }));
  1844. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g) => a + b + c + d + e + f + g, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 }));
  1845. }
  1846. [TestMethod]
  1847. public void ToAsync8()
  1848. {
  1849. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h) => a + b + c + d + e + f + g + h)(1, 2, 3, 4, 5, 6, 7, 8).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 }));
  1850. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h) => a + b + c + d + e + f + g + h, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 }));
  1851. }
  1852. [TestMethod]
  1853. public void ToAsync9()
  1854. {
  1855. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i) => a + b + c + d + e + f + g + h + i)(1, 2, 3, 4, 5, 6, 7, 8, 9).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 }));
  1856. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i) => a + b + c + d + e + f + g + h + i, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 }));
  1857. }
  1858. [TestMethod]
  1859. public void ToAsync10()
  1860. {
  1861. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j) => a + b + c + d + e + f + g + h + i + j)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 }));
  1862. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j) => a + b + c + d + e + f + g + h + i + j, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 }));
  1863. }
  1864. [TestMethod]
  1865. public void ToAsync11()
  1866. {
  1867. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k) => a + b + c + d + e + f + g + h + i + j + k)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 }));
  1868. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k) => a + b + c + d + e + f + g + h + i + j + k, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 }));
  1869. }
  1870. [TestMethod]
  1871. public void ToAsync12()
  1872. {
  1873. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l) => a + b + c + d + e + f + g + h + i + j + k + l)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 }));
  1874. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l) => a + b + c + d + e + f + g + h + i + j + k + l, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 }));
  1875. }
  1876. [TestMethod]
  1877. public void ToAsync13()
  1878. {
  1879. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m) => a + b + c + d + e + f + g + h + i + j + k + l + m)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 }));
  1880. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m) => a + b + c + d + e + f + g + h + i + j + k + l + m, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 }));
  1881. }
  1882. [TestMethod]
  1883. public void ToAsync14()
  1884. {
  1885. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n) => a + b + c + d + e + f + g + h + i + j + k + l + m + n)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 }));
  1886. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n) => a + b + c + d + e + f + g + h + i + j + k + l + m + n, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 }));
  1887. }
  1888. [TestMethod]
  1889. public void ToAsync15()
  1890. {
  1891. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) => a + b + c + d + e + f + g + h + i + j + k + l + m + n + o)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 }));
  1892. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) => a + b + c + d + e + f + g + h + i + j + k + l + m + n + o, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 }));
  1893. }
  1894. [TestMethod]
  1895. public void ToAsync16()
  1896. {
  1897. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) => a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 }));
  1898. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) => a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).ToEnumerable().SequenceEqual(new[] { 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 }));
  1899. }
  1900. #endif
  1901. [TestMethod]
  1902. public void ToAsync_Error0()
  1903. {
  1904. var ex = new Exception();
  1905. Assert.IsTrue(Observable.ToAsync<int>(() => { throw ex; })().Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1906. }
  1907. [TestMethod]
  1908. public void ToAsync_Error1()
  1909. {
  1910. var ex = new Exception();
  1911. Assert.IsTrue(Observable.ToAsync<int, int>(a => { throw ex; })(1).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1912. }
  1913. [TestMethod]
  1914. public void ToAsync_Error2()
  1915. {
  1916. var ex = new Exception();
  1917. Assert.IsTrue(Observable.ToAsync<int, int, int>((a, b) => { throw ex; })(1, 2).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1918. }
  1919. [TestMethod]
  1920. public void ToAsync_Error3()
  1921. {
  1922. var ex = new Exception();
  1923. Assert.IsTrue(Observable.ToAsync<int, int, int, int>((a, b, c) => { throw ex; })(1, 2, 3).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1924. }
  1925. [TestMethod]
  1926. public void ToAsync_Error4()
  1927. {
  1928. var ex = new Exception();
  1929. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int>((a, b, c, d) => { throw ex; })(1, 2, 3, 4).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1930. }
  1931. #if !NO_LARGEARITY
  1932. [TestMethod]
  1933. public void ToAsync_Error5()
  1934. {
  1935. var ex = new Exception();
  1936. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int>((a, b, c, d, e) => { throw ex; })(1, 2, 3, 4, 5).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1937. }
  1938. [TestMethod]
  1939. public void ToAsync_Error6()
  1940. {
  1941. var ex = new Exception();
  1942. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int>((a, b, c, d, e, f) => { throw ex; })(1, 2, 3, 4, 5, 6).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1943. }
  1944. [TestMethod]
  1945. public void ToAsync_Error7()
  1946. {
  1947. var ex = new Exception();
  1948. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g) => { throw ex; })(1, 2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1949. }
  1950. [TestMethod]
  1951. public void ToAsync_Error8()
  1952. {
  1953. var ex = new Exception();
  1954. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1955. }
  1956. [TestMethod]
  1957. public void ToAsync_Error9()
  1958. {
  1959. var ex = new Exception();
  1960. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1961. }
  1962. [TestMethod]
  1963. public void ToAsync_Error10()
  1964. {
  1965. var ex = new Exception();
  1966. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1967. }
  1968. [TestMethod]
  1969. public void ToAsync_Error11()
  1970. {
  1971. var ex = new Exception();
  1972. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1973. }
  1974. [TestMethod]
  1975. public void ToAsync_Error12()
  1976. {
  1977. var ex = new Exception();
  1978. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1979. }
  1980. [TestMethod]
  1981. public void ToAsync_Error13()
  1982. {
  1983. var ex = new Exception();
  1984. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1985. }
  1986. [TestMethod]
  1987. public void ToAsync_Error14()
  1988. {
  1989. var ex = new Exception();
  1990. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1991. }
  1992. [TestMethod]
  1993. public void ToAsync_Error15()
  1994. {
  1995. var ex = new Exception();
  1996. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  1997. }
  1998. [TestMethod]
  1999. public void ToAsync_Error16()
  2000. {
  2001. var ex = new Exception();
  2002. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) => { throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).Materialize().ToEnumerable().SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  2003. }
  2004. #endif
  2005. [TestMethod]
  2006. public void ToAsyncAction0()
  2007. {
  2008. bool hasRun = false;
  2009. Assert.IsTrue(Observable.ToAsync(() => { hasRun = true; })().ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2010. Assert.IsTrue(Observable.ToAsync(() => { hasRun = true; }, Scheduler.Default)().ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2011. Assert.IsTrue(hasRun, "has run");
  2012. }
  2013. [TestMethod]
  2014. public void ToAsyncActionError0()
  2015. {
  2016. var ex = new Exception();
  2017. Assert.IsTrue(Observable.ToAsync(() => { throw ex; })().Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2018. }
  2019. [TestMethod]
  2020. public void ToAsyncAction1()
  2021. {
  2022. bool hasRun = false;
  2023. Assert.IsTrue(Observable.ToAsync<int>(a => { Assert.AreEqual(1, a); hasRun = true; })(1).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2024. Assert.IsTrue(Observable.ToAsync<int>(a => { Assert.AreEqual(1, a); hasRun = true; }, Scheduler.Default)(1).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2025. Assert.IsTrue(hasRun, "has run");
  2026. }
  2027. [TestMethod]
  2028. public void ToAsyncActionError1()
  2029. {
  2030. var ex = new Exception();
  2031. Assert.IsTrue(Observable.ToAsync<int>(a => { Assert.AreEqual(1, a); throw ex; })(1).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2032. }
  2033. [TestMethod]
  2034. public void ToAsyncAction2()
  2035. {
  2036. bool hasRun = false;
  2037. Assert.IsTrue(Observable.ToAsync<int, int>((a, b) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); hasRun = true; })(1, 2).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2038. Assert.IsTrue(Observable.ToAsync<int, int>((a, b) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); hasRun = true; }, Scheduler.Default)(1, 2).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2039. Assert.IsTrue(hasRun, "has run");
  2040. }
  2041. [TestMethod]
  2042. public void ToAsyncActionError2()
  2043. {
  2044. var ex = new Exception();
  2045. Assert.IsTrue(Observable.ToAsync<int, int>((a, b) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); throw ex; })(1, 2).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2046. }
  2047. [TestMethod]
  2048. public void ToAsyncAction3()
  2049. {
  2050. bool hasRun = false;
  2051. Assert.IsTrue(Observable.ToAsync<int, int, int>((a, b, c) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); hasRun = true; })(1, 2, 3).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2052. Assert.IsTrue(Observable.ToAsync<int, int, int>((a, b, c) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); hasRun = true; }, Scheduler.Default)(1, 2, 3).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2053. Assert.IsTrue(hasRun, "has run");
  2054. }
  2055. [TestMethod]
  2056. public void ToAsyncActionError3()
  2057. {
  2058. var ex = new Exception();
  2059. Assert.IsTrue(Observable.ToAsync<int, int, int>((a, b, c) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); throw ex; })(1, 2, 3).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2060. }
  2061. [TestMethod]
  2062. public void ToAsyncAction4()
  2063. {
  2064. bool hasRun = false;
  2065. Assert.IsTrue(Observable.ToAsync<int, int, int, int>((a, b, c, d) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); hasRun = true; })(1, 2, 3, 4).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2066. Assert.IsTrue(Observable.ToAsync<int, int, int, int>((a, b, c, d) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2067. Assert.IsTrue(hasRun, "has run");
  2068. }
  2069. [TestMethod]
  2070. public void ToAsyncActionError4()
  2071. {
  2072. var ex = new Exception();
  2073. Assert.IsTrue(Observable.ToAsync<int, int, int, int>((a, b, c, d) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); throw ex; })(1, 2, 3, 4).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2074. }
  2075. #if !NO_LARGEARITY
  2076. [TestMethod]
  2077. public void ToAsyncAction5()
  2078. {
  2079. bool hasRun = false;
  2080. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int>((a, b, c, d, e) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); hasRun = true; })(1, 2, 3, 4, 5).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2081. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int>((a, b, c, d, e) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2082. Assert.IsTrue(hasRun, "has run");
  2083. }
  2084. [TestMethod]
  2085. public void ToAsyncActionError5()
  2086. {
  2087. var ex = new Exception();
  2088. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int>((a, b, c, d, e) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); throw ex; })(1, 2, 3, 4, 5).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2089. }
  2090. [TestMethod]
  2091. public void ToAsyncAction6()
  2092. {
  2093. bool hasRun = false;
  2094. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int>((a, b, c, d, e, f) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); hasRun = true; })(1, 2, 3, 4, 5, 6).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2095. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int>((a, b, c, d, e, f) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2096. Assert.IsTrue(hasRun, "has run");
  2097. }
  2098. [TestMethod]
  2099. public void ToAsyncActionError6()
  2100. {
  2101. var ex = new Exception();
  2102. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int>((a, b, c, d, e, f) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); throw ex; })(1, 2, 3, 4, 5, 6).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2103. }
  2104. [TestMethod]
  2105. public void ToAsyncAction7()
  2106. {
  2107. bool hasRun = false;
  2108. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int>((a, b, c, d, e, f, g) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); hasRun = true; })(1, 2, 3, 4, 5, 6, 7).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2109. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int>((a, b, c, d, e, f, g) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2110. Assert.IsTrue(hasRun, "has run");
  2111. }
  2112. [TestMethod]
  2113. public void ToAsyncActionError7()
  2114. {
  2115. var ex = new Exception();
  2116. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int>((a, b, c, d, e, f, g) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); throw ex; })(1, 2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2117. }
  2118. [TestMethod]
  2119. public void ToAsyncAction8()
  2120. {
  2121. bool hasRun = false;
  2122. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2123. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2124. Assert.IsTrue(hasRun, "has run");
  2125. }
  2126. [TestMethod]
  2127. public void ToAsyncActionError8()
  2128. {
  2129. var ex = new Exception();
  2130. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2131. }
  2132. [TestMethod]
  2133. public void ToAsyncAction9()
  2134. {
  2135. bool hasRun = false;
  2136. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8, 9).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2137. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2138. Assert.IsTrue(hasRun, "has run");
  2139. }
  2140. [TestMethod]
  2141. public void ToAsyncActionError9()
  2142. {
  2143. var ex = new Exception();
  2144. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2145. }
  2146. [TestMethod]
  2147. public void ToAsyncAction10()
  2148. {
  2149. bool hasRun = false;
  2150. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2151. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2152. Assert.IsTrue(hasRun, "has run");
  2153. }
  2154. [TestMethod]
  2155. public void ToAsyncActionError10()
  2156. {
  2157. var ex = new Exception();
  2158. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2159. }
  2160. [TestMethod]
  2161. public void ToAsyncAction11()
  2162. {
  2163. bool hasRun = false;
  2164. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2165. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2166. Assert.IsTrue(hasRun, "has run");
  2167. }
  2168. [TestMethod]
  2169. public void ToAsyncActionError11()
  2170. {
  2171. var ex = new Exception();
  2172. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2173. }
  2174. [TestMethod]
  2175. public void ToAsyncAction12()
  2176. {
  2177. bool hasRun = false;
  2178. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2179. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2180. Assert.IsTrue(hasRun, "has run");
  2181. }
  2182. [TestMethod]
  2183. public void ToAsyncActionError12()
  2184. {
  2185. var ex = new Exception();
  2186. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2187. }
  2188. [TestMethod]
  2189. public void ToAsyncAction13()
  2190. {
  2191. bool hasRun = false;
  2192. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2193. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2194. Assert.IsTrue(hasRun, "has run");
  2195. }
  2196. [TestMethod]
  2197. public void ToAsyncActionError13()
  2198. {
  2199. var ex = new Exception();
  2200. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2201. }
  2202. [TestMethod]
  2203. public void ToAsyncAction14()
  2204. {
  2205. bool hasRun = false;
  2206. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2207. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2208. Assert.IsTrue(hasRun, "has run");
  2209. }
  2210. [TestMethod]
  2211. public void ToAsyncActionError14()
  2212. {
  2213. var ex = new Exception();
  2214. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2215. }
  2216. [TestMethod]
  2217. public void ToAsyncAction15()
  2218. {
  2219. bool hasRun = false;
  2220. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); Assert.AreEqual(15, o); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2221. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); Assert.AreEqual(15, o); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2222. Assert.IsTrue(hasRun, "has run");
  2223. }
  2224. [TestMethod]
  2225. public void ToAsyncActionError15()
  2226. {
  2227. var ex = new Exception();
  2228. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); Assert.AreEqual(15, o); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2229. }
  2230. [TestMethod]
  2231. public void ToAsyncAction16()
  2232. {
  2233. bool hasRun = false;
  2234. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); Assert.AreEqual(15, o); Assert.AreEqual(16, p); hasRun = true; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2235. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); Assert.AreEqual(15, o); Assert.AreEqual(16, p); hasRun = true; }, Scheduler.Default)(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).ToEnumerable().SequenceEqual(new[] { new Unit() }));
  2236. Assert.IsTrue(hasRun, "has run");
  2237. }
  2238. [TestMethod]
  2239. public void ToAsyncActionError16()
  2240. {
  2241. var ex = new Exception();
  2242. Assert.IsTrue(Observable.ToAsync<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) => { Assert.AreEqual(1, a); Assert.AreEqual(2, b); Assert.AreEqual(3, c); Assert.AreEqual(4, d); Assert.AreEqual(5, e); Assert.AreEqual(6, f); Assert.AreEqual(7, g); Assert.AreEqual(8, h); Assert.AreEqual(9, i); Assert.AreEqual(10, j); Assert.AreEqual(11, k); Assert.AreEqual(12, l); Assert.AreEqual(13, m); Assert.AreEqual(14, n); Assert.AreEqual(15, o); Assert.AreEqual(16, p); throw ex; })(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16).Materialize().ToEnumerable().SequenceEqual(new[] { Notification.CreateOnError<Unit>(ex) }));
  2243. }
  2244. #endif
  2245. #endregion
  2246. }
  2247. }