AndTest.cs 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015
  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.Collections.Generic;
  6. using System.Reactive.Linq;
  7. using Microsoft.Reactive.Testing;
  8. using Xunit;
  9. namespace ReactiveTests.Tests
  10. {
  11. public class AndTest : ReactiveTest
  12. {
  13. [Fact]
  14. public void And_ArgumentChecking()
  15. {
  16. var someObservable = Observable.Return(1);
  17. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And<int, int>(null, someObservable));
  18. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And<int, int>(someObservable, null));
  19. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And<int>(null));
  20. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And<int>(null));
  21. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And<int>(null));
  22. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  23. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  24. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  25. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  26. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  27. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  28. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  29. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  30. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  31. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  32. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.And(someObservable, someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And(someObservable).And<int>(null));
  33. }
  34. [Fact]
  35. public void And2()
  36. {
  37. var scheduler = new TestScheduler();
  38. const int N = 2;
  39. var obs = new List<IObservable<int>>();
  40. for (var i = 0; i < N; i++)
  41. {
  42. obs.Add(scheduler.CreateHotObservable(
  43. OnNext(210, 1),
  44. OnCompleted<int>(220)
  45. ));
  46. }
  47. var res = scheduler.Start(() =>
  48. Observable.When(obs[0].And(obs[1]).Then((a, b) => a + b))
  49. );
  50. res.Messages.AssertEqual(
  51. OnNext(210, N),
  52. OnCompleted<int>(220)
  53. );
  54. }
  55. [Fact]
  56. public void And2Error()
  57. {
  58. var ex = new Exception();
  59. const int N = 2;
  60. for (var i = 0; i < N; i++)
  61. {
  62. var scheduler = new TestScheduler();
  63. var obs = new List<IObservable<int>>();
  64. for (var j = 0; j < N; j++)
  65. {
  66. if (j == i)
  67. {
  68. obs.Add(scheduler.CreateHotObservable(
  69. OnError<int>(210, ex)
  70. ));
  71. }
  72. else
  73. {
  74. obs.Add(scheduler.CreateHotObservable(
  75. OnNext(210, 1),
  76. OnCompleted<int>(220)
  77. ));
  78. }
  79. }
  80. var res = scheduler.Start(() =>
  81. Observable.When(obs[0].And(obs[1]).Then((a, b) => 0))
  82. );
  83. res.Messages.AssertEqual(
  84. OnError<int>(210, ex)
  85. );
  86. }
  87. }
  88. [Fact]
  89. public void And3()
  90. {
  91. var scheduler = new TestScheduler();
  92. const int N = 3;
  93. var obs = new List<IObservable<int>>();
  94. for (var i = 0; i < N; i++)
  95. {
  96. obs.Add(scheduler.CreateHotObservable(
  97. OnNext(210, 1),
  98. OnCompleted<int>(220)
  99. ));
  100. }
  101. var res = scheduler.Start(() =>
  102. Observable.When(obs[0].And(obs[1]).And(obs[2]).Then((a, b, c) => a + b + c))
  103. );
  104. res.Messages.AssertEqual(
  105. OnNext(210, N),
  106. OnCompleted<int>(220)
  107. );
  108. }
  109. [Fact]
  110. public void And3Error()
  111. {
  112. var ex = new Exception();
  113. const int N = 3;
  114. for (var i = 0; i < N; i++)
  115. {
  116. var scheduler = new TestScheduler();
  117. var obs = new List<IObservable<int>>();
  118. for (var j = 0; j < N; j++)
  119. {
  120. if (j == i)
  121. {
  122. obs.Add(scheduler.CreateHotObservable(
  123. OnError<int>(210, ex)
  124. ));
  125. }
  126. else
  127. {
  128. obs.Add(scheduler.CreateHotObservable(
  129. OnNext(210, 1),
  130. OnCompleted<int>(220)
  131. ));
  132. }
  133. }
  134. var res = scheduler.Start(() =>
  135. Observable.When(obs[0].And(obs[1]).And(obs[2]).Then((a, b, c) => 0))
  136. );
  137. res.Messages.AssertEqual(
  138. OnError<int>(210, ex)
  139. );
  140. }
  141. }
  142. [Fact]
  143. public void And4()
  144. {
  145. var scheduler = new TestScheduler();
  146. const int N = 4;
  147. var obs = new List<IObservable<int>>();
  148. for (var i = 0; i < N; i++)
  149. {
  150. obs.Add(scheduler.CreateHotObservable(
  151. OnNext(210, 1),
  152. OnCompleted<int>(220)
  153. ));
  154. }
  155. var res = scheduler.Start(() =>
  156. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).Then((a, b, c, d) => a + b + c + d))
  157. );
  158. res.Messages.AssertEqual(
  159. OnNext(210, N),
  160. OnCompleted<int>(220)
  161. );
  162. }
  163. [Fact]
  164. public void And4Error()
  165. {
  166. var ex = new Exception();
  167. const int N = 4;
  168. for (var i = 0; i < N; i++)
  169. {
  170. var scheduler = new TestScheduler();
  171. var obs = new List<IObservable<int>>();
  172. for (var j = 0; j < N; j++)
  173. {
  174. if (j == i)
  175. {
  176. obs.Add(scheduler.CreateHotObservable(
  177. OnError<int>(210, ex)
  178. ));
  179. }
  180. else
  181. {
  182. obs.Add(scheduler.CreateHotObservable(
  183. OnNext(210, 1),
  184. OnCompleted<int>(220)
  185. ));
  186. }
  187. }
  188. var res = scheduler.Start(() =>
  189. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).Then((a, b, c, d) => 0))
  190. );
  191. res.Messages.AssertEqual(
  192. OnError<int>(210, ex)
  193. );
  194. }
  195. }
  196. [Fact]
  197. public void And5()
  198. {
  199. var scheduler = new TestScheduler();
  200. const int N = 5;
  201. var obs = new List<IObservable<int>>();
  202. for (var i = 0; i < N; i++)
  203. {
  204. obs.Add(scheduler.CreateHotObservable(
  205. OnNext(210, 1),
  206. OnCompleted<int>(220)
  207. ));
  208. }
  209. var res = scheduler.Start(() =>
  210. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).Then((a, b, c, d, e) => a + b + c + d + e))
  211. );
  212. res.Messages.AssertEqual(
  213. OnNext(210, N),
  214. OnCompleted<int>(220)
  215. );
  216. }
  217. [Fact]
  218. public void And5Error()
  219. {
  220. var ex = new Exception();
  221. const int N = 5;
  222. for (var i = 0; i < N; i++)
  223. {
  224. var scheduler = new TestScheduler();
  225. var obs = new List<IObservable<int>>();
  226. for (var j = 0; j < N; j++)
  227. {
  228. if (j == i)
  229. {
  230. obs.Add(scheduler.CreateHotObservable(
  231. OnError<int>(210, ex)
  232. ));
  233. }
  234. else
  235. {
  236. obs.Add(scheduler.CreateHotObservable(
  237. OnNext(210, 1),
  238. OnCompleted<int>(220)
  239. ));
  240. }
  241. }
  242. var res = scheduler.Start(() =>
  243. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).Then((a, b, c, d, e) => 0))
  244. );
  245. res.Messages.AssertEqual(
  246. OnError<int>(210, ex)
  247. );
  248. }
  249. }
  250. [Fact]
  251. public void And6()
  252. {
  253. var scheduler = new TestScheduler();
  254. const int N = 6;
  255. var obs = new List<IObservable<int>>();
  256. for (var i = 0; i < N; i++)
  257. {
  258. obs.Add(scheduler.CreateHotObservable(
  259. OnNext(210, 1),
  260. OnCompleted<int>(220)
  261. ));
  262. }
  263. var res = scheduler.Start(() =>
  264. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).Then((a, b, c, d, e, f) => a + b + c + d + e + f))
  265. );
  266. res.Messages.AssertEqual(
  267. OnNext(210, N),
  268. OnCompleted<int>(220)
  269. );
  270. }
  271. [Fact]
  272. public void And6Error()
  273. {
  274. var ex = new Exception();
  275. const int N = 6;
  276. for (var i = 0; i < N; i++)
  277. {
  278. var scheduler = new TestScheduler();
  279. var obs = new List<IObservable<int>>();
  280. for (var j = 0; j < N; j++)
  281. {
  282. if (j == i)
  283. {
  284. obs.Add(scheduler.CreateHotObservable(
  285. OnError<int>(210, ex)
  286. ));
  287. }
  288. else
  289. {
  290. obs.Add(scheduler.CreateHotObservable(
  291. OnNext(210, 1),
  292. OnCompleted<int>(220)
  293. ));
  294. }
  295. }
  296. var res = scheduler.Start(() =>
  297. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).Then((a, b, c, d, e, f) => 0))
  298. );
  299. res.Messages.AssertEqual(
  300. OnError<int>(210, ex)
  301. );
  302. }
  303. }
  304. [Fact]
  305. public void And7()
  306. {
  307. var scheduler = new TestScheduler();
  308. const int N = 7;
  309. var obs = new List<IObservable<int>>();
  310. for (var i = 0; i < N; i++)
  311. {
  312. obs.Add(scheduler.CreateHotObservable(
  313. OnNext(210, 1),
  314. OnCompleted<int>(220)
  315. ));
  316. }
  317. var res = scheduler.Start(() =>
  318. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).Then((a, b, c, d, e, f, g) => a + b + c + d + e + f + g))
  319. );
  320. res.Messages.AssertEqual(
  321. OnNext(210, N),
  322. OnCompleted<int>(220)
  323. );
  324. }
  325. [Fact]
  326. public void And7Error()
  327. {
  328. var ex = new Exception();
  329. const int N = 7;
  330. for (var i = 0; i < N; i++)
  331. {
  332. var scheduler = new TestScheduler();
  333. var obs = new List<IObservable<int>>();
  334. for (var j = 0; j < N; j++)
  335. {
  336. if (j == i)
  337. {
  338. obs.Add(scheduler.CreateHotObservable(
  339. OnError<int>(210, ex)
  340. ));
  341. }
  342. else
  343. {
  344. obs.Add(scheduler.CreateHotObservable(
  345. OnNext(210, 1),
  346. OnCompleted<int>(220)
  347. ));
  348. }
  349. }
  350. var res = scheduler.Start(() =>
  351. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).Then((a, b, c, d, e, f, g) => 0))
  352. );
  353. res.Messages.AssertEqual(
  354. OnError<int>(210, ex)
  355. );
  356. }
  357. }
  358. [Fact]
  359. public void And8()
  360. {
  361. var scheduler = new TestScheduler();
  362. const int N = 8;
  363. var obs = new List<IObservable<int>>();
  364. for (var i = 0; i < N; i++)
  365. {
  366. obs.Add(scheduler.CreateHotObservable(
  367. OnNext(210, 1),
  368. OnCompleted<int>(220)
  369. ));
  370. }
  371. var res = scheduler.Start(() =>
  372. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).Then((a, b, c, d, e, f, g, h) => a + b + c + d + e + f + g + h))
  373. );
  374. res.Messages.AssertEqual(
  375. OnNext(210, N),
  376. OnCompleted<int>(220)
  377. );
  378. }
  379. [Fact]
  380. public void And8Error()
  381. {
  382. var ex = new Exception();
  383. const int N = 8;
  384. for (var i = 0; i < N; i++)
  385. {
  386. var scheduler = new TestScheduler();
  387. var obs = new List<IObservable<int>>();
  388. for (var j = 0; j < N; j++)
  389. {
  390. if (j == i)
  391. {
  392. obs.Add(scheduler.CreateHotObservable(
  393. OnError<int>(210, ex)
  394. ));
  395. }
  396. else
  397. {
  398. obs.Add(scheduler.CreateHotObservable(
  399. OnNext(210, 1),
  400. OnCompleted<int>(220)
  401. ));
  402. }
  403. }
  404. var res = scheduler.Start(() =>
  405. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).Then((a, b, c, d, e, f, g, h) => 0))
  406. );
  407. res.Messages.AssertEqual(
  408. OnError<int>(210, ex)
  409. );
  410. }
  411. }
  412. [Fact]
  413. public void And9()
  414. {
  415. var scheduler = new TestScheduler();
  416. const int N = 9;
  417. var obs = new List<IObservable<int>>();
  418. for (var i = 0; i < N; i++)
  419. {
  420. obs.Add(scheduler.CreateHotObservable(
  421. OnNext(210, 1),
  422. OnCompleted<int>(220)
  423. ));
  424. }
  425. var res = scheduler.Start(() =>
  426. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).Then((a, b, c, d, e, f, g, h, i) => a + b + c + d + e + f + g + h + i))
  427. );
  428. res.Messages.AssertEqual(
  429. OnNext(210, N),
  430. OnCompleted<int>(220)
  431. );
  432. }
  433. [Fact]
  434. public void And9Error()
  435. {
  436. var ex = new Exception();
  437. const int N = 9;
  438. for (var i = 0; i < N; i++)
  439. {
  440. var scheduler = new TestScheduler();
  441. var obs = new List<IObservable<int>>();
  442. for (var j = 0; j < N; j++)
  443. {
  444. if (j == i)
  445. {
  446. obs.Add(scheduler.CreateHotObservable(
  447. OnError<int>(210, ex)
  448. ));
  449. }
  450. else
  451. {
  452. obs.Add(scheduler.CreateHotObservable(
  453. OnNext(210, 1),
  454. OnCompleted<int>(220)
  455. ));
  456. }
  457. }
  458. var res = scheduler.Start(() =>
  459. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).Then((a, b, c, d, e, f, g, h, i_) => 0))
  460. );
  461. res.Messages.AssertEqual(
  462. OnError<int>(210, ex)
  463. );
  464. }
  465. }
  466. [Fact]
  467. public void And10()
  468. {
  469. var scheduler = new TestScheduler();
  470. const int N = 10;
  471. var obs = new List<IObservable<int>>();
  472. for (var i = 0; i < N; i++)
  473. {
  474. obs.Add(scheduler.CreateHotObservable(
  475. OnNext(210, 1),
  476. OnCompleted<int>(220)
  477. ));
  478. }
  479. var res = scheduler.Start(() =>
  480. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).Then((a, b, c, d, e, f, g, h, i, j) => a + b + c + d + e + f + g + h + i + j))
  481. );
  482. res.Messages.AssertEqual(
  483. OnNext(210, N),
  484. OnCompleted<int>(220)
  485. );
  486. }
  487. [Fact]
  488. public void And10Error()
  489. {
  490. var ex = new Exception();
  491. const int N = 10;
  492. for (var i = 0; i < N; i++)
  493. {
  494. var scheduler = new TestScheduler();
  495. var obs = new List<IObservable<int>>();
  496. for (var j = 0; j < N; j++)
  497. {
  498. if (j == i)
  499. {
  500. obs.Add(scheduler.CreateHotObservable(
  501. OnError<int>(210, ex)
  502. ));
  503. }
  504. else
  505. {
  506. obs.Add(scheduler.CreateHotObservable(
  507. OnNext(210, 1),
  508. OnCompleted<int>(220)
  509. ));
  510. }
  511. }
  512. var res = scheduler.Start(() =>
  513. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).Then((a, b, c, d, e, f, g, h, i_, j) => 0))
  514. );
  515. res.Messages.AssertEqual(
  516. OnError<int>(210, ex)
  517. );
  518. }
  519. }
  520. [Fact]
  521. public void And11()
  522. {
  523. var scheduler = new TestScheduler();
  524. const int N = 11;
  525. var obs = new List<IObservable<int>>();
  526. for (var i = 0; i < N; i++)
  527. {
  528. obs.Add(scheduler.CreateHotObservable(
  529. OnNext(210, 1),
  530. OnCompleted<int>(220)
  531. ));
  532. }
  533. var res = scheduler.Start(() =>
  534. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).Then((a, b, c, d, e, f, g, h, i, j, k) => a + b + c + d + e + f + g + h + i + j + k))
  535. );
  536. res.Messages.AssertEqual(
  537. OnNext(210, N),
  538. OnCompleted<int>(220)
  539. );
  540. }
  541. [Fact]
  542. public void And11Error()
  543. {
  544. var ex = new Exception();
  545. const int N = 11;
  546. for (var i = 0; i < N; i++)
  547. {
  548. var scheduler = new TestScheduler();
  549. var obs = new List<IObservable<int>>();
  550. for (var j = 0; j < N; j++)
  551. {
  552. if (j == i)
  553. {
  554. obs.Add(scheduler.CreateHotObservable(
  555. OnError<int>(210, ex)
  556. ));
  557. }
  558. else
  559. {
  560. obs.Add(scheduler.CreateHotObservable(
  561. OnNext(210, 1),
  562. OnCompleted<int>(220)
  563. ));
  564. }
  565. }
  566. var res = scheduler.Start(() =>
  567. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).Then((a, b, c, d, e, f, g, h, i_, j, k) => 0))
  568. );
  569. res.Messages.AssertEqual(
  570. OnError<int>(210, ex)
  571. );
  572. }
  573. }
  574. [Fact]
  575. public void And12()
  576. {
  577. var scheduler = new TestScheduler();
  578. const int N = 12;
  579. var obs = new List<IObservable<int>>();
  580. for (var i = 0; i < N; i++)
  581. {
  582. obs.Add(scheduler.CreateHotObservable(
  583. OnNext(210, 1),
  584. OnCompleted<int>(220)
  585. ));
  586. }
  587. var res = scheduler.Start(() =>
  588. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).Then((a, b, c, d, e, f, g, h, i, j, k, l) => a + b + c + d + e + f + g + h + i + j + k + l))
  589. );
  590. res.Messages.AssertEqual(
  591. OnNext(210, N),
  592. OnCompleted<int>(220)
  593. );
  594. }
  595. [Fact]
  596. public void And12Error()
  597. {
  598. var ex = new Exception();
  599. const int N = 12;
  600. for (var i = 0; i < N; i++)
  601. {
  602. var scheduler = new TestScheduler();
  603. var obs = new List<IObservable<int>>();
  604. for (var j = 0; j < N; j++)
  605. {
  606. if (j == i)
  607. {
  608. obs.Add(scheduler.CreateHotObservable(
  609. OnError<int>(210, ex)
  610. ));
  611. }
  612. else
  613. {
  614. obs.Add(scheduler.CreateHotObservable(
  615. OnNext(210, 1),
  616. OnCompleted<int>(220)
  617. ));
  618. }
  619. }
  620. var res = scheduler.Start(() =>
  621. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).Then((a, b, c, d, e, f, g, h, i_, j, k, l) => 0))
  622. );
  623. res.Messages.AssertEqual(
  624. OnError<int>(210, ex)
  625. );
  626. }
  627. }
  628. [Fact]
  629. public void And13()
  630. {
  631. var scheduler = new TestScheduler();
  632. const int N = 13;
  633. var obs = new List<IObservable<int>>();
  634. for (var i = 0; i < N; i++)
  635. {
  636. obs.Add(scheduler.CreateHotObservable(
  637. OnNext(210, 1),
  638. OnCompleted<int>(220)
  639. ));
  640. }
  641. var res = scheduler.Start(() =>
  642. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).And(obs[12]).Then((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))
  643. );
  644. res.Messages.AssertEqual(
  645. OnNext(210, N),
  646. OnCompleted<int>(220)
  647. );
  648. }
  649. [Fact]
  650. public void And13Error()
  651. {
  652. var ex = new Exception();
  653. const int N = 13;
  654. for (var i = 0; i < N; i++)
  655. {
  656. var scheduler = new TestScheduler();
  657. var obs = new List<IObservable<int>>();
  658. for (var j = 0; j < N; j++)
  659. {
  660. if (j == i)
  661. {
  662. obs.Add(scheduler.CreateHotObservable(
  663. OnError<int>(210, ex)
  664. ));
  665. }
  666. else
  667. {
  668. obs.Add(scheduler.CreateHotObservable(
  669. OnNext(210, 1),
  670. OnCompleted<int>(220)
  671. ));
  672. }
  673. }
  674. var res = scheduler.Start(() =>
  675. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).And(obs[12]).Then((a, b, c, d, e, f, g, h, i_, j, k, l, m) => 0))
  676. );
  677. res.Messages.AssertEqual(
  678. OnError<int>(210, ex)
  679. );
  680. }
  681. }
  682. [Fact]
  683. public void And14()
  684. {
  685. var scheduler = new TestScheduler();
  686. const int N = 14;
  687. var obs = new List<IObservable<int>>();
  688. for (var i = 0; i < N; i++)
  689. {
  690. obs.Add(scheduler.CreateHotObservable(
  691. OnNext(210, 1),
  692. OnCompleted<int>(220)
  693. ));
  694. }
  695. var res = scheduler.Start(() =>
  696. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).And(obs[12]).And(obs[13]).Then((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))
  697. );
  698. res.Messages.AssertEqual(
  699. OnNext(210, N),
  700. OnCompleted<int>(220)
  701. );
  702. }
  703. [Fact]
  704. public void And14Error()
  705. {
  706. var ex = new Exception();
  707. const int N = 14;
  708. for (var i = 0; i < N; i++)
  709. {
  710. var scheduler = new TestScheduler();
  711. var obs = new List<IObservable<int>>();
  712. for (var j = 0; j < N; j++)
  713. {
  714. if (j == i)
  715. {
  716. obs.Add(scheduler.CreateHotObservable(
  717. OnError<int>(210, ex)
  718. ));
  719. }
  720. else
  721. {
  722. obs.Add(scheduler.CreateHotObservable(
  723. OnNext(210, 1),
  724. OnCompleted<int>(220)
  725. ));
  726. }
  727. }
  728. var res = scheduler.Start(() =>
  729. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).And(obs[12]).And(obs[13]).Then((a, b, c, d, e, f, g, h, i_, j, k, l, m, n) => 0))
  730. );
  731. res.Messages.AssertEqual(
  732. OnError<int>(210, ex)
  733. );
  734. }
  735. }
  736. [Fact]
  737. public void And15()
  738. {
  739. var scheduler = new TestScheduler();
  740. const int N = 15;
  741. var obs = new List<IObservable<int>>();
  742. for (var i = 0; i < N; i++)
  743. {
  744. obs.Add(scheduler.CreateHotObservable(
  745. OnNext(210, 1),
  746. OnCompleted<int>(220)
  747. ));
  748. }
  749. var res = scheduler.Start(() =>
  750. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).And(obs[12]).And(obs[13]).And(obs[14]).Then((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))
  751. );
  752. res.Messages.AssertEqual(
  753. OnNext(210, N),
  754. OnCompleted<int>(220)
  755. );
  756. }
  757. [Fact]
  758. public void And15Error()
  759. {
  760. var ex = new Exception();
  761. const int N = 15;
  762. for (var i = 0; i < N; i++)
  763. {
  764. var scheduler = new TestScheduler();
  765. var obs = new List<IObservable<int>>();
  766. for (var j = 0; j < N; j++)
  767. {
  768. if (j == i)
  769. {
  770. obs.Add(scheduler.CreateHotObservable(
  771. OnError<int>(210, ex)
  772. ));
  773. }
  774. else
  775. {
  776. obs.Add(scheduler.CreateHotObservable(
  777. OnNext(210, 1),
  778. OnCompleted<int>(220)
  779. ));
  780. }
  781. }
  782. var res = scheduler.Start(() =>
  783. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).And(obs[12]).And(obs[13]).And(obs[14]).Then((a, b, c, d, e, f, g, h, i_, j, k, l, m, n, o) => 0))
  784. );
  785. res.Messages.AssertEqual(
  786. OnError<int>(210, ex)
  787. );
  788. }
  789. }
  790. [Fact]
  791. public void And16()
  792. {
  793. var scheduler = new TestScheduler();
  794. const int N = 16;
  795. var obs = new List<IObservable<int>>();
  796. for (var i = 0; i < N; i++)
  797. {
  798. obs.Add(scheduler.CreateHotObservable(
  799. OnNext(210, 1),
  800. OnCompleted<int>(220)
  801. ));
  802. }
  803. var res = scheduler.Start(() =>
  804. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).And(obs[12]).And(obs[13]).And(obs[14]).And(obs[15]).Then((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))
  805. );
  806. res.Messages.AssertEqual(
  807. OnNext(210, N),
  808. OnCompleted<int>(220)
  809. );
  810. }
  811. [Fact]
  812. public void And16Error()
  813. {
  814. var ex = new Exception();
  815. const int N = 16;
  816. for (var i = 0; i < N; i++)
  817. {
  818. var scheduler = new TestScheduler();
  819. var obs = new List<IObservable<int>>();
  820. for (var j = 0; j < N; j++)
  821. {
  822. if (j == i)
  823. {
  824. obs.Add(scheduler.CreateHotObservable(
  825. OnError<int>(210, ex)
  826. ));
  827. }
  828. else
  829. {
  830. obs.Add(scheduler.CreateHotObservable(
  831. OnNext(210, 1),
  832. OnCompleted<int>(220)
  833. ));
  834. }
  835. }
  836. var res = scheduler.Start(() =>
  837. Observable.When(obs[0].And(obs[1]).And(obs[2]).And(obs[3]).And(obs[4]).And(obs[5]).And(obs[6]).And(obs[7]).And(obs[8]).And(obs[9]).And(obs[10]).And(obs[11]).And(obs[12]).And(obs[13]).And(obs[14]).And(obs[15]).Then((a, b, c, d, e, f, g, h, i_, j, k, l, m, n, o, p) => 0))
  838. );
  839. res.Messages.AssertEqual(
  840. OnError<int>(210, ex)
  841. );
  842. }
  843. }
  844. }
  845. }