FromAsyncPatternTest.cs 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Linq;
  6. using System.Reactive;
  7. using System.Reactive.Linq;
  8. using System.Threading.Tasks;
  9. using Microsoft.Reactive.Testing;
  10. using Xunit;
  11. namespace ReactiveTests.Tests
  12. {
  13. #pragma warning disable IDE0039 // Use local function
  14. public class FromAsyncPatternTest : ReactiveTest
  15. {
  16. private readonly Task<int> _doneTask;
  17. public FromAsyncPatternTest()
  18. {
  19. var tcs = new TaskCompletionSource<int>();
  20. tcs.SetResult(42);
  21. _doneTask = tcs.Task;
  22. }
  23. [Fact]
  24. public void FromAsyncPattern_ArgumentChecking()
  25. {
  26. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern(null, iar => { }));
  27. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>(null, iar => 0));
  28. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>(null, iar => { }));
  29. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>(null, iar => 0));
  30. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>(null, iar => { }));
  31. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>(null, iar => 0));
  32. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>(null, iar => { }));
  33. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>(null, iar => 0));
  34. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>(null, iar => { }));
  35. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>(null, iar => 0));
  36. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>(null, iar => { }));
  37. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>(null, iar => 0));
  38. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>(null, iar => { }));
  39. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>(null, iar => 0));
  40. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>(null, iar => { }));
  41. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>(null, iar => 0));
  42. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>(null, iar => { }));
  43. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>(null, iar => 0));
  44. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int>(null, iar => { }));
  45. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  46. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int>(null, iar => { }));
  47. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, 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, int, int, int>(null, iar => { }));
  49. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, 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, int, int, int>(null, iar => { }));
  51. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, 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, int, int, int>(null, iar => { }));
  53. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, 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, int, int, int>(null, iar => { }));
  55. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>(null, iar => 0));
  56. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern((cb, o) => null, default));
  57. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>((cb, o) => null, default));
  58. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int>((a, cb, o) => null, default));
  59. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>((a, cb, o) => null, default));
  60. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int>((a, b, cb, o) => null, default));
  61. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>((a, b, cb, o) => null, default));
  62. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int>((a, b, c, cb, o) => null, default));
  63. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>((a, b, c, cb, o) => null, default));
  64. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int>((a, b, c, d, cb, o) => null, default));
  65. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>((a, b, c, d, cb, o) => null, default));
  66. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int>((a, b, c, d, e, cb, o) => null, default));
  67. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>((a, b, c, d, e, cb, o) => null, default));
  68. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int>((a, b, c, d, e, f, cb, o) => null, default));
  69. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>((a, b, c, d, e, f, cb, o) => null, default));
  70. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int>((a, b, c, d, e, f, g, cb, o) => null, default));
  71. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.FromAsyncPattern<int, int, int, int, int, int, int, int>((a, b, c, d, e, f, g, cb, o) => null, default));
  72. 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));
  73. 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));
  74. 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));
  75. 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));
  76. 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));
  77. 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));
  78. 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));
  79. 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));
  80. 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));
  81. 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));
  82. 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));
  83. 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));
  84. 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));
  85. 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));
  86. }
  87. [Fact]
  88. public void FromAsyncPattern0()
  89. {
  90. var x = new Result();
  91. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  92. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  93. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  94. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  95. }
  96. [Fact]
  97. public void FromAsyncPatternAction0()
  98. {
  99. var x = new Result();
  100. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  101. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  102. var res = Observable.FromAsyncPattern(begin, end)().ToEnumerable().ToArray();
  103. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  104. }
  105. [Fact]
  106. public void FromAsyncPattern0_Error()
  107. {
  108. var x = new Result();
  109. var ex = new Exception();
  110. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); return x; };
  111. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  112. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  113. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  114. }
  115. [Fact]
  116. public void FromAsyncPattern0_ErrorBegin()
  117. {
  118. var x = new Result();
  119. var ex = new Exception();
  120. Func<AsyncCallback, object, IAsyncResult> begin = (cb, _) => { cb(x); throw ex; };
  121. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  122. var res = Observable.FromAsyncPattern(begin, end)().Materialize().ToEnumerable().ToArray();
  123. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  124. }
  125. [Fact]
  126. public void FromAsyncPattern1()
  127. {
  128. var x = new Result();
  129. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, _) =>
  130. {
  131. Assert.Equal(a, 2);
  132. cb(x);
  133. return x;
  134. };
  135. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  136. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  137. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  138. }
  139. [Fact]
  140. public void FromAsyncPatternAction1()
  141. {
  142. var x = new Result();
  143. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, _) =>
  144. {
  145. Assert.Equal(a, 2);
  146. cb(x);
  147. return x;
  148. };
  149. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  150. var res = Observable.FromAsyncPattern(begin, end)(2).ToEnumerable().ToArray();
  151. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  152. }
  153. [Fact]
  154. public void FromAsyncPattern1_Error()
  155. {
  156. var x = new Result();
  157. var ex = new Exception();
  158. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, o) => { cb(x); return x; };
  159. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  160. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  161. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  162. }
  163. [Fact]
  164. public void FromAsyncPattern1_ErrorBegin()
  165. {
  166. var x = new Result();
  167. var ex = new Exception();
  168. Func<int, AsyncCallback, object, IAsyncResult> begin = (a, cb, o) => { cb(x); throw ex; };
  169. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  170. var res = Observable.FromAsyncPattern(begin, end)(2).Materialize().ToEnumerable().ToArray();
  171. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  172. }
  173. [Fact]
  174. public void FromAsyncPattern2()
  175. {
  176. var x = new Result();
  177. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, _) =>
  178. {
  179. Assert.Equal(a, 2);
  180. Assert.Equal(b, 3);
  181. cb(x);
  182. return x;
  183. };
  184. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  185. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  186. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  187. }
  188. [Fact]
  189. public void FromAsyncPatternAction2()
  190. {
  191. var x = new Result();
  192. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, _) =>
  193. {
  194. Assert.Equal(a, 2);
  195. Assert.Equal(b, 3);
  196. cb(x);
  197. return x;
  198. };
  199. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  200. var res = Observable.FromAsyncPattern(begin, end)(2, 3).ToEnumerable().ToArray();
  201. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  202. }
  203. [Fact]
  204. public void FromAsyncPattern2_Error()
  205. {
  206. var x = new Result();
  207. var ex = new Exception();
  208. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, o) => { cb(x); return x; };
  209. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  210. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  211. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  212. }
  213. [Fact]
  214. public void FromAsyncPattern2_ErrorBegin()
  215. {
  216. var x = new Result();
  217. var ex = new Exception();
  218. Func<int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, cb, o) => { cb(x); throw ex; };
  219. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  220. var res = Observable.FromAsyncPattern(begin, end)(2, 3).Materialize().ToEnumerable().ToArray();
  221. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  222. }
  223. [Fact]
  224. public void FromAsyncPattern3()
  225. {
  226. var x = new Result();
  227. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, _) =>
  228. {
  229. Assert.Equal(a, 2);
  230. Assert.Equal(b, 3);
  231. Assert.Equal(c, 4);
  232. cb(x);
  233. return x;
  234. };
  235. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  236. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  237. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  238. }
  239. [Fact]
  240. public void FromAsyncPatternAction3()
  241. {
  242. var x = new Result();
  243. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, _) =>
  244. {
  245. Assert.Equal(a, 2);
  246. Assert.Equal(b, 3);
  247. Assert.Equal(c, 4);
  248. cb(x);
  249. return x;
  250. };
  251. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  252. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).ToEnumerable().ToArray();
  253. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  254. }
  255. [Fact]
  256. public void FromAsyncPattern3_Error()
  257. {
  258. var x = new Result();
  259. var ex = new Exception();
  260. Func<int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, cb, o) => { cb(x); return x; };
  261. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  262. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  263. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  264. }
  265. [Fact]
  266. public void FromAsyncPattern3_ErrorBegin()
  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); throw ex; };
  271. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  272. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4).Materialize().ToEnumerable().ToArray();
  273. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  274. }
  275. [Fact]
  276. public void FromAsyncPattern4()
  277. {
  278. var x = new Result();
  279. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, _) =>
  280. {
  281. Assert.Equal(a, 2);
  282. Assert.Equal(b, 3);
  283. Assert.Equal(c, 4);
  284. Assert.Equal(d, 5);
  285. cb(x);
  286. return x;
  287. };
  288. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  289. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  290. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  291. }
  292. [Fact]
  293. public void FromAsyncPatternAction4()
  294. {
  295. var x = new Result();
  296. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, _) =>
  297. {
  298. Assert.Equal(a, 2);
  299. Assert.Equal(b, 3);
  300. Assert.Equal(c, 4);
  301. Assert.Equal(d, 5);
  302. cb(x);
  303. return x;
  304. };
  305. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  306. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).ToEnumerable().ToArray();
  307. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  308. }
  309. [Fact]
  310. public void FromAsyncPattern4_Error()
  311. {
  312. var x = new Result();
  313. var ex = new Exception();
  314. Func<int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, cb, o) => { cb(x); return x; };
  315. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  316. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  317. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  318. }
  319. [Fact]
  320. public void FromAsyncPattern4_ErrorBegin()
  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); throw ex; };
  325. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  326. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5).Materialize().ToEnumerable().ToArray();
  327. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  328. }
  329. [Fact]
  330. public void FromAsyncPattern5()
  331. {
  332. var x = new Result();
  333. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, _) =>
  334. {
  335. Assert.Equal(a, 2);
  336. Assert.Equal(b, 3);
  337. Assert.Equal(c, 4);
  338. Assert.Equal(d, 5);
  339. Assert.Equal(e, 6);
  340. cb(x);
  341. return x;
  342. };
  343. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  344. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  345. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  346. }
  347. [Fact]
  348. public void FromAsyncPatternAction5()
  349. {
  350. var x = new Result();
  351. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, _) =>
  352. {
  353. Assert.Equal(a, 2);
  354. Assert.Equal(b, 3);
  355. Assert.Equal(c, 4);
  356. Assert.Equal(d, 5);
  357. Assert.Equal(e, 6);
  358. cb(x);
  359. return x;
  360. };
  361. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  362. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).ToEnumerable().ToArray();
  363. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  364. }
  365. [Fact]
  366. public void FromAsyncPattern5_Error()
  367. {
  368. var x = new Result();
  369. var ex = new Exception();
  370. Func<int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, cb, o) => { cb(x); return x; };
  371. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  372. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  373. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  374. }
  375. [Fact]
  376. public void FromAsyncPattern5_ErrorBegin()
  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); throw ex; };
  381. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  382. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6).Materialize().ToEnumerable().ToArray();
  383. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  384. }
  385. [Fact]
  386. public void FromAsyncPattern6()
  387. {
  388. var x = new Result();
  389. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, _) =>
  390. {
  391. Assert.Equal(a, 2);
  392. Assert.Equal(b, 3);
  393. Assert.Equal(c, 4);
  394. Assert.Equal(d, 5);
  395. Assert.Equal(e, 6);
  396. Assert.Equal(f, 7);
  397. cb(x);
  398. return x;
  399. };
  400. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  401. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  402. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  403. }
  404. [Fact]
  405. public void FromAsyncPatternAction6()
  406. {
  407. var x = new Result();
  408. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, _) =>
  409. {
  410. Assert.Equal(a, 2);
  411. Assert.Equal(b, 3);
  412. Assert.Equal(c, 4);
  413. Assert.Equal(d, 5);
  414. Assert.Equal(e, 6);
  415. Assert.Equal(f, 7);
  416. cb(x);
  417. return x;
  418. };
  419. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  420. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).ToEnumerable().ToArray();
  421. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  422. }
  423. [Fact]
  424. public void FromAsyncPattern6_Error()
  425. {
  426. var x = new Result();
  427. var ex = new Exception();
  428. Func<int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, cb, o) => { cb(x); return x; };
  429. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  430. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  431. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  432. }
  433. [Fact]
  434. public void FromAsyncPattern6_ErrorBegin()
  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); throw ex; };
  439. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  440. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7).Materialize().ToEnumerable().ToArray();
  441. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  442. }
  443. [Fact]
  444. public void FromAsyncPattern7()
  445. {
  446. var x = new Result();
  447. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, _) =>
  448. {
  449. Assert.Equal(a, 2);
  450. Assert.Equal(b, 3);
  451. Assert.Equal(c, 4);
  452. Assert.Equal(d, 5);
  453. Assert.Equal(e, 6);
  454. Assert.Equal(f, 7);
  455. Assert.Equal(g, 8);
  456. cb(x);
  457. return x;
  458. };
  459. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  460. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  461. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  462. }
  463. [Fact]
  464. public void FromAsyncPatternAction7()
  465. {
  466. var x = new Result();
  467. Func<int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, cb, _) =>
  468. {
  469. Assert.Equal(a, 2);
  470. Assert.Equal(b, 3);
  471. Assert.Equal(c, 4);
  472. Assert.Equal(d, 5);
  473. Assert.Equal(e, 6);
  474. Assert.Equal(f, 7);
  475. Assert.Equal(g, 8);
  476. cb(x);
  477. return x;
  478. };
  479. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  480. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).ToEnumerable().ToArray();
  481. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  482. }
  483. [Fact]
  484. public void FromAsyncPattern7_Error()
  485. {
  486. var x = new Result();
  487. var ex = new Exception();
  488. 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; };
  489. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  490. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  491. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  492. }
  493. [Fact]
  494. public void FromAsyncPattern7_ErrorBegin()
  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); throw ex; };
  499. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  500. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8).Materialize().ToEnumerable().ToArray();
  501. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  502. }
  503. [Fact]
  504. public void FromAsyncPattern8()
  505. {
  506. var x = new Result();
  507. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, _) =>
  508. {
  509. Assert.Equal(a, 2);
  510. Assert.Equal(b, 3);
  511. Assert.Equal(c, 4);
  512. Assert.Equal(d, 5);
  513. Assert.Equal(e, 6);
  514. Assert.Equal(f, 7);
  515. Assert.Equal(g, 8);
  516. Assert.Equal(h, 9);
  517. cb(x);
  518. return x;
  519. };
  520. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  521. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  522. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  523. }
  524. [Fact]
  525. public void FromAsyncPatternAction8()
  526. {
  527. var x = new Result();
  528. Func<int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, cb, _) =>
  529. {
  530. Assert.Equal(a, 2);
  531. Assert.Equal(b, 3);
  532. Assert.Equal(c, 4);
  533. Assert.Equal(d, 5);
  534. Assert.Equal(e, 6);
  535. Assert.Equal(f, 7);
  536. Assert.Equal(g, 8);
  537. Assert.Equal(h, 9);
  538. cb(x);
  539. return x;
  540. };
  541. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  542. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).ToEnumerable().ToArray();
  543. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  544. }
  545. [Fact]
  546. public void FromAsyncPattern8_Error()
  547. {
  548. var x = new Result();
  549. var ex = new Exception();
  550. 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; };
  551. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  552. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  553. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  554. }
  555. [Fact]
  556. public void FromAsyncPattern8_ErrorBegin()
  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); throw ex; };
  561. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  562. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9).Materialize().ToEnumerable().ToArray();
  563. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  564. }
  565. [Fact]
  566. public void FromAsyncPattern9()
  567. {
  568. var x = new Result();
  569. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, _) =>
  570. {
  571. Assert.Equal(a, 2);
  572. Assert.Equal(b, 3);
  573. Assert.Equal(c, 4);
  574. Assert.Equal(d, 5);
  575. Assert.Equal(e, 6);
  576. Assert.Equal(f, 7);
  577. Assert.Equal(g, 8);
  578. Assert.Equal(h, 9);
  579. Assert.Equal(i, 10);
  580. cb(x);
  581. return x;
  582. };
  583. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  584. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  585. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  586. }
  587. [Fact]
  588. public void FromAsyncPatternAction9()
  589. {
  590. var x = new Result();
  591. Func<int, int, int, int, int, int, int, int, int, AsyncCallback, object, IAsyncResult> begin = (a, b, c, d, e, f, g, h, i, cb, _) =>
  592. {
  593. Assert.Equal(a, 2);
  594. Assert.Equal(b, 3);
  595. Assert.Equal(c, 4);
  596. Assert.Equal(d, 5);
  597. Assert.Equal(e, 6);
  598. Assert.Equal(f, 7);
  599. Assert.Equal(g, 8);
  600. Assert.Equal(h, 9);
  601. Assert.Equal(i, 10);
  602. cb(x);
  603. return x;
  604. };
  605. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  606. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).ToEnumerable().ToArray();
  607. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  608. }
  609. [Fact]
  610. public void FromAsyncPattern9_Error()
  611. {
  612. var x = new Result();
  613. var ex = new Exception();
  614. 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; };
  615. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  616. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  617. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  618. }
  619. [Fact]
  620. public void FromAsyncPattern9_ErrorBegin()
  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); throw ex; };
  625. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  626. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10).Materialize().ToEnumerable().ToArray();
  627. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  628. }
  629. [Fact]
  630. public void FromAsyncPattern10()
  631. {
  632. var x = new Result();
  633. 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, _) =>
  634. {
  635. Assert.Equal(a, 2);
  636. Assert.Equal(b, 3);
  637. Assert.Equal(c, 4);
  638. Assert.Equal(d, 5);
  639. Assert.Equal(e, 6);
  640. Assert.Equal(f, 7);
  641. Assert.Equal(g, 8);
  642. Assert.Equal(h, 9);
  643. Assert.Equal(i, 10);
  644. Assert.Equal(j, 11);
  645. cb(x);
  646. return x;
  647. };
  648. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  649. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  650. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  651. }
  652. [Fact]
  653. public void FromAsyncPatternAction10()
  654. {
  655. var x = new Result();
  656. 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, _) =>
  657. {
  658. Assert.Equal(a, 2);
  659. Assert.Equal(b, 3);
  660. Assert.Equal(c, 4);
  661. Assert.Equal(d, 5);
  662. Assert.Equal(e, 6);
  663. Assert.Equal(f, 7);
  664. Assert.Equal(g, 8);
  665. Assert.Equal(h, 9);
  666. Assert.Equal(i, 10);
  667. Assert.Equal(j, 11);
  668. cb(x);
  669. return x;
  670. };
  671. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  672. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).ToEnumerable().ToArray();
  673. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  674. }
  675. [Fact]
  676. public void FromAsyncPattern10_Error()
  677. {
  678. var x = new Result();
  679. var ex = new Exception();
  680. 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; };
  681. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  682. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  683. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  684. }
  685. [Fact]
  686. public void FromAsyncPattern10_ErrorBegin()
  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); throw ex; };
  691. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  692. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11).Materialize().ToEnumerable().ToArray();
  693. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  694. }
  695. [Fact]
  696. public void FromAsyncPattern11()
  697. {
  698. var x = new Result();
  699. 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, _) =>
  700. {
  701. Assert.Equal(a, 2);
  702. Assert.Equal(b, 3);
  703. Assert.Equal(c, 4);
  704. Assert.Equal(d, 5);
  705. Assert.Equal(e, 6);
  706. Assert.Equal(f, 7);
  707. Assert.Equal(g, 8);
  708. Assert.Equal(h, 9);
  709. Assert.Equal(i, 10);
  710. Assert.Equal(j, 11);
  711. Assert.Equal(k, 12);
  712. cb(x);
  713. return x;
  714. };
  715. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  716. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  717. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  718. }
  719. [Fact]
  720. public void FromAsyncPatternAction11()
  721. {
  722. var x = new Result();
  723. 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, _) =>
  724. {
  725. Assert.Equal(a, 2);
  726. Assert.Equal(b, 3);
  727. Assert.Equal(c, 4);
  728. Assert.Equal(d, 5);
  729. Assert.Equal(e, 6);
  730. Assert.Equal(f, 7);
  731. Assert.Equal(g, 8);
  732. Assert.Equal(h, 9);
  733. Assert.Equal(i, 10);
  734. Assert.Equal(j, 11);
  735. Assert.Equal(k, 12);
  736. cb(x);
  737. return x;
  738. };
  739. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  740. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).ToEnumerable().ToArray();
  741. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  742. }
  743. [Fact]
  744. public void FromAsyncPattern11_Error()
  745. {
  746. var x = new Result();
  747. var ex = new Exception();
  748. 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; };
  749. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  750. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  751. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  752. }
  753. [Fact]
  754. public void FromAsyncPattern11_ErrorBegin()
  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); throw ex; };
  759. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  760. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).Materialize().ToEnumerable().ToArray();
  761. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  762. }
  763. [Fact]
  764. public void FromAsyncPattern12()
  765. {
  766. var x = new Result();
  767. 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, _) =>
  768. {
  769. Assert.Equal(a, 2);
  770. Assert.Equal(b, 3);
  771. Assert.Equal(c, 4);
  772. Assert.Equal(d, 5);
  773. Assert.Equal(e, 6);
  774. Assert.Equal(f, 7);
  775. Assert.Equal(g, 8);
  776. Assert.Equal(h, 9);
  777. Assert.Equal(i, 10);
  778. Assert.Equal(j, 11);
  779. Assert.Equal(k, 12);
  780. Assert.Equal(l, 13);
  781. cb(x);
  782. return x;
  783. };
  784. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  785. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  786. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  787. }
  788. [Fact]
  789. public void FromAsyncPatternAction12()
  790. {
  791. var x = new Result();
  792. 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, _) =>
  793. {
  794. Assert.Equal(a, 2);
  795. Assert.Equal(b, 3);
  796. Assert.Equal(c, 4);
  797. Assert.Equal(d, 5);
  798. Assert.Equal(e, 6);
  799. Assert.Equal(f, 7);
  800. Assert.Equal(g, 8);
  801. Assert.Equal(h, 9);
  802. Assert.Equal(i, 10);
  803. Assert.Equal(j, 11);
  804. Assert.Equal(k, 12);
  805. Assert.Equal(l, 13);
  806. cb(x);
  807. return x;
  808. };
  809. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  810. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).ToEnumerable().ToArray();
  811. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  812. }
  813. [Fact]
  814. public void FromAsyncPattern12_Error()
  815. {
  816. var x = new Result();
  817. var ex = new Exception();
  818. 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; };
  819. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  820. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  821. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  822. }
  823. [Fact]
  824. public void FromAsyncPattern12_ErrorBegin()
  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); throw ex; };
  829. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  830. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13).Materialize().ToEnumerable().ToArray();
  831. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  832. }
  833. [Fact]
  834. public void FromAsyncPattern13()
  835. {
  836. var x = new Result();
  837. 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, _) =>
  838. {
  839. Assert.Equal(a, 2);
  840. Assert.Equal(b, 3);
  841. Assert.Equal(c, 4);
  842. Assert.Equal(d, 5);
  843. Assert.Equal(e, 6);
  844. Assert.Equal(f, 7);
  845. Assert.Equal(g, 8);
  846. Assert.Equal(h, 9);
  847. Assert.Equal(i, 10);
  848. Assert.Equal(j, 11);
  849. Assert.Equal(k, 12);
  850. Assert.Equal(l, 13);
  851. Assert.Equal(m, 14);
  852. cb(x);
  853. return x;
  854. };
  855. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  856. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().ToArray();
  857. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  858. }
  859. [Fact]
  860. public void FromAsyncPatternAction13()
  861. {
  862. var x = new Result();
  863. 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, _) =>
  864. {
  865. Assert.Equal(a, 2);
  866. Assert.Equal(b, 3);
  867. Assert.Equal(c, 4);
  868. Assert.Equal(d, 5);
  869. Assert.Equal(e, 6);
  870. Assert.Equal(f, 7);
  871. Assert.Equal(g, 8);
  872. Assert.Equal(h, 9);
  873. Assert.Equal(i, 10);
  874. Assert.Equal(j, 11);
  875. Assert.Equal(k, 12);
  876. Assert.Equal(l, 13);
  877. Assert.Equal(m, 14);
  878. cb(x);
  879. return x;
  880. };
  881. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  882. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).ToEnumerable().ToArray();
  883. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  884. }
  885. [Fact]
  886. public void FromAsyncPattern13_Error()
  887. {
  888. var x = new Result();
  889. var ex = new Exception();
  890. 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; };
  891. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  892. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14).Materialize().ToEnumerable().ToArray();
  893. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  894. }
  895. [Fact]
  896. public void FromAsyncPattern13_ErrorBegin()
  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); throw ex; };
  901. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  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.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  904. }
  905. [Fact]
  906. public void FromAsyncPattern14()
  907. {
  908. var x = new Result();
  909. 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, _) =>
  910. {
  911. Assert.Equal(a, 2);
  912. Assert.Equal(b, 3);
  913. Assert.Equal(c, 4);
  914. Assert.Equal(d, 5);
  915. Assert.Equal(e, 6);
  916. Assert.Equal(f, 7);
  917. Assert.Equal(g, 8);
  918. Assert.Equal(h, 9);
  919. Assert.Equal(i, 10);
  920. Assert.Equal(j, 11);
  921. Assert.Equal(k, 12);
  922. Assert.Equal(l, 13);
  923. Assert.Equal(m, 14);
  924. Assert.Equal(n, 15);
  925. cb(x);
  926. return x;
  927. };
  928. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 1; };
  929. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().ToArray();
  930. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnNext<int>(1), Notification.CreateOnCompleted<int>() }));
  931. }
  932. [Fact]
  933. public void FromAsyncPatternAction14()
  934. {
  935. var x = new Result();
  936. 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, _) =>
  937. {
  938. Assert.Equal(a, 2);
  939. Assert.Equal(b, 3);
  940. Assert.Equal(c, 4);
  941. Assert.Equal(d, 5);
  942. Assert.Equal(e, 6);
  943. Assert.Equal(f, 7);
  944. Assert.Equal(g, 8);
  945. Assert.Equal(h, 9);
  946. Assert.Equal(i, 10);
  947. Assert.Equal(j, 11);
  948. Assert.Equal(k, 12);
  949. Assert.Equal(l, 13);
  950. Assert.Equal(m, 14);
  951. Assert.Equal(n, 15);
  952. cb(x);
  953. return x;
  954. };
  955. Action<IAsyncResult> end = iar => { Assert.Same(x, iar); };
  956. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).ToEnumerable().ToArray();
  957. Assert.True(res.SequenceEqual(new[] { new Unit() }));
  958. }
  959. [Fact]
  960. public void FromAsyncPattern14_Error()
  961. {
  962. var x = new Result();
  963. var ex = new Exception();
  964. 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; };
  965. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); throw ex; };
  966. var res = Observable.FromAsyncPattern(begin, end)(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15).Materialize().ToEnumerable().ToArray();
  967. Assert.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  968. }
  969. [Fact]
  970. public void FromAsyncPattern14_ErrorBegin()
  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); throw ex; };
  975. Func<IAsyncResult, int> end = iar => { Assert.Same(x, iar); return 0; };
  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.True(res.SequenceEqual(new Notification<int>[] { Notification.CreateOnError<int>(ex) }));
  978. }
  979. private class Result : IAsyncResult
  980. {
  981. public object AsyncState
  982. {
  983. get { throw new NotImplementedException(); }
  984. }
  985. public System.Threading.WaitHandle AsyncWaitHandle
  986. {
  987. get { throw new NotImplementedException(); }
  988. }
  989. public bool CompletedSynchronously
  990. {
  991. get { throw new NotImplementedException(); }
  992. }
  993. public bool IsCompleted
  994. {
  995. get { throw new NotImplementedException(); }
  996. }
  997. }
  998. }
  999. #pragma warning restore IDE0039 // Use local function
  1000. }