SumTest.cs 43 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Linq;
  6. using System.Reactive.Linq;
  7. using Microsoft.Reactive.Testing;
  8. using Microsoft.VisualStudio.TestTools.UnitTesting;
  9. namespace ReactiveTests.Tests
  10. {
  11. [TestClass]
  12. public class SumTest : ReactiveTest
  13. {
  14. [TestMethod]
  15. public void Sum_ArgumentChecking()
  16. {
  17. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<int>)));
  18. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<double>)));
  19. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<float>)));
  20. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<decimal>)));
  21. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<long>)));
  22. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<int?>)));
  23. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<double?>)));
  24. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<float?>)));
  25. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<decimal?>)));
  26. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<long?>)));
  27. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default));
  28. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(double)));
  29. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(float)));
  30. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(decimal)));
  31. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(long)));
  32. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(int?)));
  33. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(double?)));
  34. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(float?)));
  35. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(decimal?)));
  36. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(default(IObservable<DateTime>), _ => default(long?)));
  37. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default));
  38. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, double>)));
  39. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, float>)));
  40. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, decimal>)));
  41. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, long>)));
  42. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, int?>)));
  43. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, double?>)));
  44. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, float?>)));
  45. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, decimal?>)));
  46. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Sum(Observable.Empty<DateTime>(), default(Func<DateTime, long?>)));
  47. }
  48. [TestMethod]
  49. public void Sum_Int32_Empty()
  50. {
  51. var scheduler = new TestScheduler();
  52. var xs = scheduler.CreateHotObservable(
  53. OnNext(150, 1),
  54. OnCompleted<int>(250)
  55. );
  56. var res = scheduler.Start(() =>
  57. xs.Sum()
  58. );
  59. res.Messages.AssertEqual(
  60. OnNext(250, 0),
  61. OnCompleted<int>(250)
  62. );
  63. xs.Subscriptions.AssertEqual(
  64. Subscribe(200, 250)
  65. );
  66. }
  67. [TestMethod]
  68. public void Sum_Int32_Return()
  69. {
  70. var scheduler = new TestScheduler();
  71. var xs = scheduler.CreateHotObservable(
  72. OnNext(150, 1),
  73. OnNext(210, 2),
  74. OnCompleted<int>(250)
  75. );
  76. var res = scheduler.Start(() =>
  77. xs.Sum()
  78. );
  79. res.Messages.AssertEqual(
  80. OnNext(250, 2),
  81. OnCompleted<int>(250)
  82. );
  83. xs.Subscriptions.AssertEqual(
  84. Subscribe(200, 250)
  85. );
  86. }
  87. [TestMethod]
  88. public void Sum_Int32_Some()
  89. {
  90. var scheduler = new TestScheduler();
  91. var xs = scheduler.CreateHotObservable(
  92. OnNext(150, 1),
  93. OnNext(210, 2),
  94. OnNext(220, 3),
  95. OnNext(230, 4),
  96. OnCompleted<int>(250)
  97. );
  98. var res = scheduler.Start(() =>
  99. xs.Sum()
  100. );
  101. res.Messages.AssertEqual(
  102. OnNext(250, 2 + 3 + 4),
  103. OnCompleted<int>(250)
  104. );
  105. xs.Subscriptions.AssertEqual(
  106. Subscribe(200, 250)
  107. );
  108. }
  109. [TestMethod]
  110. public void Sum_Int32_Overflow()
  111. {
  112. var scheduler = new TestScheduler();
  113. var xs = scheduler.CreateHotObservable(
  114. OnNext(150, 1),
  115. OnNext(210, int.MaxValue),
  116. OnNext(220, 1),
  117. OnCompleted<int>(250)
  118. );
  119. var res = scheduler.Start(() =>
  120. xs.Sum()
  121. );
  122. res.Messages.AssertEqual(
  123. OnError<int>(220, e => e is OverflowException)
  124. );
  125. xs.Subscriptions.AssertEqual(
  126. Subscribe(200, 220)
  127. );
  128. }
  129. [TestMethod]
  130. public void Sum_Int32_Throw()
  131. {
  132. var ex = new Exception();
  133. var scheduler = new TestScheduler();
  134. var xs = scheduler.CreateHotObservable(
  135. OnNext(150, 1),
  136. OnError<int>(210, ex)
  137. );
  138. var res = scheduler.Start(() =>
  139. xs.Sum()
  140. );
  141. res.Messages.AssertEqual(
  142. OnError<int>(210, ex)
  143. );
  144. xs.Subscriptions.AssertEqual(
  145. Subscribe(200, 210)
  146. );
  147. }
  148. [TestMethod]
  149. public void Sum_Int32_Never()
  150. {
  151. var ex = new Exception();
  152. var scheduler = new TestScheduler();
  153. var xs = scheduler.CreateHotObservable(
  154. OnNext(150, 1)
  155. );
  156. var res = scheduler.Start(() =>
  157. xs.Sum()
  158. );
  159. res.Messages.AssertEqual(
  160. );
  161. xs.Subscriptions.AssertEqual(
  162. Subscribe(200, 1000)
  163. );
  164. }
  165. [TestMethod]
  166. public void Sum_Int64_Empty()
  167. {
  168. var scheduler = new TestScheduler();
  169. var xs = scheduler.CreateHotObservable(
  170. OnNext(150, 1L),
  171. OnCompleted<long>(250)
  172. );
  173. var res = scheduler.Start(() =>
  174. xs.Sum()
  175. );
  176. res.Messages.AssertEqual(
  177. OnNext(250, 0L),
  178. OnCompleted<long>(250)
  179. );
  180. xs.Subscriptions.AssertEqual(
  181. Subscribe(200, 250)
  182. );
  183. }
  184. [TestMethod]
  185. public void Sum_Int64_Return()
  186. {
  187. var scheduler = new TestScheduler();
  188. var xs = scheduler.CreateHotObservable(
  189. OnNext(150, 1L),
  190. OnNext(210, 2L),
  191. OnCompleted<long>(250)
  192. );
  193. var res = scheduler.Start(() =>
  194. xs.Sum()
  195. );
  196. res.Messages.AssertEqual(
  197. OnNext(250, 2L),
  198. OnCompleted<long>(250)
  199. );
  200. xs.Subscriptions.AssertEqual(
  201. Subscribe(200, 250)
  202. );
  203. }
  204. [TestMethod]
  205. public void Sum_Int64_Some()
  206. {
  207. var scheduler = new TestScheduler();
  208. var xs = scheduler.CreateHotObservable(
  209. OnNext(150, 1L),
  210. OnNext(210, 2L),
  211. OnNext(220, 3L),
  212. OnNext(230, 4L),
  213. OnCompleted<long>(250)
  214. );
  215. var res = scheduler.Start(() =>
  216. xs.Sum()
  217. );
  218. res.Messages.AssertEqual(
  219. OnNext(250, 2L + 3L + 4L),
  220. OnCompleted<long>(250)
  221. );
  222. xs.Subscriptions.AssertEqual(
  223. Subscribe(200, 250)
  224. );
  225. }
  226. [TestMethod]
  227. public void Sum_Int64_Overflow()
  228. {
  229. var scheduler = new TestScheduler();
  230. var xs = scheduler.CreateHotObservable(
  231. OnNext(150, 1L),
  232. OnNext(210, long.MaxValue),
  233. OnNext(220, 1L),
  234. OnCompleted<long>(250)
  235. );
  236. var res = scheduler.Start(() =>
  237. xs.Sum()
  238. );
  239. res.Messages.AssertEqual(
  240. OnError<long>(220, e => e is OverflowException)
  241. );
  242. xs.Subscriptions.AssertEqual(
  243. Subscribe(200, 220)
  244. );
  245. }
  246. [TestMethod]
  247. public void Sum_Int64_Throw()
  248. {
  249. var ex = new Exception();
  250. var scheduler = new TestScheduler();
  251. var xs = scheduler.CreateHotObservable(
  252. OnNext(150, 1L),
  253. OnError<long>(210, ex)
  254. );
  255. var res = scheduler.Start(() =>
  256. xs.Sum()
  257. );
  258. res.Messages.AssertEqual(
  259. OnError<long>(210, ex)
  260. );
  261. xs.Subscriptions.AssertEqual(
  262. Subscribe(200, 210)
  263. );
  264. }
  265. [TestMethod]
  266. public void Sum_Int64_Never()
  267. {
  268. var ex = new Exception();
  269. var scheduler = new TestScheduler();
  270. var xs = scheduler.CreateHotObservable(
  271. OnNext(150, 1L)
  272. );
  273. var res = scheduler.Start(() =>
  274. xs.Sum()
  275. );
  276. res.Messages.AssertEqual(
  277. );
  278. xs.Subscriptions.AssertEqual(
  279. Subscribe(200, 1000)
  280. );
  281. }
  282. [TestMethod]
  283. public void Sum_Float_Empty()
  284. {
  285. var scheduler = new TestScheduler();
  286. var xs = scheduler.CreateHotObservable(
  287. OnNext(150, 1f),
  288. OnCompleted<float>(250)
  289. );
  290. var res = scheduler.Start(() =>
  291. xs.Sum()
  292. );
  293. res.Messages.AssertEqual(
  294. OnNext(250, 0f),
  295. OnCompleted<float>(250)
  296. );
  297. xs.Subscriptions.AssertEqual(
  298. Subscribe(200, 250)
  299. );
  300. }
  301. [TestMethod]
  302. public void Sum_Float_Return()
  303. {
  304. var scheduler = new TestScheduler();
  305. var xs = scheduler.CreateHotObservable(
  306. OnNext(150, 1f),
  307. OnNext(210, 2f),
  308. OnCompleted<float>(250)
  309. );
  310. var res = scheduler.Start(() =>
  311. xs.Sum()
  312. );
  313. res.Messages.AssertEqual(
  314. OnNext(250, 2f),
  315. OnCompleted<float>(250)
  316. );
  317. xs.Subscriptions.AssertEqual(
  318. Subscribe(200, 250)
  319. );
  320. }
  321. [TestMethod]
  322. public void Sum_Float_Some()
  323. {
  324. var scheduler = new TestScheduler();
  325. var xs = scheduler.CreateHotObservable(
  326. OnNext(150, 1f),
  327. OnNext(210, 2f),
  328. OnNext(220, 3f),
  329. OnNext(230, 4f),
  330. OnCompleted<float>(250)
  331. );
  332. var res = scheduler.Start(() =>
  333. xs.Sum()
  334. );
  335. res.Messages.AssertEqual(
  336. OnNext(250, 2f + 3f + 4f),
  337. OnCompleted<float>(250)
  338. );
  339. xs.Subscriptions.AssertEqual(
  340. Subscribe(200, 250)
  341. );
  342. }
  343. [TestMethod]
  344. public void Sum_Float_Throw()
  345. {
  346. var ex = new Exception();
  347. var scheduler = new TestScheduler();
  348. var xs = scheduler.CreateHotObservable(
  349. OnNext(150, 1f),
  350. OnError<float>(210, ex)
  351. );
  352. var res = scheduler.Start(() =>
  353. xs.Sum()
  354. );
  355. res.Messages.AssertEqual(
  356. OnError<float>(210, ex)
  357. );
  358. xs.Subscriptions.AssertEqual(
  359. Subscribe(200, 210)
  360. );
  361. }
  362. [TestMethod]
  363. public void Sum_Float_Never()
  364. {
  365. var ex = new Exception();
  366. var scheduler = new TestScheduler();
  367. var xs = scheduler.CreateHotObservable(
  368. OnNext(150, 1f)
  369. );
  370. var res = scheduler.Start(() =>
  371. xs.Sum()
  372. );
  373. res.Messages.AssertEqual(
  374. );
  375. xs.Subscriptions.AssertEqual(
  376. Subscribe(200, 1000)
  377. );
  378. }
  379. [TestMethod]
  380. public void Sum_Double_Empty()
  381. {
  382. var scheduler = new TestScheduler();
  383. var xs = scheduler.CreateHotObservable(
  384. OnNext(150, 1.0),
  385. OnCompleted<double>(250)
  386. );
  387. var res = scheduler.Start(() =>
  388. xs.Sum()
  389. );
  390. res.Messages.AssertEqual(
  391. OnNext(250, 0.0),
  392. OnCompleted<double>(250)
  393. );
  394. xs.Subscriptions.AssertEqual(
  395. Subscribe(200, 250)
  396. );
  397. }
  398. [TestMethod]
  399. public void Sum_Double_Return()
  400. {
  401. var scheduler = new TestScheduler();
  402. var xs = scheduler.CreateHotObservable(
  403. OnNext(150, 1.0),
  404. OnNext(210, 2.0),
  405. OnCompleted<double>(250)
  406. );
  407. var res = scheduler.Start(() =>
  408. xs.Sum()
  409. );
  410. res.Messages.AssertEqual(
  411. OnNext(250, 2.0),
  412. OnCompleted<double>(250)
  413. );
  414. xs.Subscriptions.AssertEqual(
  415. Subscribe(200, 250)
  416. );
  417. }
  418. [TestMethod]
  419. public void Sum_Double_Some()
  420. {
  421. var scheduler = new TestScheduler();
  422. var xs = scheduler.CreateHotObservable(
  423. OnNext(150, 1.0),
  424. OnNext(210, 2.0),
  425. OnNext(220, 3.0),
  426. OnNext(230, 4.0),
  427. OnCompleted<double>(250)
  428. );
  429. var res = scheduler.Start(() =>
  430. xs.Sum()
  431. );
  432. res.Messages.AssertEqual(
  433. OnNext(250, 2.0 + 3.0 + 4.0),
  434. OnCompleted<double>(250)
  435. );
  436. xs.Subscriptions.AssertEqual(
  437. Subscribe(200, 250)
  438. );
  439. }
  440. [TestMethod]
  441. public void Sum_Double_Throw()
  442. {
  443. var ex = new Exception();
  444. var scheduler = new TestScheduler();
  445. var xs = scheduler.CreateHotObservable(
  446. OnNext(150, 1.0),
  447. OnError<double>(210, ex)
  448. );
  449. var res = scheduler.Start(() =>
  450. xs.Sum()
  451. );
  452. res.Messages.AssertEqual(
  453. OnError<double>(210, ex)
  454. );
  455. xs.Subscriptions.AssertEqual(
  456. Subscribe(200, 210)
  457. );
  458. }
  459. [TestMethod]
  460. public void Sum_Double_Never()
  461. {
  462. var ex = new Exception();
  463. var scheduler = new TestScheduler();
  464. var xs = scheduler.CreateHotObservable(
  465. OnNext(150, 1.0)
  466. );
  467. var res = scheduler.Start(() =>
  468. xs.Sum()
  469. );
  470. res.Messages.AssertEqual(
  471. );
  472. xs.Subscriptions.AssertEqual(
  473. Subscribe(200, 1000)
  474. );
  475. }
  476. [TestMethod]
  477. public void Sum_Decimal_Empty()
  478. {
  479. var scheduler = new TestScheduler();
  480. var xs = scheduler.CreateHotObservable(
  481. OnNext(150, 1m),
  482. OnCompleted<decimal>(250)
  483. );
  484. var res = scheduler.Start(() =>
  485. xs.Sum()
  486. );
  487. res.Messages.AssertEqual(
  488. OnNext(250, 0m),
  489. OnCompleted<decimal>(250)
  490. );
  491. xs.Subscriptions.AssertEqual(
  492. Subscribe(200, 250)
  493. );
  494. }
  495. [TestMethod]
  496. public void Sum_Decimal_Return()
  497. {
  498. var scheduler = new TestScheduler();
  499. var xs = scheduler.CreateHotObservable(
  500. OnNext(150, 1m),
  501. OnNext(210, 2m),
  502. OnCompleted<decimal>(250)
  503. );
  504. var res = scheduler.Start(() =>
  505. xs.Sum()
  506. );
  507. res.Messages.AssertEqual(
  508. OnNext(250, 2m),
  509. OnCompleted<decimal>(250)
  510. );
  511. xs.Subscriptions.AssertEqual(
  512. Subscribe(200, 250)
  513. );
  514. }
  515. [TestMethod]
  516. public void Sum_Decimal_Some()
  517. {
  518. var scheduler = new TestScheduler();
  519. var xs = scheduler.CreateHotObservable(
  520. OnNext(150, 1m),
  521. OnNext(210, 2m),
  522. OnNext(220, 3m),
  523. OnNext(230, 4m),
  524. OnCompleted<decimal>(250)
  525. );
  526. var res = scheduler.Start(() =>
  527. xs.Sum()
  528. );
  529. res.Messages.AssertEqual(
  530. OnNext(250, 2m + 3m + 4m),
  531. OnCompleted<decimal>(250)
  532. );
  533. xs.Subscriptions.AssertEqual(
  534. Subscribe(200, 250)
  535. );
  536. }
  537. [TestMethod]
  538. public void Sum_Decimal_Throw()
  539. {
  540. var ex = new Exception();
  541. var scheduler = new TestScheduler();
  542. var xs = scheduler.CreateHotObservable(
  543. OnNext(150, 1m),
  544. OnError<decimal>(210, ex)
  545. );
  546. var res = scheduler.Start(() =>
  547. xs.Sum()
  548. );
  549. res.Messages.AssertEqual(
  550. OnError<decimal>(210, ex)
  551. );
  552. xs.Subscriptions.AssertEqual(
  553. Subscribe(200, 210)
  554. );
  555. }
  556. [TestMethod]
  557. public void Sum_Decimal_Never()
  558. {
  559. var ex = new Exception();
  560. var scheduler = new TestScheduler();
  561. var xs = scheduler.CreateHotObservable(
  562. OnNext(150, 1m)
  563. );
  564. var res = scheduler.Start(() =>
  565. xs.Sum()
  566. );
  567. res.Messages.AssertEqual(
  568. );
  569. xs.Subscriptions.AssertEqual(
  570. Subscribe(200, 1000)
  571. );
  572. }
  573. [TestMethod]
  574. public void Sum_Nullable_Int32_Empty()
  575. {
  576. var scheduler = new TestScheduler();
  577. var xs = scheduler.CreateHotObservable(
  578. OnNext(150, (int?)1),
  579. OnCompleted<int?>(250)
  580. );
  581. var res = scheduler.Start(() =>
  582. xs.Sum()
  583. );
  584. res.Messages.AssertEqual(
  585. OnNext(250, (int?)0),
  586. OnCompleted<int?>(250)
  587. );
  588. xs.Subscriptions.AssertEqual(
  589. Subscribe(200, 250)
  590. );
  591. }
  592. [TestMethod]
  593. public void Sum_Nullable_Int32_Return()
  594. {
  595. var scheduler = new TestScheduler();
  596. var xs = scheduler.CreateHotObservable(
  597. OnNext(150, (int?)1),
  598. OnNext(210, (int?)2),
  599. OnCompleted<int?>(250)
  600. );
  601. var res = scheduler.Start(() =>
  602. xs.Sum()
  603. );
  604. res.Messages.AssertEqual(
  605. OnNext(250, (int?)2),
  606. OnCompleted<int?>(250)
  607. );
  608. xs.Subscriptions.AssertEqual(
  609. Subscribe(200, 250)
  610. );
  611. }
  612. [TestMethod]
  613. public void Sum_Nullable_Int32_Some()
  614. {
  615. var scheduler = new TestScheduler();
  616. var xs = scheduler.CreateHotObservable(
  617. OnNext(150, (int?)1),
  618. OnNext(210, (int?)2),
  619. OnNext(220, (int?)null),
  620. OnNext(230, (int?)4),
  621. OnCompleted<int?>(250)
  622. );
  623. var res = scheduler.Start(() =>
  624. xs.Sum()
  625. );
  626. res.Messages.AssertEqual(
  627. OnNext(250, (int?)(2 + 4)),
  628. OnCompleted<int?>(250)
  629. );
  630. xs.Subscriptions.AssertEqual(
  631. Subscribe(200, 250)
  632. );
  633. }
  634. [TestMethod]
  635. public void Sum_Nullable_Int32_Overflow()
  636. {
  637. var scheduler = new TestScheduler();
  638. var xs = scheduler.CreateHotObservable(
  639. OnNext(150, (int?)1),
  640. OnNext(210, (int?)int.MaxValue),
  641. OnNext(220, (int?)1),
  642. OnCompleted<int?>(250)
  643. );
  644. var res = scheduler.Start(() =>
  645. xs.Sum()
  646. );
  647. res.Messages.AssertEqual(
  648. OnError<int?>(220, e => e is OverflowException)
  649. );
  650. xs.Subscriptions.AssertEqual(
  651. Subscribe(200, 220)
  652. );
  653. }
  654. [TestMethod]
  655. public void Sum_Nullable_Int32_Throw()
  656. {
  657. var ex = new Exception();
  658. var scheduler = new TestScheduler();
  659. var xs = scheduler.CreateHotObservable(
  660. OnNext(150, (int?)1),
  661. OnError<int?>(210, ex)
  662. );
  663. var res = scheduler.Start(() =>
  664. xs.Sum()
  665. );
  666. res.Messages.AssertEqual(
  667. OnError<int?>(210, ex)
  668. );
  669. xs.Subscriptions.AssertEqual(
  670. Subscribe(200, 210)
  671. );
  672. }
  673. [TestMethod]
  674. public void Sum_Nullable_Int32_Never()
  675. {
  676. var ex = new Exception();
  677. var scheduler = new TestScheduler();
  678. var xs = scheduler.CreateHotObservable(
  679. OnNext(150, (int?)1)
  680. );
  681. var res = scheduler.Start(() =>
  682. xs.Sum()
  683. );
  684. res.Messages.AssertEqual(
  685. );
  686. xs.Subscriptions.AssertEqual(
  687. Subscribe(200, 1000)
  688. );
  689. }
  690. [TestMethod]
  691. public void Sum_Nullable_Int64_Empty()
  692. {
  693. var scheduler = new TestScheduler();
  694. var xs = scheduler.CreateHotObservable(
  695. OnNext(150, (long?)1L),
  696. OnCompleted<long?>(250)
  697. );
  698. var res = scheduler.Start(() =>
  699. xs.Sum()
  700. );
  701. res.Messages.AssertEqual(
  702. OnNext(250, (long?)0L),
  703. OnCompleted<long?>(250)
  704. );
  705. xs.Subscriptions.AssertEqual(
  706. Subscribe(200, 250)
  707. );
  708. }
  709. [TestMethod]
  710. public void Sum_Nullable_Int64_Return()
  711. {
  712. var scheduler = new TestScheduler();
  713. var xs = scheduler.CreateHotObservable(
  714. OnNext(150, (long?)1L),
  715. OnNext(210, (long?)2L),
  716. OnCompleted<long?>(250)
  717. );
  718. var res = scheduler.Start(() =>
  719. xs.Sum()
  720. );
  721. res.Messages.AssertEqual(
  722. OnNext(250, (long?)2L),
  723. OnCompleted<long?>(250)
  724. );
  725. xs.Subscriptions.AssertEqual(
  726. Subscribe(200, 250)
  727. );
  728. }
  729. [TestMethod]
  730. public void Sum_Nullable_Int64_Some()
  731. {
  732. var scheduler = new TestScheduler();
  733. var xs = scheduler.CreateHotObservable(
  734. OnNext(150, (long?)1L),
  735. OnNext(210, (long?)2L),
  736. OnNext(220, (long?)null),
  737. OnNext(230, (long?)4L),
  738. OnCompleted<long?>(250)
  739. );
  740. var res = scheduler.Start(() =>
  741. xs.Sum()
  742. );
  743. res.Messages.AssertEqual(
  744. OnNext(250, (long?)(2L + 4L)),
  745. OnCompleted<long?>(250)
  746. );
  747. xs.Subscriptions.AssertEqual(
  748. Subscribe(200, 250)
  749. );
  750. }
  751. [TestMethod]
  752. public void Sum_Nullable_Int64_Overflow()
  753. {
  754. var scheduler = new TestScheduler();
  755. var xs = scheduler.CreateHotObservable(
  756. OnNext(150, (long?)1L),
  757. OnNext(210, (long?)long.MaxValue),
  758. OnNext(220, (long?)1L),
  759. OnCompleted<long?>(250)
  760. );
  761. var res = scheduler.Start(() =>
  762. xs.Sum()
  763. );
  764. res.Messages.AssertEqual(
  765. OnError<long?>(220, e => e is OverflowException)
  766. );
  767. xs.Subscriptions.AssertEqual(
  768. Subscribe(200, 220)
  769. );
  770. }
  771. [TestMethod]
  772. public void Sum_Nullable_Int64_Throw()
  773. {
  774. var ex = new Exception();
  775. var scheduler = new TestScheduler();
  776. var xs = scheduler.CreateHotObservable(
  777. OnNext(150, (long?)1L),
  778. OnError<long?>(210, ex)
  779. );
  780. var res = scheduler.Start(() =>
  781. xs.Sum()
  782. );
  783. res.Messages.AssertEqual(
  784. OnError<long?>(210, ex)
  785. );
  786. xs.Subscriptions.AssertEqual(
  787. Subscribe(200, 210)
  788. );
  789. }
  790. [TestMethod]
  791. public void Sum_Nullable_Int64_Never()
  792. {
  793. var ex = new Exception();
  794. var scheduler = new TestScheduler();
  795. var xs = scheduler.CreateHotObservable(
  796. OnNext(150, (long?)1L)
  797. );
  798. var res = scheduler.Start(() =>
  799. xs.Sum()
  800. );
  801. res.Messages.AssertEqual(
  802. );
  803. xs.Subscriptions.AssertEqual(
  804. Subscribe(200, 1000)
  805. );
  806. }
  807. [TestMethod]
  808. public void Sum_Nullable_Float_Empty()
  809. {
  810. var scheduler = new TestScheduler();
  811. var xs = scheduler.CreateHotObservable(
  812. OnNext(150, (float?)1f),
  813. OnCompleted<float?>(250)
  814. );
  815. var res = scheduler.Start(() =>
  816. xs.Sum()
  817. );
  818. res.Messages.AssertEqual(
  819. OnNext(250, (float?)0f),
  820. OnCompleted<float?>(250)
  821. );
  822. xs.Subscriptions.AssertEqual(
  823. Subscribe(200, 250)
  824. );
  825. }
  826. [TestMethod]
  827. public void Sum_Nullable_Float_Return()
  828. {
  829. var scheduler = new TestScheduler();
  830. var xs = scheduler.CreateHotObservable(
  831. OnNext(150, (float?)1f),
  832. OnNext(210, (float?)2f),
  833. OnCompleted<float?>(250)
  834. );
  835. var res = scheduler.Start(() =>
  836. xs.Sum()
  837. );
  838. res.Messages.AssertEqual(
  839. OnNext(250, (float?)2f),
  840. OnCompleted<float?>(250)
  841. );
  842. xs.Subscriptions.AssertEqual(
  843. Subscribe(200, 250)
  844. );
  845. }
  846. [TestMethod]
  847. public void Sum_Nullable_Float_Some()
  848. {
  849. var scheduler = new TestScheduler();
  850. var xs = scheduler.CreateHotObservable(
  851. OnNext(150, (float?)1f),
  852. OnNext(210, (float?)2f),
  853. OnNext(220, (float?)null),
  854. OnNext(230, (float?)4f),
  855. OnCompleted<float?>(250)
  856. );
  857. var res = scheduler.Start(() =>
  858. xs.Sum()
  859. );
  860. res.Messages.AssertEqual(
  861. OnNext(250, (float?)(2f + 4f)),
  862. OnCompleted<float?>(250)
  863. );
  864. xs.Subscriptions.AssertEqual(
  865. Subscribe(200, 250)
  866. );
  867. }
  868. [TestMethod]
  869. public void Sum_Nullable_Float_Throw()
  870. {
  871. var ex = new Exception();
  872. var scheduler = new TestScheduler();
  873. var xs = scheduler.CreateHotObservable(
  874. OnNext(150, (float?)1f),
  875. OnError<float?>(210, ex)
  876. );
  877. var res = scheduler.Start(() =>
  878. xs.Sum()
  879. );
  880. res.Messages.AssertEqual(
  881. OnError<float?>(210, ex)
  882. );
  883. xs.Subscriptions.AssertEqual(
  884. Subscribe(200, 210)
  885. );
  886. }
  887. [TestMethod]
  888. public void Sum_Nullable_Float_Never()
  889. {
  890. var ex = new Exception();
  891. var scheduler = new TestScheduler();
  892. var xs = scheduler.CreateHotObservable(
  893. OnNext(150, (float?)1f)
  894. );
  895. var res = scheduler.Start(() =>
  896. xs.Sum()
  897. );
  898. res.Messages.AssertEqual(
  899. );
  900. xs.Subscriptions.AssertEqual(
  901. Subscribe(200, 1000)
  902. );
  903. }
  904. [TestMethod]
  905. public void Sum_Nullable_Double_Empty()
  906. {
  907. var scheduler = new TestScheduler();
  908. var xs = scheduler.CreateHotObservable(
  909. OnNext(150, (double?)1.0),
  910. OnCompleted<double?>(250)
  911. );
  912. var res = scheduler.Start(() =>
  913. xs.Sum()
  914. );
  915. res.Messages.AssertEqual(
  916. OnNext(250, (double?)0.0),
  917. OnCompleted<double?>(250)
  918. );
  919. xs.Subscriptions.AssertEqual(
  920. Subscribe(200, 250)
  921. );
  922. }
  923. [TestMethod]
  924. public void Sum_Nullable_Double_Return()
  925. {
  926. var scheduler = new TestScheduler();
  927. var xs = scheduler.CreateHotObservable(
  928. OnNext(150, (double?)1.0),
  929. OnNext(210, (double?)2.0),
  930. OnCompleted<double?>(250)
  931. );
  932. var res = scheduler.Start(() =>
  933. xs.Sum()
  934. );
  935. res.Messages.AssertEqual(
  936. OnNext(250, (double?)2.0),
  937. OnCompleted<double?>(250)
  938. );
  939. xs.Subscriptions.AssertEqual(
  940. Subscribe(200, 250)
  941. );
  942. }
  943. [TestMethod]
  944. public void Sum_Nullable_Double_Some()
  945. {
  946. var scheduler = new TestScheduler();
  947. var xs = scheduler.CreateHotObservable(
  948. OnNext(150, (double?)1.0),
  949. OnNext(210, (double?)2.0),
  950. OnNext(220, (double?)null),
  951. OnNext(230, (double?)4.0),
  952. OnCompleted<double?>(250)
  953. );
  954. var res = scheduler.Start(() =>
  955. xs.Sum()
  956. );
  957. res.Messages.AssertEqual(
  958. OnNext(250, (double?)(2.0 + 4.0)),
  959. OnCompleted<double?>(250)
  960. );
  961. xs.Subscriptions.AssertEqual(
  962. Subscribe(200, 250)
  963. );
  964. }
  965. [TestMethod]
  966. public void Sum_Nullable_Double_Throw()
  967. {
  968. var ex = new Exception();
  969. var scheduler = new TestScheduler();
  970. var xs = scheduler.CreateHotObservable(
  971. OnNext(150, (double?)1.0),
  972. OnError<double?>(210, ex)
  973. );
  974. var res = scheduler.Start(() =>
  975. xs.Sum()
  976. );
  977. res.Messages.AssertEqual(
  978. OnError<double?>(210, ex)
  979. );
  980. xs.Subscriptions.AssertEqual(
  981. Subscribe(200, 210)
  982. );
  983. }
  984. [TestMethod]
  985. public void Sum_Nullable_Double_Never()
  986. {
  987. var ex = new Exception();
  988. var scheduler = new TestScheduler();
  989. var xs = scheduler.CreateHotObservable(
  990. OnNext(150, (double?)1.0)
  991. );
  992. var res = scheduler.Start(() =>
  993. xs.Sum()
  994. );
  995. res.Messages.AssertEqual(
  996. );
  997. xs.Subscriptions.AssertEqual(
  998. Subscribe(200, 1000)
  999. );
  1000. }
  1001. [TestMethod]
  1002. public void Sum_Nullable_Decimal_Empty()
  1003. {
  1004. var scheduler = new TestScheduler();
  1005. var xs = scheduler.CreateHotObservable(
  1006. OnNext(150, (decimal?)1m),
  1007. OnCompleted<decimal?>(250)
  1008. );
  1009. var res = scheduler.Start(() =>
  1010. xs.Sum()
  1011. );
  1012. res.Messages.AssertEqual(
  1013. OnNext(250, (decimal?)0m),
  1014. OnCompleted<decimal?>(250)
  1015. );
  1016. xs.Subscriptions.AssertEqual(
  1017. Subscribe(200, 250)
  1018. );
  1019. }
  1020. [TestMethod]
  1021. public void Sum_Nullable_Decimal_Return()
  1022. {
  1023. var scheduler = new TestScheduler();
  1024. var xs = scheduler.CreateHotObservable(
  1025. OnNext(150, (decimal?)1m),
  1026. OnNext(210, (decimal?)2m),
  1027. OnCompleted<decimal?>(250)
  1028. );
  1029. var res = scheduler.Start(() =>
  1030. xs.Sum()
  1031. );
  1032. res.Messages.AssertEqual(
  1033. OnNext(250, (decimal?)2m),
  1034. OnCompleted<decimal?>(250)
  1035. );
  1036. xs.Subscriptions.AssertEqual(
  1037. Subscribe(200, 250)
  1038. );
  1039. }
  1040. [TestMethod]
  1041. public void Sum_Nullable_Decimal_Some()
  1042. {
  1043. var scheduler = new TestScheduler();
  1044. var xs = scheduler.CreateHotObservable(
  1045. OnNext(150, (decimal?)1m),
  1046. OnNext(210, (decimal?)2m),
  1047. OnNext(220, (decimal?)null),
  1048. OnNext(230, (decimal?)4m),
  1049. OnCompleted<decimal?>(250)
  1050. );
  1051. var res = scheduler.Start(() =>
  1052. xs.Sum()
  1053. );
  1054. res.Messages.AssertEqual(
  1055. OnNext(250, (decimal?)(2m + 4m)),
  1056. OnCompleted<decimal?>(250)
  1057. );
  1058. xs.Subscriptions.AssertEqual(
  1059. Subscribe(200, 250)
  1060. );
  1061. }
  1062. [TestMethod]
  1063. public void Sum_Nullable_Decimal_Throw()
  1064. {
  1065. var ex = new Exception();
  1066. var scheduler = new TestScheduler();
  1067. var xs = scheduler.CreateHotObservable(
  1068. OnNext(150, (decimal?)1m),
  1069. OnError<decimal?>(210, ex)
  1070. );
  1071. var res = scheduler.Start(() =>
  1072. xs.Sum()
  1073. );
  1074. res.Messages.AssertEqual(
  1075. OnError<decimal?>(210, ex)
  1076. );
  1077. xs.Subscriptions.AssertEqual(
  1078. Subscribe(200, 210)
  1079. );
  1080. }
  1081. [TestMethod]
  1082. public void Sum_Nullable_Decimal_Never()
  1083. {
  1084. var ex = new Exception();
  1085. var scheduler = new TestScheduler();
  1086. var xs = scheduler.CreateHotObservable(
  1087. OnNext(150, (decimal?)1m)
  1088. );
  1089. var res = scheduler.Start(() =>
  1090. xs.Sum()
  1091. );
  1092. res.Messages.AssertEqual(
  1093. );
  1094. xs.Subscriptions.AssertEqual(
  1095. Subscribe(200, 1000)
  1096. );
  1097. }
  1098. [TestMethod]
  1099. public void Sum_Selector_Regular_Int32()
  1100. {
  1101. var scheduler = new TestScheduler();
  1102. var xs = scheduler.CreateHotObservable(
  1103. OnNext(210, "fo"),
  1104. OnNext(220, "b"),
  1105. OnNext(230, "qux"),
  1106. OnCompleted<string>(240)
  1107. );
  1108. var res = scheduler.Start(() => xs.Sum(x => x.Length));
  1109. res.Messages.AssertEqual(
  1110. OnNext(240, 6),
  1111. OnCompleted<int>(240)
  1112. );
  1113. xs.Subscriptions.AssertEqual(
  1114. Subscribe(200, 240)
  1115. );
  1116. }
  1117. [TestMethod]
  1118. public void Sum_Selector_Regular_Int64()
  1119. {
  1120. var scheduler = new TestScheduler();
  1121. var xs = scheduler.CreateHotObservable(
  1122. OnNext(210, "fo"),
  1123. OnNext(220, "b"),
  1124. OnNext(230, "qux"),
  1125. OnCompleted<string>(240)
  1126. );
  1127. var res = scheduler.Start(() => xs.Sum(x => (long)x.Length));
  1128. res.Messages.AssertEqual(
  1129. OnNext(240, 6L),
  1130. OnCompleted<long>(240)
  1131. );
  1132. xs.Subscriptions.AssertEqual(
  1133. Subscribe(200, 240)
  1134. );
  1135. }
  1136. [TestMethod]
  1137. public void Sum_Selector_Regular_Single()
  1138. {
  1139. var scheduler = new TestScheduler();
  1140. var xs = scheduler.CreateHotObservable(
  1141. OnNext(210, "fo"),
  1142. OnNext(220, "b"),
  1143. OnNext(230, "qux"),
  1144. OnCompleted<string>(240)
  1145. );
  1146. var res = scheduler.Start(() => xs.Sum(x => (float)x.Length));
  1147. res.Messages.AssertEqual(
  1148. OnNext(240, 6.0f),
  1149. OnCompleted<float>(240)
  1150. );
  1151. xs.Subscriptions.AssertEqual(
  1152. Subscribe(200, 240)
  1153. );
  1154. }
  1155. [TestMethod]
  1156. public void Sum_Selector_Regular_Double()
  1157. {
  1158. var scheduler = new TestScheduler();
  1159. var xs = scheduler.CreateHotObservable(
  1160. OnNext(210, "fo"),
  1161. OnNext(220, "b"),
  1162. OnNext(230, "qux"),
  1163. OnCompleted<string>(240)
  1164. );
  1165. var res = scheduler.Start(() => xs.Sum(x => (double)x.Length));
  1166. res.Messages.AssertEqual(
  1167. OnNext(240, 6.0),
  1168. OnCompleted<double>(240)
  1169. );
  1170. xs.Subscriptions.AssertEqual(
  1171. Subscribe(200, 240)
  1172. );
  1173. }
  1174. [TestMethod]
  1175. public void Sum_Selector_Regular_Decimal()
  1176. {
  1177. var scheduler = new TestScheduler();
  1178. var xs = scheduler.CreateHotObservable(
  1179. OnNext(210, "fo"),
  1180. OnNext(220, "b"),
  1181. OnNext(230, "qux"),
  1182. OnCompleted<string>(240)
  1183. );
  1184. var res = scheduler.Start(() => xs.Sum(x => (decimal)x.Length));
  1185. res.Messages.AssertEqual(
  1186. OnNext(240, 6.0m),
  1187. OnCompleted<decimal>(240)
  1188. );
  1189. xs.Subscriptions.AssertEqual(
  1190. Subscribe(200, 240)
  1191. );
  1192. }
  1193. [TestMethod]
  1194. public void Sum_Selector_Regular_Int32_Nullable()
  1195. {
  1196. var scheduler = new TestScheduler();
  1197. var xs = scheduler.CreateHotObservable(
  1198. OnNext(210, "fo"),
  1199. OnNext(220, "b"),
  1200. OnNext(230, "qux"),
  1201. OnCompleted<string>(240)
  1202. );
  1203. var res = scheduler.Start(() => xs.Sum(x => x == "fo" ? default(int?) : x.Length));
  1204. res.Messages.AssertEqual(
  1205. OnNext(240, (int?)4),
  1206. OnCompleted<int?>(240)
  1207. );
  1208. xs.Subscriptions.AssertEqual(
  1209. Subscribe(200, 240)
  1210. );
  1211. }
  1212. [TestMethod]
  1213. public void Sum_Selector_Regular_Int64_Nullable()
  1214. {
  1215. var scheduler = new TestScheduler();
  1216. var xs = scheduler.CreateHotObservable(
  1217. OnNext(210, "fo"),
  1218. OnNext(220, "b"),
  1219. OnNext(230, "qux"),
  1220. OnCompleted<string>(240)
  1221. );
  1222. var res = scheduler.Start(() => xs.Sum(x => x == "fo" ? default(long?) : x.Length));
  1223. res.Messages.AssertEqual(
  1224. OnNext(240, (long?)4.0),
  1225. OnCompleted<long?>(240)
  1226. );
  1227. xs.Subscriptions.AssertEqual(
  1228. Subscribe(200, 240)
  1229. );
  1230. }
  1231. [TestMethod]
  1232. public void Sum_Selector_Regular_Single_Nullable()
  1233. {
  1234. var scheduler = new TestScheduler();
  1235. var xs = scheduler.CreateHotObservable(
  1236. OnNext(210, "fo"),
  1237. OnNext(220, "b"),
  1238. OnNext(230, "qux"),
  1239. OnCompleted<string>(240)
  1240. );
  1241. var res = scheduler.Start(() => xs.Sum(x => x == "fo" ? default(float?) : x.Length));
  1242. res.Messages.AssertEqual(
  1243. OnNext(240, (float?)4.0),
  1244. OnCompleted<float?>(240)
  1245. );
  1246. xs.Subscriptions.AssertEqual(
  1247. Subscribe(200, 240)
  1248. );
  1249. }
  1250. [TestMethod]
  1251. public void Sum_Selector_Regular_Double_Nullable()
  1252. {
  1253. var scheduler = new TestScheduler();
  1254. var xs = scheduler.CreateHotObservable(
  1255. OnNext(210, "fo"),
  1256. OnNext(220, "b"),
  1257. OnNext(230, "qux"),
  1258. OnCompleted<string>(240)
  1259. );
  1260. var res = scheduler.Start(() => xs.Sum(x => x == "fo" ? default(double?) : x.Length));
  1261. res.Messages.AssertEqual(
  1262. OnNext(240, (double?)4.0),
  1263. OnCompleted<double?>(240)
  1264. );
  1265. xs.Subscriptions.AssertEqual(
  1266. Subscribe(200, 240)
  1267. );
  1268. }
  1269. [TestMethod]
  1270. public void Sum_Selector_Regular_Decimal_Nullable()
  1271. {
  1272. var scheduler = new TestScheduler();
  1273. var xs = scheduler.CreateHotObservable(
  1274. OnNext(210, "fo"),
  1275. OnNext(220, "b"),
  1276. OnNext(230, "qux"),
  1277. OnCompleted<string>(240)
  1278. );
  1279. var res = scheduler.Start(() => xs.Sum(x => x == "fo" ? default(decimal?) : x.Length));
  1280. res.Messages.AssertEqual(
  1281. OnNext(240, (decimal?)4.0),
  1282. OnCompleted<decimal?>(240)
  1283. );
  1284. xs.Subscriptions.AssertEqual(
  1285. Subscribe(200, 240)
  1286. );
  1287. }
  1288. }
  1289. }