CombineLatestTest.cs 197 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815
  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.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Reactive;
  10. using System.Reactive.Concurrency;
  11. using System.Reactive.Linq;
  12. using Microsoft.Reactive.Testing;
  13. using Xunit;
  14. using ReactiveTests.Dummies;
  15. using System.Reflection;
  16. using System.Threading;
  17. using System.Reactive.Disposables;
  18. using System.Reactive.Subjects;
  19. namespace ReactiveTests.Tests
  20. {
  21. public class CombineLatestTest : ReactiveTest
  22. {
  23. #region ArgumentChecking
  24. [Fact]
  25. public void CombineLatest_ArgumentChecking()
  26. {
  27. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest<int, int, int>(DummyObservable<int>.Instance, DummyObservable<int>.Instance, null));
  28. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest<int, int, int>(null, DummyObservable<int>.Instance, (_, __) => 0));
  29. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest<int, int, int>(DummyObservable<int>.Instance, null, (_, __) => 0));
  30. }
  31. [Fact]
  32. public void CombineLatest_ArgumentCheckingHighArity()
  33. {
  34. var xs = DummyObservable<int>.Instance;
  35. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, (_0, _1) => _0 + _1));
  36. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), (_0, _1) => _0 + _1));
  37. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(Func<int, int, int>)));
  38. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, (_0, _1, _2) => _0 + _1 + _2));
  39. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, (_0, _1, _2) => _0 + _1 + _2));
  40. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), (_0, _1, _2) => _0 + _1 + _2));
  41. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(Func<int, int, int, int>)));
  42. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3) => _0 + _1 + _2 + _3));
  43. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3) => _0 + _1 + _2 + _3));
  44. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3) => _0 + _1 + _2 + _3));
  45. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3) => _0 + _1 + _2 + _3));
  46. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(Func<int, int, int, int, int>)));
  47. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  48. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  49. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  50. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  51. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  52. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int>)));
  53. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  54. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  55. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  56. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  57. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  58. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  59. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int>)));
  60. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  61. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  62. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  63. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  64. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  65. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  66. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  67. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int>)));
  68. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7));
  69. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7));
  70. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7));
  71. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7));
  72. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7));
  73. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7));
  74. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7));
  75. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7));
  76. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int>)));
  77. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  78. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  79. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  80. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  81. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  82. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  83. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  84. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  85. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8));
  86. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int>)));
  87. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  88. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  89. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  90. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  91. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  92. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  93. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  94. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  95. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  96. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9));
  97. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int, int>)));
  98. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  99. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  100. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  101. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  102. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  103. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  104. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  105. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  106. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  107. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  108. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10));
  109. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int, int, int>)));
  110. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  111. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  112. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  113. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  114. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  115. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  116. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  117. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  118. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  119. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  120. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  121. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11));
  122. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  123. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  124. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  125. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  126. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  127. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  128. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  129. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  130. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  131. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  132. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  133. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  134. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  135. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12));
  136. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  137. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  138. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  139. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  140. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  141. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  142. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  143. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  144. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  145. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  146. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  147. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  148. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  149. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  150. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13));
  151. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  152. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  153. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  154. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  155. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  156. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  157. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  158. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  159. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  160. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  161. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  162. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  163. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  164. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  165. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  166. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14));
  167. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  168. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  169. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  170. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  171. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  172. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  173. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  174. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  175. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  176. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  177. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  178. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  179. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  180. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  181. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  182. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  183. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15));
  184. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int>)));
  185. }
  186. #endregion
  187. #region Never
  188. [Fact]
  189. public void CombineLatest_NeverN()
  190. {
  191. var scheduler = new TestScheduler();
  192. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  193. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  194. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  195. var res = scheduler.Start(() =>
  196. Observable.CombineLatest(new[] { e0, e1, e2 }, xs => xs.Sum())
  197. );
  198. res.Messages.AssertEqual(
  199. );
  200. foreach (var e in new[] { e0, e1, e2 })
  201. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  202. }
  203. [Fact]
  204. public void CombineLatest_Never2()
  205. {
  206. var scheduler = new TestScheduler();
  207. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  208. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  209. var res = scheduler.Start(() =>
  210. Observable.CombineLatest(e0, e1, (_0, _1) => 42)
  211. );
  212. res.Messages.AssertEqual(
  213. );
  214. foreach (var e in new[] { e0, e1 })
  215. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  216. }
  217. [Fact]
  218. public void CombineLatest_Never3()
  219. {
  220. var scheduler = new TestScheduler();
  221. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  222. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  223. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  224. var res = scheduler.Start(() =>
  225. Observable.CombineLatest(e0, e1, e2, (_0, _1, _2) => 42)
  226. );
  227. res.Messages.AssertEqual(
  228. );
  229. foreach (var e in new[] { e0, e1, e2 })
  230. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  231. }
  232. [Fact]
  233. public void CombineLatest_Never4()
  234. {
  235. var scheduler = new TestScheduler();
  236. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  237. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  238. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  239. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  240. var res = scheduler.Start(() =>
  241. Observable.CombineLatest(e0, e1, e2, e3, (_0, _1, _2, _3) => 42)
  242. );
  243. res.Messages.AssertEqual(
  244. );
  245. foreach (var e in new[] { e0, e1, e2, e3 })
  246. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  247. }
  248. [Fact]
  249. public void CombineLatest_Never5()
  250. {
  251. var scheduler = new TestScheduler();
  252. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  253. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  254. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  255. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  256. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  257. var res = scheduler.Start(() =>
  258. Observable.CombineLatest(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => 42)
  259. );
  260. res.Messages.AssertEqual(
  261. );
  262. foreach (var e in new[] { e0, e1, e2, e3, e4 })
  263. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  264. }
  265. [Fact]
  266. public void CombineLatest_Never6()
  267. {
  268. var scheduler = new TestScheduler();
  269. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  270. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  271. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  272. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  273. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  274. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  275. var res = scheduler.Start(() =>
  276. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => 42)
  277. );
  278. res.Messages.AssertEqual(
  279. );
  280. foreach (var e in new[] { e0, e1, e2, e3, e4, e5 })
  281. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  282. }
  283. [Fact]
  284. public void CombineLatest_Never7()
  285. {
  286. var scheduler = new TestScheduler();
  287. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  288. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  289. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  290. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  291. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  292. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  293. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  294. var res = scheduler.Start(() =>
  295. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => 42)
  296. );
  297. res.Messages.AssertEqual(
  298. );
  299. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6 })
  300. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  301. }
  302. [Fact]
  303. public void CombineLatest_Never8()
  304. {
  305. var scheduler = new TestScheduler();
  306. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  307. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  308. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  309. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  310. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  311. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  312. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  313. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  314. var res = scheduler.Start(() =>
  315. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => 42)
  316. );
  317. res.Messages.AssertEqual(
  318. );
  319. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7 })
  320. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  321. }
  322. [Fact]
  323. public void CombineLatest_Never9()
  324. {
  325. var scheduler = new TestScheduler();
  326. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  327. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  328. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  329. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  330. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  331. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  332. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  333. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  334. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  335. var res = scheduler.Start(() =>
  336. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => 42)
  337. );
  338. res.Messages.AssertEqual(
  339. );
  340. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 })
  341. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  342. }
  343. [Fact]
  344. public void CombineLatest_Never10()
  345. {
  346. var scheduler = new TestScheduler();
  347. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  348. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  349. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  350. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  351. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  352. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  353. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  354. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  355. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  356. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  357. var res = scheduler.Start(() =>
  358. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => 42)
  359. );
  360. res.Messages.AssertEqual(
  361. );
  362. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 })
  363. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  364. }
  365. [Fact]
  366. public void CombineLatest_Never11()
  367. {
  368. var scheduler = new TestScheduler();
  369. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  370. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  371. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  372. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  373. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  374. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  375. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  376. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  377. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  378. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  379. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  380. var res = scheduler.Start(() =>
  381. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => 42)
  382. );
  383. res.Messages.AssertEqual(
  384. );
  385. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 })
  386. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  387. }
  388. [Fact]
  389. public void CombineLatest_Never12()
  390. {
  391. var scheduler = new TestScheduler();
  392. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  393. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  394. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  395. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  396. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  397. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  398. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  399. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  400. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  401. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  402. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  403. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  404. var res = scheduler.Start(() =>
  405. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => 42)
  406. );
  407. res.Messages.AssertEqual(
  408. );
  409. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 })
  410. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  411. }
  412. [Fact]
  413. public void CombineLatest_Never13()
  414. {
  415. var scheduler = new TestScheduler();
  416. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  417. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  418. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  419. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  420. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  421. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  422. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  423. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  424. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  425. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  426. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  427. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  428. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  429. var res = scheduler.Start(() =>
  430. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => 42)
  431. );
  432. res.Messages.AssertEqual(
  433. );
  434. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 })
  435. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  436. }
  437. [Fact]
  438. public void CombineLatest_Never14()
  439. {
  440. var scheduler = new TestScheduler();
  441. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  442. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  443. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  444. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  445. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  446. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  447. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  448. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  449. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  450. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  451. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  452. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  453. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  454. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  455. var res = scheduler.Start(() =>
  456. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => 42)
  457. );
  458. res.Messages.AssertEqual(
  459. );
  460. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 })
  461. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  462. }
  463. [Fact]
  464. public void CombineLatest_Never15()
  465. {
  466. var scheduler = new TestScheduler();
  467. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  468. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  469. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  470. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  471. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  472. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  473. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  474. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  475. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  476. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  477. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  478. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  479. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  480. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  481. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  482. var res = scheduler.Start(() =>
  483. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => 42)
  484. );
  485. res.Messages.AssertEqual(
  486. );
  487. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 })
  488. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  489. }
  490. [Fact]
  491. public void CombineLatest_Never16()
  492. {
  493. var scheduler = new TestScheduler();
  494. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  495. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  496. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  497. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  498. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  499. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  500. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  501. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  502. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  503. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  504. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  505. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  506. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  507. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  508. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  509. var e15 = scheduler.CreateHotObservable(new[] { OnNext(150, 1) });
  510. var res = scheduler.Start(() =>
  511. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => 42)
  512. );
  513. res.Messages.AssertEqual(
  514. );
  515. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 })
  516. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  517. }
  518. #endregion
  519. #region Never/Empty
  520. [Fact]
  521. public void CombineLatest_NeverEmpty()
  522. {
  523. var scheduler = new TestScheduler();
  524. var n = scheduler.CreateHotObservable(
  525. OnNext(150, 1)
  526. );
  527. var e = scheduler.CreateHotObservable(
  528. OnNext(150, 1),
  529. OnCompleted<int>(210)
  530. );
  531. var res = scheduler.Start(() =>
  532. n.CombineLatest(e, (x, y) => x + y)
  533. );
  534. res.Messages.AssertEqual(
  535. );
  536. n.Subscriptions.AssertEqual(
  537. Subscribe(200, 1000)
  538. );
  539. e.Subscriptions.AssertEqual(
  540. Subscribe(200, 210)
  541. );
  542. }
  543. [Fact]
  544. public void CombineLatest_EmptyNever()
  545. {
  546. var scheduler = new TestScheduler();
  547. var e = scheduler.CreateHotObservable(
  548. OnNext(150, 1),
  549. OnCompleted<int>(210)
  550. );
  551. var n = scheduler.CreateHotObservable(
  552. OnNext(150, 1)
  553. );
  554. var res = scheduler.Start(() =>
  555. e.CombineLatest(n, (x, y) => x + y)
  556. );
  557. res.Messages.AssertEqual(
  558. );
  559. n.Subscriptions.AssertEqual(
  560. Subscribe(200, 1000)
  561. );
  562. e.Subscriptions.AssertEqual(
  563. Subscribe(200, 210)
  564. );
  565. }
  566. #endregion
  567. #region Empty
  568. [Fact]
  569. public void CombineLatest_EmptyN()
  570. {
  571. var scheduler = new TestScheduler();
  572. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  573. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  574. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  575. var res = scheduler.Start(() =>
  576. Observable.CombineLatest(new[] { e0, e1, e2 }, xs => xs.Sum())
  577. );
  578. res.Messages.AssertEqual(
  579. OnCompleted<int>(230)
  580. );
  581. var i = 0;
  582. foreach (var e in new[] { e0, e1, e2 })
  583. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  584. }
  585. [Fact]
  586. public void CombineLatest_Empty2()
  587. {
  588. var scheduler = new TestScheduler();
  589. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  590. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  591. var res = scheduler.Start(() =>
  592. Observable.CombineLatest(e0, e1, (_0, _1) => 42)
  593. );
  594. res.Messages.AssertEqual(
  595. OnCompleted<int>(220)
  596. );
  597. var i = 0;
  598. foreach (var e in new[] { e0, e1 })
  599. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  600. }
  601. [Fact]
  602. public void CombineLatest_Empty3()
  603. {
  604. var scheduler = new TestScheduler();
  605. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  606. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  607. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  608. var res = scheduler.Start(() =>
  609. Observable.CombineLatest(e0, e1, e2, (_0, _1, _2) => 42)
  610. );
  611. res.Messages.AssertEqual(
  612. OnCompleted<int>(230)
  613. );
  614. var i = 0;
  615. foreach (var e in new[] { e0, e1, e2 })
  616. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  617. }
  618. [Fact]
  619. public void CombineLatest_Empty4()
  620. {
  621. var scheduler = new TestScheduler();
  622. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  623. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  624. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  625. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  626. var res = scheduler.Start(() =>
  627. Observable.CombineLatest(e0, e1, e2, e3, (_0, _1, _2, _3) => 42)
  628. );
  629. res.Messages.AssertEqual(
  630. OnCompleted<int>(240)
  631. );
  632. var i = 0;
  633. foreach (var e in new[] { e0, e1, e2, e3 })
  634. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  635. }
  636. [Fact]
  637. public void CombineLatest_Empty5()
  638. {
  639. var scheduler = new TestScheduler();
  640. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  641. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  642. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  643. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  644. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  645. var res = scheduler.Start(() =>
  646. Observable.CombineLatest(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => 42)
  647. );
  648. res.Messages.AssertEqual(
  649. OnCompleted<int>(250)
  650. );
  651. var i = 0;
  652. foreach (var e in new[] { e0, e1, e2, e3, e4 })
  653. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  654. }
  655. [Fact]
  656. public void CombineLatest_Empty6()
  657. {
  658. var scheduler = new TestScheduler();
  659. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  660. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  661. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  662. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  663. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  664. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  665. var res = scheduler.Start(() =>
  666. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => 42)
  667. );
  668. res.Messages.AssertEqual(
  669. OnCompleted<int>(260)
  670. );
  671. var i = 0;
  672. foreach (var e in new[] { e0, e1, e2, e3, e4, e5 })
  673. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  674. }
  675. [Fact]
  676. public void CombineLatest_Empty7()
  677. {
  678. var scheduler = new TestScheduler();
  679. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  680. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  681. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  682. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  683. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  684. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  685. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  686. var res = scheduler.Start(() =>
  687. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => 42)
  688. );
  689. res.Messages.AssertEqual(
  690. OnCompleted<int>(270)
  691. );
  692. var i = 0;
  693. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6 })
  694. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  695. }
  696. [Fact]
  697. public void CombineLatest_Empty8()
  698. {
  699. var scheduler = new TestScheduler();
  700. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  701. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  702. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  703. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  704. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  705. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  706. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  707. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  708. var res = scheduler.Start(() =>
  709. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => 42)
  710. );
  711. res.Messages.AssertEqual(
  712. OnCompleted<int>(280)
  713. );
  714. var i = 0;
  715. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7 })
  716. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  717. }
  718. [Fact]
  719. public void CombineLatest_Empty9()
  720. {
  721. var scheduler = new TestScheduler();
  722. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  723. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  724. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  725. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  726. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  727. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  728. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  729. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  730. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  731. var res = scheduler.Start(() =>
  732. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => 42)
  733. );
  734. res.Messages.AssertEqual(
  735. OnCompleted<int>(290)
  736. );
  737. var i = 0;
  738. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 })
  739. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  740. }
  741. [Fact]
  742. public void CombineLatest_Empty10()
  743. {
  744. var scheduler = new TestScheduler();
  745. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  746. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  747. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  748. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  749. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  750. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  751. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  752. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  753. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  754. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  755. var res = scheduler.Start(() =>
  756. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => 42)
  757. );
  758. res.Messages.AssertEqual(
  759. OnCompleted<int>(300)
  760. );
  761. var i = 0;
  762. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 })
  763. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  764. }
  765. [Fact]
  766. public void CombineLatest_Empty11()
  767. {
  768. var scheduler = new TestScheduler();
  769. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  770. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  771. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  772. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  773. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  774. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  775. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  776. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  777. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  778. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  779. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  780. var res = scheduler.Start(() =>
  781. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => 42)
  782. );
  783. res.Messages.AssertEqual(
  784. OnCompleted<int>(310)
  785. );
  786. var i = 0;
  787. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 })
  788. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  789. }
  790. [Fact]
  791. public void CombineLatest_Empty12()
  792. {
  793. var scheduler = new TestScheduler();
  794. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  795. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  796. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  797. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  798. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  799. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  800. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  801. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  802. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  803. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  804. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  805. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  806. var res = scheduler.Start(() =>
  807. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => 42)
  808. );
  809. res.Messages.AssertEqual(
  810. OnCompleted<int>(320)
  811. );
  812. var i = 0;
  813. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 })
  814. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  815. }
  816. [Fact]
  817. public void CombineLatest_Empty13()
  818. {
  819. var scheduler = new TestScheduler();
  820. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  821. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  822. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  823. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  824. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  825. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  826. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  827. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  828. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  829. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  830. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  831. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  832. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  833. var res = scheduler.Start(() =>
  834. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => 42)
  835. );
  836. res.Messages.AssertEqual(
  837. OnCompleted<int>(330)
  838. );
  839. var i = 0;
  840. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 })
  841. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  842. }
  843. [Fact]
  844. public void CombineLatest_Empty14()
  845. {
  846. var scheduler = new TestScheduler();
  847. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  848. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  849. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  850. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  851. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  852. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  853. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  854. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  855. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  856. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  857. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  858. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  859. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  860. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  861. var res = scheduler.Start(() =>
  862. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => 42)
  863. );
  864. res.Messages.AssertEqual(
  865. OnCompleted<int>(340)
  866. );
  867. var i = 0;
  868. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 })
  869. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  870. }
  871. [Fact]
  872. public void CombineLatest_Empty15()
  873. {
  874. var scheduler = new TestScheduler();
  875. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  876. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  877. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  878. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  879. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  880. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  881. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  882. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  883. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  884. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  885. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  886. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  887. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  888. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  889. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(350) });
  890. var res = scheduler.Start(() =>
  891. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => 42)
  892. );
  893. res.Messages.AssertEqual(
  894. OnCompleted<int>(350)
  895. );
  896. var i = 0;
  897. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 })
  898. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  899. }
  900. [Fact]
  901. public void CombineLatest_Empty16()
  902. {
  903. var scheduler = new TestScheduler();
  904. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(210) });
  905. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(220) });
  906. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(230) });
  907. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(240) });
  908. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  909. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  910. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  911. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  912. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  913. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  914. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  915. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  916. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  917. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  918. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(350) });
  919. var e15 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(360) });
  920. var res = scheduler.Start(() =>
  921. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => 42)
  922. );
  923. res.Messages.AssertEqual(
  924. OnCompleted<int>(360)
  925. );
  926. var i = 0;
  927. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 })
  928. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  929. }
  930. #endregion
  931. #region Empty/Return
  932. [Fact]
  933. public void CombineLatest_EmptyReturn()
  934. {
  935. var scheduler = new TestScheduler();
  936. var e = scheduler.CreateHotObservable(
  937. OnNext(150, 1),
  938. OnCompleted<int>(210)
  939. );
  940. var o = scheduler.CreateHotObservable(
  941. OnNext(150, 1),
  942. OnNext(215, 2),
  943. OnCompleted<int>(220)
  944. );
  945. var res = scheduler.Start(() =>
  946. e.CombineLatest(o, (x, y) => x + y)
  947. );
  948. res.Messages.AssertEqual(
  949. OnCompleted<int>(215)
  950. );
  951. e.Subscriptions.AssertEqual(
  952. Subscribe(200, 210)
  953. );
  954. o.Subscriptions.AssertEqual(
  955. Subscribe(200, 215)
  956. );
  957. }
  958. [Fact]
  959. public void CombineLatest_ReturnEmpty()
  960. {
  961. var scheduler = new TestScheduler();
  962. var e = scheduler.CreateHotObservable(
  963. OnNext(150, 1),
  964. OnCompleted<int>(210)
  965. );
  966. var o = scheduler.CreateHotObservable(
  967. OnNext(150, 1),
  968. OnNext(215, 2),
  969. OnCompleted<int>(220)
  970. );
  971. var res = scheduler.Start(() =>
  972. o.CombineLatest(e, (x, y) => x + y)
  973. );
  974. res.Messages.AssertEqual(
  975. OnCompleted<int>(215)
  976. );
  977. e.Subscriptions.AssertEqual(
  978. Subscribe(200, 210)
  979. );
  980. o.Subscriptions.AssertEqual(
  981. Subscribe(200, 215)
  982. );
  983. }
  984. #endregion
  985. #region Never/Return
  986. [Fact]
  987. public void CombineLatest_NeverReturn()
  988. {
  989. var scheduler = new TestScheduler();
  990. var o = scheduler.CreateHotObservable(
  991. OnNext(150, 1),
  992. OnNext(215, 2),
  993. OnCompleted<int>(220)
  994. );
  995. var n = scheduler.CreateHotObservable(
  996. OnNext(150, 1)
  997. );
  998. var res = scheduler.Start(() =>
  999. n.CombineLatest(o, (x, y) => x + y)
  1000. );
  1001. res.Messages.AssertEqual(
  1002. );
  1003. o.Subscriptions.AssertEqual(
  1004. Subscribe(200, 220)
  1005. );
  1006. n.Subscriptions.AssertEqual(
  1007. Subscribe(200, 1000)
  1008. );
  1009. }
  1010. [Fact]
  1011. public void CombineLatest_ReturnNever()
  1012. {
  1013. var scheduler = new TestScheduler();
  1014. var o = scheduler.CreateHotObservable(
  1015. OnNext(150, 1),
  1016. OnNext(215, 2),
  1017. OnCompleted<int>(220)
  1018. );
  1019. var n = scheduler.CreateHotObservable(
  1020. OnNext(150, 1)
  1021. );
  1022. var res = scheduler.Start(() =>
  1023. o.CombineLatest(n, (x, y) => x + y)
  1024. );
  1025. res.Messages.AssertEqual(
  1026. );
  1027. o.Subscriptions.AssertEqual(
  1028. Subscribe(200, 220)
  1029. );
  1030. n.Subscriptions.AssertEqual(
  1031. Subscribe(200, 1000)
  1032. );
  1033. }
  1034. #endregion
  1035. #region Return/Return
  1036. [Fact]
  1037. public void CombineLatest_ReturnReturn()
  1038. {
  1039. var scheduler = new TestScheduler();
  1040. var o1 = scheduler.CreateHotObservable(
  1041. OnNext(150, 1),
  1042. OnNext(215, 2),
  1043. OnCompleted<int>(230)
  1044. );
  1045. var o2 = scheduler.CreateHotObservable(
  1046. OnNext(150, 1),
  1047. OnNext(220, 3),
  1048. OnCompleted<int>(240)
  1049. );
  1050. var res = scheduler.Start(() =>
  1051. o1.CombineLatest(o2, (x, y) => x + y)
  1052. );
  1053. res.Messages.AssertEqual(
  1054. OnNext(220, 2 + 3),
  1055. OnCompleted<int>(240)
  1056. );
  1057. o1.Subscriptions.AssertEqual(
  1058. Subscribe(200, 230)
  1059. );
  1060. o2.Subscriptions.AssertEqual(
  1061. Subscribe(200, 240)
  1062. );
  1063. }
  1064. #endregion
  1065. #region Empty/Error
  1066. [Fact]
  1067. public void CombineLatest_EmptyError()
  1068. {
  1069. var scheduler = new TestScheduler();
  1070. var ex = new Exception();
  1071. var o1 = scheduler.CreateHotObservable(
  1072. OnNext(150, 1),
  1073. OnCompleted<int>(230)
  1074. );
  1075. var o2 = scheduler.CreateHotObservable(
  1076. OnNext(150, 1),
  1077. OnError<int>(220, ex)
  1078. );
  1079. var res = scheduler.Start(() =>
  1080. o1.CombineLatest(o2, (x, y) => x + y)
  1081. );
  1082. res.Messages.AssertEqual(
  1083. OnError<int>(220, ex)
  1084. );
  1085. o1.Subscriptions.AssertEqual(
  1086. Subscribe(200, 220)
  1087. );
  1088. o2.Subscriptions.AssertEqual(
  1089. Subscribe(200, 220)
  1090. );
  1091. }
  1092. [Fact]
  1093. public void CombineLatest_ErrorEmpty()
  1094. {
  1095. var scheduler = new TestScheduler();
  1096. var ex = new Exception();
  1097. var e = scheduler.CreateHotObservable(
  1098. OnNext(150, 1),
  1099. OnCompleted<int>(230)
  1100. );
  1101. var f = scheduler.CreateHotObservable(
  1102. OnNext(150, 1),
  1103. OnError<int>(220, ex)
  1104. );
  1105. var res = scheduler.Start(() =>
  1106. f.CombineLatest(e, (x, y) => x + y)
  1107. );
  1108. res.Messages.AssertEqual(
  1109. OnError<int>(220, ex)
  1110. );
  1111. e.Subscriptions.AssertEqual(
  1112. Subscribe(200, 220)
  1113. );
  1114. f.Subscriptions.AssertEqual(
  1115. Subscribe(200, 220)
  1116. );
  1117. }
  1118. #endregion
  1119. #region Return/Throw
  1120. [Fact]
  1121. public void CombineLatest_ReturnThrow()
  1122. {
  1123. var scheduler = new TestScheduler();
  1124. var ex = new Exception();
  1125. var o1 = scheduler.CreateHotObservable(
  1126. OnNext(150, 1),
  1127. OnNext(210, 2),
  1128. OnCompleted<int>(230)
  1129. );
  1130. var o2 = scheduler.CreateHotObservable(
  1131. OnNext(150, 1),
  1132. OnError<int>(220, ex)
  1133. );
  1134. var res = scheduler.Start(() =>
  1135. o1.CombineLatest(o2, (x, y) => x + y)
  1136. );
  1137. res.Messages.AssertEqual(
  1138. OnError<int>(220, ex)
  1139. );
  1140. o1.Subscriptions.AssertEqual(
  1141. Subscribe(200, 220)
  1142. );
  1143. o2.Subscriptions.AssertEqual(
  1144. Subscribe(200, 220)
  1145. );
  1146. }
  1147. [Fact]
  1148. public void CombineLatest_ThrowReturn()
  1149. {
  1150. var scheduler = new TestScheduler();
  1151. var ex = new Exception();
  1152. var o1 = scheduler.CreateHotObservable(
  1153. OnNext(150, 1),
  1154. OnNext(210, 2),
  1155. OnCompleted<int>(230)
  1156. );
  1157. var o2 = scheduler.CreateHotObservable(
  1158. OnNext(150, 1),
  1159. OnError<int>(220, ex)
  1160. );
  1161. var res = scheduler.Start(() =>
  1162. o2.CombineLatest(o1, (x, y) => x + y)
  1163. );
  1164. res.Messages.AssertEqual(
  1165. OnError<int>(220, ex)
  1166. );
  1167. o1.Subscriptions.AssertEqual(
  1168. Subscribe(200, 220)
  1169. );
  1170. o2.Subscriptions.AssertEqual(
  1171. Subscribe(200, 220)
  1172. );
  1173. }
  1174. #endregion
  1175. #region Throw/Throw
  1176. [Fact]
  1177. public void CombineLatest_ThrowThrow()
  1178. {
  1179. var scheduler = new TestScheduler();
  1180. var ex1 = new Exception();
  1181. var ex2 = new Exception();
  1182. var o1 = scheduler.CreateHotObservable(
  1183. OnNext(150, 1),
  1184. OnError<int>(220, ex1)
  1185. );
  1186. var o2 = scheduler.CreateHotObservable(
  1187. OnNext(150, 1),
  1188. OnError<int>(230, ex2)
  1189. );
  1190. var res = scheduler.Start(() =>
  1191. o2.CombineLatest(o1, (x, y) => x + y)
  1192. );
  1193. res.Messages.AssertEqual(
  1194. OnError<int>(220, ex1)
  1195. );
  1196. o1.Subscriptions.AssertEqual(
  1197. Subscribe(200, 220)
  1198. );
  1199. o2.Subscriptions.AssertEqual(
  1200. Subscribe(200, 220)
  1201. );
  1202. }
  1203. [Fact]
  1204. public void CombineLatest_ErrorThrow()
  1205. {
  1206. var scheduler = new TestScheduler();
  1207. var ex1 = new Exception();
  1208. var ex2 = new Exception();
  1209. var o1 = scheduler.CreateHotObservable(
  1210. OnNext(150, 1),
  1211. OnNext(210, 2),
  1212. OnError<int>(220, ex1)
  1213. );
  1214. var o2 = scheduler.CreateHotObservable(
  1215. OnNext(150, 1),
  1216. OnError<int>(230, ex2)
  1217. );
  1218. var res = scheduler.Start(() =>
  1219. o2.CombineLatest(o1, (x, y) => x + y)
  1220. );
  1221. res.Messages.AssertEqual(
  1222. OnError<int>(220, ex1)
  1223. );
  1224. o1.Subscriptions.AssertEqual(
  1225. Subscribe(200, 220)
  1226. );
  1227. o2.Subscriptions.AssertEqual(
  1228. Subscribe(200, 220)
  1229. );
  1230. }
  1231. [Fact]
  1232. public void CombineLatest_ThrowError()
  1233. {
  1234. var scheduler = new TestScheduler();
  1235. var ex1 = new Exception();
  1236. var ex2 = new Exception();
  1237. var o1 = scheduler.CreateHotObservable(
  1238. OnNext(150, 1),
  1239. OnNext(210, 2),
  1240. OnError<int>(220, ex1)
  1241. );
  1242. var o2 = scheduler.CreateHotObservable(
  1243. OnNext(150, 1),
  1244. OnError<int>(230, ex2)
  1245. );
  1246. var res = scheduler.Start(() =>
  1247. o1.CombineLatest(o2, (x, y) => x + y)
  1248. );
  1249. res.Messages.AssertEqual(
  1250. OnError<int>(220, ex1)
  1251. );
  1252. o1.Subscriptions.AssertEqual(
  1253. Subscribe(200, 220)
  1254. );
  1255. o2.Subscriptions.AssertEqual(
  1256. Subscribe(200, 220)
  1257. );
  1258. }
  1259. #endregion
  1260. #region Never/Throw
  1261. [Fact]
  1262. public void CombineLatest_NeverThrow()
  1263. {
  1264. var scheduler = new TestScheduler();
  1265. var ex = new Exception();
  1266. var o1 = scheduler.CreateHotObservable(
  1267. OnNext(150, 1)
  1268. );
  1269. var o2 = scheduler.CreateHotObservable(
  1270. OnNext(150, 1),
  1271. OnError<int>(220, ex)
  1272. );
  1273. var res = scheduler.Start(() =>
  1274. o1.CombineLatest(o2, (x, y) => x + y)
  1275. );
  1276. res.Messages.AssertEqual(
  1277. OnError<int>(220, ex)
  1278. );
  1279. o1.Subscriptions.AssertEqual(
  1280. Subscribe(200, 220)
  1281. );
  1282. o2.Subscriptions.AssertEqual(
  1283. Subscribe(200, 220)
  1284. );
  1285. }
  1286. [Fact]
  1287. public void CombineLatest_ThrowNever()
  1288. {
  1289. var scheduler = new TestScheduler();
  1290. var ex = new Exception();
  1291. var o1 = scheduler.CreateHotObservable(
  1292. OnNext(150, 1)
  1293. );
  1294. var o2 = scheduler.CreateHotObservable(
  1295. OnNext(150, 1),
  1296. OnError<int>(220, ex)
  1297. );
  1298. var res = scheduler.Start(() =>
  1299. o2.CombineLatest(o1, (x, y) => x + y)
  1300. );
  1301. res.Messages.AssertEqual(
  1302. OnError<int>(220, ex)
  1303. );
  1304. o1.Subscriptions.AssertEqual(
  1305. Subscribe(200, 220)
  1306. );
  1307. o2.Subscriptions.AssertEqual(
  1308. Subscribe(200, 220)
  1309. );
  1310. }
  1311. #endregion
  1312. #region Some/Throw
  1313. [Fact]
  1314. public void CombineLatest_SomeThrow()
  1315. {
  1316. var scheduler = new TestScheduler();
  1317. var ex = new Exception();
  1318. var o1 = scheduler.CreateHotObservable(
  1319. OnNext(150, 1),
  1320. OnNext(215, 2),
  1321. OnCompleted<int>(230)
  1322. );
  1323. var o2 = scheduler.CreateHotObservable(
  1324. OnNext(150, 1),
  1325. OnError<int>(220, ex)
  1326. );
  1327. var res = scheduler.Start(() =>
  1328. o1.CombineLatest(o2, (x, y) => x + y)
  1329. );
  1330. res.Messages.AssertEqual(
  1331. OnError<int>(220, ex)
  1332. );
  1333. o1.Subscriptions.AssertEqual(
  1334. Subscribe(200, 220)
  1335. );
  1336. o2.Subscriptions.AssertEqual(
  1337. Subscribe(200, 220)
  1338. );
  1339. }
  1340. [Fact]
  1341. public void CombineLatest_ThrowSome()
  1342. {
  1343. var scheduler = new TestScheduler();
  1344. var ex = new Exception();
  1345. var o1 = scheduler.CreateHotObservable(
  1346. OnNext(150, 1),
  1347. OnNext(215, 2),
  1348. OnCompleted<int>(230)
  1349. );
  1350. var o2 = scheduler.CreateHotObservable(
  1351. OnNext(150, 1),
  1352. OnError<int>(220, ex)
  1353. );
  1354. var res = scheduler.Start(() =>
  1355. o2.CombineLatest(o1, (x, y) => x + y)
  1356. );
  1357. res.Messages.AssertEqual(
  1358. OnError<int>(220, ex)
  1359. );
  1360. o1.Subscriptions.AssertEqual(
  1361. Subscribe(200, 220)
  1362. );
  1363. o2.Subscriptions.AssertEqual(
  1364. Subscribe(200, 220)
  1365. );
  1366. }
  1367. #endregion
  1368. #region ThrowAfterCompleted
  1369. [Fact]
  1370. public void CombineLatest_ThrowAfterCompleteLeft()
  1371. {
  1372. var scheduler = new TestScheduler();
  1373. var ex = new Exception();
  1374. var o1 = scheduler.CreateHotObservable(
  1375. OnNext(150, 1),
  1376. OnNext(215, 2),
  1377. OnCompleted<int>(220)
  1378. );
  1379. var o2 = scheduler.CreateHotObservable(
  1380. OnNext(150, 1),
  1381. OnError<int>(230, ex)
  1382. );
  1383. var res = scheduler.Start(() =>
  1384. o2.CombineLatest(o1, (x, y) => x + y)
  1385. );
  1386. res.Messages.AssertEqual(
  1387. OnError<int>(230, ex)
  1388. );
  1389. o1.Subscriptions.AssertEqual(
  1390. Subscribe(200, 220)
  1391. );
  1392. o2.Subscriptions.AssertEqual(
  1393. Subscribe(200, 230)
  1394. );
  1395. }
  1396. [Fact]
  1397. public void CombineLatest_ThrowAfterCompleteRight()
  1398. {
  1399. var scheduler = new TestScheduler();
  1400. var ex = new Exception();
  1401. var o1 = scheduler.CreateHotObservable(
  1402. OnNext(150, 1),
  1403. OnNext(215, 2),
  1404. OnCompleted<int>(220)
  1405. );
  1406. var o2 = scheduler.CreateHotObservable(
  1407. OnNext(150, 1),
  1408. OnError<int>(230, ex)
  1409. );
  1410. var res = scheduler.Start(() =>
  1411. o1.CombineLatest(o2, (x, y) => x + y)
  1412. );
  1413. res.Messages.AssertEqual(
  1414. OnError<int>(230, ex)
  1415. );
  1416. o1.Subscriptions.AssertEqual(
  1417. Subscribe(200, 220)
  1418. );
  1419. o2.Subscriptions.AssertEqual(
  1420. Subscribe(200, 230)
  1421. );
  1422. }
  1423. #endregion
  1424. #region Basics
  1425. [Fact]
  1426. public void CombineLatest_InterleavedWithTail()
  1427. {
  1428. var scheduler = new TestScheduler();
  1429. var o1 = scheduler.CreateHotObservable(
  1430. OnNext(150, 1),
  1431. OnNext(215, 2),
  1432. OnNext(225, 4),
  1433. OnCompleted<int>(230)
  1434. );
  1435. var o2 = scheduler.CreateHotObservable(
  1436. OnNext(150, 1),
  1437. OnNext(220, 3),
  1438. OnNext(230, 5),
  1439. OnNext(235, 6),
  1440. OnNext(240, 7),
  1441. OnCompleted<int>(250)
  1442. );
  1443. var res = scheduler.Start(() =>
  1444. o2.CombineLatest(o1, (x, y) => x + y)
  1445. );
  1446. res.Messages.AssertEqual(
  1447. OnNext(220, 2 + 3),
  1448. OnNext(225, 3 + 4),
  1449. OnNext(230, 4 + 5),
  1450. OnNext(235, 4 + 6),
  1451. OnNext(240, 4 + 7),
  1452. OnCompleted<int>(250)
  1453. );
  1454. o1.Subscriptions.AssertEqual(
  1455. Subscribe(200, 230)
  1456. );
  1457. o2.Subscriptions.AssertEqual(
  1458. Subscribe(200, 250)
  1459. );
  1460. }
  1461. [Fact]
  1462. public void CombineLatest_Consecutive()
  1463. {
  1464. var scheduler = new TestScheduler();
  1465. var o1 = scheduler.CreateHotObservable(
  1466. OnNext(150, 1),
  1467. OnNext(215, 2),
  1468. OnNext(225, 4),
  1469. OnCompleted<int>(230)
  1470. );
  1471. var o2 = scheduler.CreateHotObservable(
  1472. OnNext(150, 1),
  1473. OnNext(235, 6),
  1474. OnNext(240, 7),
  1475. OnCompleted<int>(250)
  1476. );
  1477. var res = scheduler.Start(() =>
  1478. o2.CombineLatest(o1, (x, y) => x + y)
  1479. );
  1480. res.Messages.AssertEqual(
  1481. OnNext(235, 4 + 6),
  1482. OnNext(240, 4 + 7),
  1483. OnCompleted<int>(250)
  1484. );
  1485. o1.Subscriptions.AssertEqual(
  1486. Subscribe(200, 230)
  1487. );
  1488. o2.Subscriptions.AssertEqual(
  1489. Subscribe(200, 250)
  1490. );
  1491. }
  1492. [Fact]
  1493. public void CombineLatest_ConsecutiveEndWithErrorLeft()
  1494. {
  1495. var scheduler = new TestScheduler();
  1496. var ex = new Exception();
  1497. var o1 = scheduler.CreateHotObservable(
  1498. OnNext(150, 1),
  1499. OnNext(215, 2),
  1500. OnNext(225, 4),
  1501. OnError<int>(230, ex)
  1502. );
  1503. var o2 = scheduler.CreateHotObservable(
  1504. OnNext(150, 1),
  1505. OnNext(235, 6),
  1506. OnNext(240, 7),
  1507. OnCompleted<int>(250)
  1508. );
  1509. var res = scheduler.Start(() =>
  1510. o2.CombineLatest(o1, (x, y) => x + y)
  1511. );
  1512. res.Messages.AssertEqual(
  1513. OnError<int>(230, ex)
  1514. );
  1515. o1.Subscriptions.AssertEqual(
  1516. Subscribe(200, 230)
  1517. );
  1518. o2.Subscriptions.AssertEqual(
  1519. Subscribe(200, 230)
  1520. );
  1521. }
  1522. [Fact]
  1523. public void CombineLatest_ConsecutiveEndWithErrorRight()
  1524. {
  1525. var scheduler = new TestScheduler();
  1526. var ex = new Exception();
  1527. var o1 = scheduler.CreateHotObservable(
  1528. OnNext(150, 1),
  1529. OnNext(215, 2),
  1530. OnNext(225, 4),
  1531. OnCompleted<int>(250)
  1532. );
  1533. var o2 = scheduler.CreateHotObservable(
  1534. OnNext(150, 1),
  1535. OnNext(235, 6),
  1536. OnNext(240, 7),
  1537. OnError<int>(245, ex)
  1538. );
  1539. var res = scheduler.Start(() =>
  1540. o2.CombineLatest(o1, (x, y) => x + y)
  1541. );
  1542. res.Messages.AssertEqual(
  1543. OnNext(235, 4 + 6),
  1544. OnNext(240, 4 + 7),
  1545. OnError<int>(245, ex)
  1546. );
  1547. o1.Subscriptions.AssertEqual(
  1548. Subscribe(200, 245)
  1549. );
  1550. o2.Subscriptions.AssertEqual(
  1551. Subscribe(200, 245)
  1552. );
  1553. }
  1554. #endregion
  1555. #region SelectorThrows
  1556. [Fact]
  1557. public void CombineLatest_SelectorThrows()
  1558. {
  1559. var scheduler = new TestScheduler();
  1560. var o1 = scheduler.CreateHotObservable(
  1561. OnNext(150, 1),
  1562. OnNext(215, 2),
  1563. OnCompleted<int>(230)
  1564. );
  1565. var o2 = scheduler.CreateHotObservable(
  1566. OnNext(150, 1),
  1567. OnNext(220, 3),
  1568. OnCompleted<int>(240)
  1569. );
  1570. var ex = new Exception();
  1571. var res = scheduler.Start(() =>
  1572. o2.CombineLatest<int, int, int>(o1, (x, y) => { throw ex; })
  1573. );
  1574. res.Messages.AssertEqual(
  1575. OnError<int>(220, ex)
  1576. );
  1577. o1.Subscriptions.AssertEqual(
  1578. Subscribe(200, 220)
  1579. );
  1580. o2.Subscriptions.AssertEqual(
  1581. Subscribe(200, 220)
  1582. );
  1583. }
  1584. [Fact]
  1585. public void CombineLatest_SelectorThrowsN()
  1586. {
  1587. var scheduler = new TestScheduler();
  1588. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1589. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1590. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1591. var ex = new Exception();
  1592. Func<IList<int>, int> f = xs => { throw ex; };
  1593. var res = scheduler.Start(() =>
  1594. Observable.CombineLatest(new[] { e0, e1, e2 }, f)
  1595. );
  1596. res.Messages.AssertEqual(
  1597. OnError<int>(230, ex)
  1598. );
  1599. var es = new[] { e0, e1, e2 };
  1600. foreach (var e in es)
  1601. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1602. }
  1603. [Fact]
  1604. public void CombineLatest_SelectorThrows2()
  1605. {
  1606. var scheduler = new TestScheduler();
  1607. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1608. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1609. var ex = new Exception();
  1610. Func<int> f = () => { throw ex; };
  1611. var res = scheduler.Start(() =>
  1612. Observable.CombineLatest(e0, e1, (_0, _1) => f())
  1613. );
  1614. res.Messages.AssertEqual(
  1615. OnError<int>(220, ex)
  1616. );
  1617. var es = new[] { e0, e1 };
  1618. foreach (var e in es)
  1619. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1620. }
  1621. [Fact]
  1622. public void CombineLatest_SelectorThrows3()
  1623. {
  1624. var scheduler = new TestScheduler();
  1625. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1626. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1627. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1628. var ex = new Exception();
  1629. Func<int> f = () => { throw ex; };
  1630. var res = scheduler.Start(() =>
  1631. Observable.CombineLatest(e0, e1, e2, (_0, _1, _2) => f())
  1632. );
  1633. res.Messages.AssertEqual(
  1634. OnError<int>(230, ex)
  1635. );
  1636. var es = new[] { e0, e1, e2 };
  1637. foreach (var e in es)
  1638. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1639. }
  1640. [Fact]
  1641. public void CombineLatest_SelectorThrows4()
  1642. {
  1643. var scheduler = new TestScheduler();
  1644. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1645. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1646. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1647. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1648. var ex = new Exception();
  1649. Func<int> f = () => { throw ex; };
  1650. var res = scheduler.Start(() =>
  1651. Observable.CombineLatest(e0, e1, e2, e3, (_0, _1, _2, _3) => f())
  1652. );
  1653. res.Messages.AssertEqual(
  1654. OnError<int>(240, ex)
  1655. );
  1656. var es = new[] { e0, e1, e2, e3 };
  1657. foreach (var e in es)
  1658. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1659. }
  1660. [Fact]
  1661. public void CombineLatest_SelectorThrows5()
  1662. {
  1663. var scheduler = new TestScheduler();
  1664. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1665. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1666. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1667. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1668. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1669. var ex = new Exception();
  1670. Func<int> f = () => { throw ex; };
  1671. var res = scheduler.Start(() =>
  1672. Observable.CombineLatest(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => f())
  1673. );
  1674. res.Messages.AssertEqual(
  1675. OnError<int>(250, ex)
  1676. );
  1677. var es = new[] { e0, e1, e2, e3, e4 };
  1678. foreach (var e in es)
  1679. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1680. }
  1681. [Fact]
  1682. public void CombineLatest_SelectorThrows6()
  1683. {
  1684. var scheduler = new TestScheduler();
  1685. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1686. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1687. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1688. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1689. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1690. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1691. var ex = new Exception();
  1692. Func<int> f = () => { throw ex; };
  1693. var res = scheduler.Start(() =>
  1694. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => f())
  1695. );
  1696. res.Messages.AssertEqual(
  1697. OnError<int>(260, ex)
  1698. );
  1699. var es = new[] { e0, e1, e2, e3, e4, e5 };
  1700. foreach (var e in es)
  1701. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1702. }
  1703. [Fact]
  1704. public void CombineLatest_SelectorThrows7()
  1705. {
  1706. var scheduler = new TestScheduler();
  1707. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1708. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1709. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1710. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1711. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1712. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1713. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1714. var ex = new Exception();
  1715. Func<int> f = () => { throw ex; };
  1716. var res = scheduler.Start(() =>
  1717. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => f())
  1718. );
  1719. res.Messages.AssertEqual(
  1720. OnError<int>(270, ex)
  1721. );
  1722. var es = new[] { e0, e1, e2, e3, e4, e5, e6 };
  1723. foreach (var e in es)
  1724. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1725. }
  1726. [Fact]
  1727. public void CombineLatest_SelectorThrows8()
  1728. {
  1729. var scheduler = new TestScheduler();
  1730. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1731. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1732. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1733. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1734. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1735. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1736. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1737. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1738. var ex = new Exception();
  1739. Func<int> f = () => { throw ex; };
  1740. var res = scheduler.Start(() =>
  1741. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => f())
  1742. );
  1743. res.Messages.AssertEqual(
  1744. OnError<int>(280, ex)
  1745. );
  1746. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7 };
  1747. foreach (var e in es)
  1748. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1749. }
  1750. [Fact]
  1751. public void CombineLatest_SelectorThrows9()
  1752. {
  1753. var scheduler = new TestScheduler();
  1754. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1755. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1756. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1757. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1758. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1759. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1760. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1761. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1762. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400) });
  1763. var ex = new Exception();
  1764. Func<int> f = () => { throw ex; };
  1765. var res = scheduler.Start(() =>
  1766. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => f())
  1767. );
  1768. res.Messages.AssertEqual(
  1769. OnError<int>(290, ex)
  1770. );
  1771. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 };
  1772. foreach (var e in es)
  1773. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1774. }
  1775. [Fact]
  1776. public void CombineLatest_SelectorThrows10()
  1777. {
  1778. var scheduler = new TestScheduler();
  1779. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1780. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1781. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1782. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1783. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1784. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1785. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1786. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1787. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400) });
  1788. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400) });
  1789. var ex = new Exception();
  1790. Func<int> f = () => { throw ex; };
  1791. var res = scheduler.Start(() =>
  1792. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => f())
  1793. );
  1794. res.Messages.AssertEqual(
  1795. OnError<int>(300, ex)
  1796. );
  1797. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 };
  1798. foreach (var e in es)
  1799. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1800. }
  1801. [Fact]
  1802. public void CombineLatest_SelectorThrows11()
  1803. {
  1804. var scheduler = new TestScheduler();
  1805. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1806. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1807. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1808. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1809. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1810. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1811. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1812. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1813. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400) });
  1814. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400) });
  1815. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400) });
  1816. var ex = new Exception();
  1817. Func<int> f = () => { throw ex; };
  1818. var res = scheduler.Start(() =>
  1819. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => f())
  1820. );
  1821. res.Messages.AssertEqual(
  1822. OnError<int>(310, ex)
  1823. );
  1824. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 };
  1825. foreach (var e in es)
  1826. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1827. }
  1828. [Fact]
  1829. public void CombineLatest_SelectorThrows12()
  1830. {
  1831. var scheduler = new TestScheduler();
  1832. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1833. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1834. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1835. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1836. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1837. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1838. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1839. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1840. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400) });
  1841. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400) });
  1842. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400) });
  1843. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400) });
  1844. var ex = new Exception();
  1845. Func<int> f = () => { throw ex; };
  1846. var res = scheduler.Start(() =>
  1847. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => f())
  1848. );
  1849. res.Messages.AssertEqual(
  1850. OnError<int>(320, ex)
  1851. );
  1852. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 };
  1853. foreach (var e in es)
  1854. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1855. }
  1856. [Fact]
  1857. public void CombineLatest_SelectorThrows13()
  1858. {
  1859. var scheduler = new TestScheduler();
  1860. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1861. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1862. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1863. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1864. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1865. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1866. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1867. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1868. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400) });
  1869. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400) });
  1870. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400) });
  1871. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400) });
  1872. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400) });
  1873. var ex = new Exception();
  1874. Func<int> f = () => { throw ex; };
  1875. var res = scheduler.Start(() =>
  1876. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => f())
  1877. );
  1878. res.Messages.AssertEqual(
  1879. OnError<int>(330, ex)
  1880. );
  1881. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 };
  1882. foreach (var e in es)
  1883. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1884. }
  1885. [Fact]
  1886. public void CombineLatest_SelectorThrows14()
  1887. {
  1888. var scheduler = new TestScheduler();
  1889. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1890. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1891. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1892. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1893. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1894. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1895. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1896. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1897. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400) });
  1898. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400) });
  1899. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400) });
  1900. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400) });
  1901. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400) });
  1902. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400) });
  1903. var ex = new Exception();
  1904. Func<int> f = () => { throw ex; };
  1905. var res = scheduler.Start(() =>
  1906. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => f())
  1907. );
  1908. res.Messages.AssertEqual(
  1909. OnError<int>(340, ex)
  1910. );
  1911. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 };
  1912. foreach (var e in es)
  1913. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1914. }
  1915. [Fact]
  1916. public void CombineLatest_SelectorThrows15()
  1917. {
  1918. var scheduler = new TestScheduler();
  1919. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1920. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1921. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1922. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1923. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1924. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1925. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1926. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1927. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400) });
  1928. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400) });
  1929. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400) });
  1930. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400) });
  1931. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400) });
  1932. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400) });
  1933. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(350, 15), OnCompleted<int>(400) });
  1934. var ex = new Exception();
  1935. Func<int> f = () => { throw ex; };
  1936. var res = scheduler.Start(() =>
  1937. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => f())
  1938. );
  1939. res.Messages.AssertEqual(
  1940. OnError<int>(350, ex)
  1941. );
  1942. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 };
  1943. foreach (var e in es)
  1944. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1945. }
  1946. [Fact]
  1947. public void CombineLatest_SelectorThrows16()
  1948. {
  1949. var scheduler = new TestScheduler();
  1950. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  1951. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  1952. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400) });
  1953. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  1954. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400) });
  1955. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400) });
  1956. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400) });
  1957. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400) });
  1958. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400) });
  1959. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400) });
  1960. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400) });
  1961. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400) });
  1962. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400) });
  1963. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400) });
  1964. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(350, 15), OnCompleted<int>(400) });
  1965. var e15 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(360, 16), OnCompleted<int>(400) });
  1966. var ex = new Exception();
  1967. Func<int> f = () => { throw ex; };
  1968. var res = scheduler.Start(() =>
  1969. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => f())
  1970. );
  1971. res.Messages.AssertEqual(
  1972. OnError<int>(360, ex)
  1973. );
  1974. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 };
  1975. foreach (var e in es)
  1976. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 10 * es.Length));
  1977. }
  1978. #endregion
  1979. #region AllEmptyButOne
  1980. [Fact]
  1981. public void CombineLatest_WillNeverBeAbleToCombineN()
  1982. {
  1983. var scheduler = new TestScheduler();
  1984. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  1985. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  1986. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  1987. var res = scheduler.Start(() =>
  1988. Observable.CombineLatest(new[] { e0, e1, e2 }, xs => 42)
  1989. );
  1990. res.Messages.AssertEqual(
  1991. OnCompleted<int>(500)
  1992. );
  1993. var i = 0;
  1994. var es = new[] { e0, e1, e2 };
  1995. foreach (var e in es.Take(es.Length - 1))
  1996. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  1997. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  1998. }
  1999. [Fact]
  2000. public void CombineLatest_WillNeverBeAbleToCombine2()
  2001. {
  2002. var scheduler = new TestScheduler();
  2003. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2004. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2005. var res = scheduler.Start(() =>
  2006. Observable.CombineLatest(e0, e1, (_0, _1) => 42)
  2007. );
  2008. res.Messages.AssertEqual(
  2009. OnCompleted<int>(500)
  2010. );
  2011. var i = 0;
  2012. var es = new[] { e0, e1 };
  2013. foreach (var e in es.Take(es.Length - 1))
  2014. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2015. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2016. }
  2017. [Fact]
  2018. public void CombineLatest_WillNeverBeAbleToCombine3()
  2019. {
  2020. var scheduler = new TestScheduler();
  2021. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2022. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2023. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2024. var res = scheduler.Start(() =>
  2025. Observable.CombineLatest(e0, e1, e2, (_0, _1, _2) => 42)
  2026. );
  2027. res.Messages.AssertEqual(
  2028. OnCompleted<int>(500)
  2029. );
  2030. var i = 0;
  2031. var es = new[] { e0, e1, e2 };
  2032. foreach (var e in es.Take(es.Length - 1))
  2033. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2034. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2035. }
  2036. [Fact]
  2037. public void CombineLatest_WillNeverBeAbleToCombine4()
  2038. {
  2039. var scheduler = new TestScheduler();
  2040. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2041. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2042. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2043. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2044. var res = scheduler.Start(() =>
  2045. Observable.CombineLatest(e0, e1, e2, e3, (_0, _1, _2, _3) => 42)
  2046. );
  2047. res.Messages.AssertEqual(
  2048. OnCompleted<int>(500)
  2049. );
  2050. var i = 0;
  2051. var es = new[] { e0, e1, e2, e3 };
  2052. foreach (var e in es.Take(es.Length - 1))
  2053. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2054. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2055. }
  2056. [Fact]
  2057. public void CombineLatest_WillNeverBeAbleToCombine5()
  2058. {
  2059. var scheduler = new TestScheduler();
  2060. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2061. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2062. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2063. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2064. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2065. var res = scheduler.Start(() =>
  2066. Observable.CombineLatest(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => 42)
  2067. );
  2068. res.Messages.AssertEqual(
  2069. OnCompleted<int>(500)
  2070. );
  2071. var i = 0;
  2072. var es = new[] { e0, e1, e2, e3, e4 };
  2073. foreach (var e in es.Take(es.Length - 1))
  2074. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2075. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2076. }
  2077. [Fact]
  2078. public void CombineLatest_WillNeverBeAbleToCombine6()
  2079. {
  2080. var scheduler = new TestScheduler();
  2081. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2082. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2083. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2084. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2085. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2086. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2087. var res = scheduler.Start(() =>
  2088. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => 42)
  2089. );
  2090. res.Messages.AssertEqual(
  2091. OnCompleted<int>(500)
  2092. );
  2093. var i = 0;
  2094. var es = new[] { e0, e1, e2, e3, e4, e5 };
  2095. foreach (var e in es.Take(es.Length - 1))
  2096. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2097. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2098. }
  2099. [Fact]
  2100. public void CombineLatest_WillNeverBeAbleToCombine7()
  2101. {
  2102. var scheduler = new TestScheduler();
  2103. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2104. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2105. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2106. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2107. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2108. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2109. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2110. var res = scheduler.Start(() =>
  2111. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => 42)
  2112. );
  2113. res.Messages.AssertEqual(
  2114. OnCompleted<int>(500)
  2115. );
  2116. var i = 0;
  2117. var es = new[] { e0, e1, e2, e3, e4, e5, e6 };
  2118. foreach (var e in es.Take(es.Length - 1))
  2119. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2120. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2121. }
  2122. [Fact]
  2123. public void CombineLatest_WillNeverBeAbleToCombine8()
  2124. {
  2125. var scheduler = new TestScheduler();
  2126. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2127. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2128. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2129. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2130. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2131. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2132. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2133. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2134. var res = scheduler.Start(() =>
  2135. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => 42)
  2136. );
  2137. res.Messages.AssertEqual(
  2138. OnCompleted<int>(500)
  2139. );
  2140. var i = 0;
  2141. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7 };
  2142. foreach (var e in es.Take(es.Length - 1))
  2143. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2144. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2145. }
  2146. [Fact]
  2147. public void CombineLatest_WillNeverBeAbleToCombine9()
  2148. {
  2149. var scheduler = new TestScheduler();
  2150. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2151. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2152. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2153. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2154. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2155. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2156. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2157. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  2158. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2159. var res = scheduler.Start(() =>
  2160. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => 42)
  2161. );
  2162. res.Messages.AssertEqual(
  2163. OnCompleted<int>(500)
  2164. );
  2165. var i = 0;
  2166. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 };
  2167. foreach (var e in es.Take(es.Length - 1))
  2168. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2169. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2170. }
  2171. [Fact]
  2172. public void CombineLatest_WillNeverBeAbleToCombine10()
  2173. {
  2174. var scheduler = new TestScheduler();
  2175. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2176. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2177. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2178. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2179. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2180. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2181. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2182. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  2183. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  2184. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2185. var res = scheduler.Start(() =>
  2186. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => 42)
  2187. );
  2188. res.Messages.AssertEqual(
  2189. OnCompleted<int>(500)
  2190. );
  2191. var i = 0;
  2192. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 };
  2193. foreach (var e in es.Take(es.Length - 1))
  2194. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2195. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2196. }
  2197. [Fact]
  2198. public void CombineLatest_WillNeverBeAbleToCombine11()
  2199. {
  2200. var scheduler = new TestScheduler();
  2201. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2202. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2203. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2204. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2205. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2206. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2207. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2208. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  2209. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  2210. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  2211. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2212. var res = scheduler.Start(() =>
  2213. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => 42)
  2214. );
  2215. res.Messages.AssertEqual(
  2216. OnCompleted<int>(500)
  2217. );
  2218. var i = 0;
  2219. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 };
  2220. foreach (var e in es.Take(es.Length - 1))
  2221. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2222. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2223. }
  2224. [Fact]
  2225. public void CombineLatest_WillNeverBeAbleToCombine12()
  2226. {
  2227. var scheduler = new TestScheduler();
  2228. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2229. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2230. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2231. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2232. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2233. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2234. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2235. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  2236. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  2237. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  2238. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(350) });
  2239. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2240. var res = scheduler.Start(() =>
  2241. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => 42)
  2242. );
  2243. res.Messages.AssertEqual(
  2244. OnCompleted<int>(500)
  2245. );
  2246. var i = 0;
  2247. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 };
  2248. foreach (var e in es.Take(es.Length - 1))
  2249. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2250. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2251. }
  2252. [Fact]
  2253. public void CombineLatest_WillNeverBeAbleToCombine13()
  2254. {
  2255. var scheduler = new TestScheduler();
  2256. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2257. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2258. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2259. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2260. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2261. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2262. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2263. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  2264. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  2265. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  2266. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(350) });
  2267. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(360) });
  2268. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2269. var res = scheduler.Start(() =>
  2270. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => 42)
  2271. );
  2272. res.Messages.AssertEqual(
  2273. OnCompleted<int>(500)
  2274. );
  2275. var i = 0;
  2276. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 };
  2277. foreach (var e in es.Take(es.Length - 1))
  2278. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2279. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2280. }
  2281. [Fact]
  2282. public void CombineLatest_WillNeverBeAbleToCombine14()
  2283. {
  2284. var scheduler = new TestScheduler();
  2285. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2286. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2287. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2288. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2289. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2290. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2291. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2292. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  2293. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  2294. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  2295. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(350) });
  2296. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(360) });
  2297. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(370) });
  2298. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2299. var res = scheduler.Start(() =>
  2300. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => 42)
  2301. );
  2302. res.Messages.AssertEqual(
  2303. OnCompleted<int>(500)
  2304. );
  2305. var i = 0;
  2306. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 };
  2307. foreach (var e in es.Take(es.Length - 1))
  2308. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2309. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2310. }
  2311. [Fact]
  2312. public void CombineLatest_WillNeverBeAbleToCombine15()
  2313. {
  2314. var scheduler = new TestScheduler();
  2315. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2316. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2317. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2318. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2319. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2320. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2321. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2322. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  2323. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  2324. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  2325. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(350) });
  2326. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(360) });
  2327. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(370) });
  2328. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(380) });
  2329. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2330. var res = scheduler.Start(() =>
  2331. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => 42)
  2332. );
  2333. res.Messages.AssertEqual(
  2334. OnCompleted<int>(500)
  2335. );
  2336. var i = 0;
  2337. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 };
  2338. foreach (var e in es.Take(es.Length - 1))
  2339. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2340. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2341. }
  2342. [Fact]
  2343. public void CombineLatest_WillNeverBeAbleToCombine16()
  2344. {
  2345. var scheduler = new TestScheduler();
  2346. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(250) });
  2347. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(260) });
  2348. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(270) });
  2349. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(280) });
  2350. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(290) });
  2351. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(300) });
  2352. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(310) });
  2353. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(320) });
  2354. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(330) });
  2355. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(340) });
  2356. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(350) });
  2357. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(360) });
  2358. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(370) });
  2359. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(380) });
  2360. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnCompleted<int>(390) });
  2361. var e15 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(500, 2), OnCompleted<int>(800) });
  2362. var res = scheduler.Start(() =>
  2363. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => 42)
  2364. );
  2365. res.Messages.AssertEqual(
  2366. OnCompleted<int>(500)
  2367. );
  2368. var i = 0;
  2369. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 };
  2370. foreach (var e in es.Take(es.Length - 1))
  2371. e.Subscriptions.AssertEqual(Subscribe(200, 200 + 50 + (i++ * 10)));
  2372. es.Last().Subscriptions.AssertEqual(Subscribe(200, 500));
  2373. }
  2374. #endregion
  2375. #region Typical
  2376. [Fact]
  2377. public void CombineLatest_TypicalN()
  2378. {
  2379. var scheduler = new TestScheduler();
  2380. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 4), OnCompleted<int>(800) });
  2381. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 5), OnCompleted<int>(800) });
  2382. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 6), OnCompleted<int>(800) });
  2383. var res = scheduler.Start(() =>
  2384. Observable.CombineLatest(new[] { e0, e1, e2 }, xs => xs.Sum())
  2385. );
  2386. res.Messages.AssertEqual(
  2387. OnNext(230, 6),
  2388. OnNext(410, 9),
  2389. OnNext(420, 12),
  2390. OnNext(430, 15),
  2391. OnCompleted<int>(800)
  2392. );
  2393. foreach (var e in new[] { e0, e1, e2 })
  2394. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2395. }
  2396. [Fact]
  2397. public void CombineLatest_Typical2()
  2398. {
  2399. var scheduler = new TestScheduler();
  2400. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 3), OnCompleted<int>(800) });
  2401. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 4), OnCompleted<int>(800) });
  2402. var res = scheduler.Start(() =>
  2403. Observable.CombineLatest(e0, e1, (_0, _1) => _0 + _1)
  2404. );
  2405. res.Messages.AssertEqual(
  2406. OnNext(220, 3),
  2407. OnNext(410, 5),
  2408. OnNext(420, 7),
  2409. OnCompleted<int>(800)
  2410. );
  2411. foreach (var e in new[] { e0, e1 })
  2412. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2413. }
  2414. [Fact]
  2415. public void CombineLatest_Typical3()
  2416. {
  2417. var scheduler = new TestScheduler();
  2418. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 4), OnCompleted<int>(800) });
  2419. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 5), OnCompleted<int>(800) });
  2420. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 6), OnCompleted<int>(800) });
  2421. var res = scheduler.Start(() =>
  2422. Observable.CombineLatest(e0, e1, e2, (_0, _1, _2) => _0 + _1 + _2)
  2423. );
  2424. res.Messages.AssertEqual(
  2425. OnNext(230, 6),
  2426. OnNext(410, 9),
  2427. OnNext(420, 12),
  2428. OnNext(430, 15),
  2429. OnCompleted<int>(800)
  2430. );
  2431. foreach (var e in new[] { e0, e1, e2 })
  2432. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2433. }
  2434. [Fact]
  2435. public void CombineLatest_Typical4()
  2436. {
  2437. var scheduler = new TestScheduler();
  2438. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 5), OnCompleted<int>(800) });
  2439. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 6), OnCompleted<int>(800) });
  2440. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 7), OnCompleted<int>(800) });
  2441. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 8), OnCompleted<int>(800) });
  2442. var res = scheduler.Start(() =>
  2443. Observable.CombineLatest(e0, e1, e2, e3, (_0, _1, _2, _3) => _0 + _1 + _2 + _3)
  2444. );
  2445. res.Messages.AssertEqual(
  2446. OnNext(240, 10),
  2447. OnNext(410, 14),
  2448. OnNext(420, 18),
  2449. OnNext(430, 22),
  2450. OnNext(440, 26),
  2451. OnCompleted<int>(800)
  2452. );
  2453. foreach (var e in new[] { e0, e1, e2, e3 })
  2454. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2455. }
  2456. [Fact]
  2457. public void CombineLatest_Typical5()
  2458. {
  2459. var scheduler = new TestScheduler();
  2460. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 6), OnCompleted<int>(800) });
  2461. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 7), OnCompleted<int>(800) });
  2462. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 8), OnCompleted<int>(800) });
  2463. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 9), OnCompleted<int>(800) });
  2464. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 10), OnCompleted<int>(800) });
  2465. var res = scheduler.Start(() =>
  2466. Observable.CombineLatest(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4)
  2467. );
  2468. res.Messages.AssertEqual(
  2469. OnNext(250, 15),
  2470. OnNext(410, 20),
  2471. OnNext(420, 25),
  2472. OnNext(430, 30),
  2473. OnNext(440, 35),
  2474. OnNext(450, 40),
  2475. OnCompleted<int>(800)
  2476. );
  2477. foreach (var e in new[] { e0, e1, e2, e3, e4 })
  2478. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2479. }
  2480. [Fact]
  2481. public void CombineLatest_Typical6()
  2482. {
  2483. var scheduler = new TestScheduler();
  2484. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 7), OnCompleted<int>(800) });
  2485. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 8), OnCompleted<int>(800) });
  2486. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 9), OnCompleted<int>(800) });
  2487. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 10), OnCompleted<int>(800) });
  2488. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 11), OnCompleted<int>(800) });
  2489. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 12), OnCompleted<int>(800) });
  2490. var res = scheduler.Start(() =>
  2491. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5)
  2492. );
  2493. res.Messages.AssertEqual(
  2494. OnNext(260, 21),
  2495. OnNext(410, 27),
  2496. OnNext(420, 33),
  2497. OnNext(430, 39),
  2498. OnNext(440, 45),
  2499. OnNext(450, 51),
  2500. OnNext(460, 57),
  2501. OnCompleted<int>(800)
  2502. );
  2503. foreach (var e in new[] { e0, e1, e2, e3, e4, e5 })
  2504. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2505. }
  2506. [Fact]
  2507. public void CombineLatest_Typical7()
  2508. {
  2509. var scheduler = new TestScheduler();
  2510. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 8), OnCompleted<int>(800) });
  2511. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 9), OnCompleted<int>(800) });
  2512. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 10), OnCompleted<int>(800) });
  2513. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 11), OnCompleted<int>(800) });
  2514. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 12), OnCompleted<int>(800) });
  2515. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 13), OnCompleted<int>(800) });
  2516. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 14), OnCompleted<int>(800) });
  2517. var res = scheduler.Start(() =>
  2518. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6)
  2519. );
  2520. res.Messages.AssertEqual(
  2521. OnNext(270, 28),
  2522. OnNext(410, 35),
  2523. OnNext(420, 42),
  2524. OnNext(430, 49),
  2525. OnNext(440, 56),
  2526. OnNext(450, 63),
  2527. OnNext(460, 70),
  2528. OnNext(470, 77),
  2529. OnCompleted<int>(800)
  2530. );
  2531. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6 })
  2532. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2533. }
  2534. [Fact]
  2535. public void CombineLatest_Typical8()
  2536. {
  2537. var scheduler = new TestScheduler();
  2538. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 9), OnCompleted<int>(800) });
  2539. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 10), OnCompleted<int>(800) });
  2540. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 11), OnCompleted<int>(800) });
  2541. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 12), OnCompleted<int>(800) });
  2542. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 13), OnCompleted<int>(800) });
  2543. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 14), OnCompleted<int>(800) });
  2544. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 15), OnCompleted<int>(800) });
  2545. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 16), OnCompleted<int>(800) });
  2546. var res = scheduler.Start(() =>
  2547. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7)
  2548. );
  2549. res.Messages.AssertEqual(
  2550. OnNext(280, 36),
  2551. OnNext(410, 44),
  2552. OnNext(420, 52),
  2553. OnNext(430, 60),
  2554. OnNext(440, 68),
  2555. OnNext(450, 76),
  2556. OnNext(460, 84),
  2557. OnNext(470, 92),
  2558. OnNext(480, 100),
  2559. OnCompleted<int>(800)
  2560. );
  2561. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7 })
  2562. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2563. }
  2564. [Fact]
  2565. public void CombineLatest_Typical9()
  2566. {
  2567. var scheduler = new TestScheduler();
  2568. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 10), OnCompleted<int>(800) });
  2569. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 11), OnCompleted<int>(800) });
  2570. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 12), OnCompleted<int>(800) });
  2571. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 13), OnCompleted<int>(800) });
  2572. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 14), OnCompleted<int>(800) });
  2573. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 15), OnCompleted<int>(800) });
  2574. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 16), OnCompleted<int>(800) });
  2575. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 17), OnCompleted<int>(800) });
  2576. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnNext(490, 18), OnCompleted<int>(800) });
  2577. var res = scheduler.Start(() =>
  2578. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8)
  2579. );
  2580. res.Messages.AssertEqual(
  2581. OnNext(290, 45),
  2582. OnNext(410, 54),
  2583. OnNext(420, 63),
  2584. OnNext(430, 72),
  2585. OnNext(440, 81),
  2586. OnNext(450, 90),
  2587. OnNext(460, 99),
  2588. OnNext(470, 108),
  2589. OnNext(480, 117),
  2590. OnNext(490, 126),
  2591. OnCompleted<int>(800)
  2592. );
  2593. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 })
  2594. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2595. }
  2596. [Fact]
  2597. public void CombineLatest_Typical10()
  2598. {
  2599. var scheduler = new TestScheduler();
  2600. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 11), OnCompleted<int>(800) });
  2601. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 12), OnCompleted<int>(800) });
  2602. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 13), OnCompleted<int>(800) });
  2603. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 14), OnCompleted<int>(800) });
  2604. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 15), OnCompleted<int>(800) });
  2605. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 16), OnCompleted<int>(800) });
  2606. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 17), OnCompleted<int>(800) });
  2607. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 18), OnCompleted<int>(800) });
  2608. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnNext(490, 19), OnCompleted<int>(800) });
  2609. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnNext(500, 20), OnCompleted<int>(800) });
  2610. var res = scheduler.Start(() =>
  2611. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9)
  2612. );
  2613. res.Messages.AssertEqual(
  2614. OnNext(300, 55),
  2615. OnNext(410, 65),
  2616. OnNext(420, 75),
  2617. OnNext(430, 85),
  2618. OnNext(440, 95),
  2619. OnNext(450, 105),
  2620. OnNext(460, 115),
  2621. OnNext(470, 125),
  2622. OnNext(480, 135),
  2623. OnNext(490, 145),
  2624. OnNext(500, 155),
  2625. OnCompleted<int>(800)
  2626. );
  2627. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 })
  2628. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2629. }
  2630. [Fact]
  2631. public void CombineLatest_Typical11()
  2632. {
  2633. var scheduler = new TestScheduler();
  2634. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 12), OnCompleted<int>(800) });
  2635. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 13), OnCompleted<int>(800) });
  2636. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 14), OnCompleted<int>(800) });
  2637. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 15), OnCompleted<int>(800) });
  2638. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 16), OnCompleted<int>(800) });
  2639. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 17), OnCompleted<int>(800) });
  2640. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 18), OnCompleted<int>(800) });
  2641. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 19), OnCompleted<int>(800) });
  2642. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnNext(490, 20), OnCompleted<int>(800) });
  2643. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnNext(500, 21), OnCompleted<int>(800) });
  2644. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnNext(510, 22), OnCompleted<int>(800) });
  2645. var res = scheduler.Start(() =>
  2646. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10)
  2647. );
  2648. res.Messages.AssertEqual(
  2649. OnNext(310, 66),
  2650. OnNext(410, 77),
  2651. OnNext(420, 88),
  2652. OnNext(430, 99),
  2653. OnNext(440, 110),
  2654. OnNext(450, 121),
  2655. OnNext(460, 132),
  2656. OnNext(470, 143),
  2657. OnNext(480, 154),
  2658. OnNext(490, 165),
  2659. OnNext(500, 176),
  2660. OnNext(510, 187),
  2661. OnCompleted<int>(800)
  2662. );
  2663. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 })
  2664. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2665. }
  2666. [Fact]
  2667. public void CombineLatest_Typical12()
  2668. {
  2669. var scheduler = new TestScheduler();
  2670. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 13), OnCompleted<int>(800) });
  2671. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 14), OnCompleted<int>(800) });
  2672. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 15), OnCompleted<int>(800) });
  2673. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 16), OnCompleted<int>(800) });
  2674. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 17), OnCompleted<int>(800) });
  2675. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 18), OnCompleted<int>(800) });
  2676. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 19), OnCompleted<int>(800) });
  2677. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 20), OnCompleted<int>(800) });
  2678. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnNext(490, 21), OnCompleted<int>(800) });
  2679. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnNext(500, 22), OnCompleted<int>(800) });
  2680. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnNext(510, 23), OnCompleted<int>(800) });
  2681. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnNext(520, 24), OnCompleted<int>(800) });
  2682. var res = scheduler.Start(() =>
  2683. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11)
  2684. );
  2685. res.Messages.AssertEqual(
  2686. OnNext(320, 78),
  2687. OnNext(410, 90),
  2688. OnNext(420, 102),
  2689. OnNext(430, 114),
  2690. OnNext(440, 126),
  2691. OnNext(450, 138),
  2692. OnNext(460, 150),
  2693. OnNext(470, 162),
  2694. OnNext(480, 174),
  2695. OnNext(490, 186),
  2696. OnNext(500, 198),
  2697. OnNext(510, 210),
  2698. OnNext(520, 222),
  2699. OnCompleted<int>(800)
  2700. );
  2701. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 })
  2702. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2703. }
  2704. [Fact]
  2705. public void CombineLatest_Typical13()
  2706. {
  2707. var scheduler = new TestScheduler();
  2708. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 14), OnCompleted<int>(800) });
  2709. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 15), OnCompleted<int>(800) });
  2710. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 16), OnCompleted<int>(800) });
  2711. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 17), OnCompleted<int>(800) });
  2712. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 18), OnCompleted<int>(800) });
  2713. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 19), OnCompleted<int>(800) });
  2714. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 20), OnCompleted<int>(800) });
  2715. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 21), OnCompleted<int>(800) });
  2716. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnNext(490, 22), OnCompleted<int>(800) });
  2717. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnNext(500, 23), OnCompleted<int>(800) });
  2718. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnNext(510, 24), OnCompleted<int>(800) });
  2719. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnNext(520, 25), OnCompleted<int>(800) });
  2720. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(330, 13), OnNext(530, 26), OnCompleted<int>(800) });
  2721. var res = scheduler.Start(() =>
  2722. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12)
  2723. );
  2724. res.Messages.AssertEqual(
  2725. OnNext(330, 91),
  2726. OnNext(410, 104),
  2727. OnNext(420, 117),
  2728. OnNext(430, 130),
  2729. OnNext(440, 143),
  2730. OnNext(450, 156),
  2731. OnNext(460, 169),
  2732. OnNext(470, 182),
  2733. OnNext(480, 195),
  2734. OnNext(490, 208),
  2735. OnNext(500, 221),
  2736. OnNext(510, 234),
  2737. OnNext(520, 247),
  2738. OnNext(530, 260),
  2739. OnCompleted<int>(800)
  2740. );
  2741. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 })
  2742. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2743. }
  2744. [Fact]
  2745. public void CombineLatest_Typical14()
  2746. {
  2747. var scheduler = new TestScheduler();
  2748. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 15), OnCompleted<int>(800) });
  2749. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 16), OnCompleted<int>(800) });
  2750. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 17), OnCompleted<int>(800) });
  2751. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 18), OnCompleted<int>(800) });
  2752. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 19), OnCompleted<int>(800) });
  2753. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 20), OnCompleted<int>(800) });
  2754. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 21), OnCompleted<int>(800) });
  2755. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 22), OnCompleted<int>(800) });
  2756. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnNext(490, 23), OnCompleted<int>(800) });
  2757. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnNext(500, 24), OnCompleted<int>(800) });
  2758. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnNext(510, 25), OnCompleted<int>(800) });
  2759. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnNext(520, 26), OnCompleted<int>(800) });
  2760. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(330, 13), OnNext(530, 27), OnCompleted<int>(800) });
  2761. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(340, 14), OnNext(540, 28), OnCompleted<int>(800) });
  2762. var res = scheduler.Start(() =>
  2763. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13)
  2764. );
  2765. res.Messages.AssertEqual(
  2766. OnNext(340, 105),
  2767. OnNext(410, 119),
  2768. OnNext(420, 133),
  2769. OnNext(430, 147),
  2770. OnNext(440, 161),
  2771. OnNext(450, 175),
  2772. OnNext(460, 189),
  2773. OnNext(470, 203),
  2774. OnNext(480, 217),
  2775. OnNext(490, 231),
  2776. OnNext(500, 245),
  2777. OnNext(510, 259),
  2778. OnNext(520, 273),
  2779. OnNext(530, 287),
  2780. OnNext(540, 301),
  2781. OnCompleted<int>(800)
  2782. );
  2783. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 })
  2784. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2785. }
  2786. [Fact]
  2787. public void CombineLatest_Typical15()
  2788. {
  2789. var scheduler = new TestScheduler();
  2790. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 16), OnCompleted<int>(800) });
  2791. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 17), OnCompleted<int>(800) });
  2792. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 18), OnCompleted<int>(800) });
  2793. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 19), OnCompleted<int>(800) });
  2794. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 20), OnCompleted<int>(800) });
  2795. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 21), OnCompleted<int>(800) });
  2796. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 22), OnCompleted<int>(800) });
  2797. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 23), OnCompleted<int>(800) });
  2798. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnNext(490, 24), OnCompleted<int>(800) });
  2799. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnNext(500, 25), OnCompleted<int>(800) });
  2800. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnNext(510, 26), OnCompleted<int>(800) });
  2801. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnNext(520, 27), OnCompleted<int>(800) });
  2802. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(330, 13), OnNext(530, 28), OnCompleted<int>(800) });
  2803. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(340, 14), OnNext(540, 29), OnCompleted<int>(800) });
  2804. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(350, 15), OnNext(550, 30), OnCompleted<int>(800) });
  2805. var res = scheduler.Start(() =>
  2806. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14)
  2807. );
  2808. res.Messages.AssertEqual(
  2809. OnNext(350, 120),
  2810. OnNext(410, 135),
  2811. OnNext(420, 150),
  2812. OnNext(430, 165),
  2813. OnNext(440, 180),
  2814. OnNext(450, 195),
  2815. OnNext(460, 210),
  2816. OnNext(470, 225),
  2817. OnNext(480, 240),
  2818. OnNext(490, 255),
  2819. OnNext(500, 270),
  2820. OnNext(510, 285),
  2821. OnNext(520, 300),
  2822. OnNext(530, 315),
  2823. OnNext(540, 330),
  2824. OnNext(550, 345),
  2825. OnCompleted<int>(800)
  2826. );
  2827. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 })
  2828. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2829. }
  2830. [Fact]
  2831. public void CombineLatest_Typical16()
  2832. {
  2833. var scheduler = new TestScheduler();
  2834. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(410, 17), OnCompleted<int>(800) });
  2835. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(420, 18), OnCompleted<int>(800) });
  2836. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(430, 19), OnCompleted<int>(800) });
  2837. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnNext(440, 20), OnCompleted<int>(800) });
  2838. var e4 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(250, 5), OnNext(450, 21), OnCompleted<int>(800) });
  2839. var e5 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(260, 6), OnNext(460, 22), OnCompleted<int>(800) });
  2840. var e6 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(270, 7), OnNext(470, 23), OnCompleted<int>(800) });
  2841. var e7 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(280, 8), OnNext(480, 24), OnCompleted<int>(800) });
  2842. var e8 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(290, 9), OnNext(490, 25), OnCompleted<int>(800) });
  2843. var e9 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(300, 10), OnNext(500, 26), OnCompleted<int>(800) });
  2844. var e10 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(310, 11), OnNext(510, 27), OnCompleted<int>(800) });
  2845. var e11 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(320, 12), OnNext(520, 28), OnCompleted<int>(800) });
  2846. var e12 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(330, 13), OnNext(530, 29), OnCompleted<int>(800) });
  2847. var e13 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(340, 14), OnNext(540, 30), OnCompleted<int>(800) });
  2848. var e14 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(350, 15), OnNext(550, 31), OnCompleted<int>(800) });
  2849. var e15 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(360, 16), OnNext(560, 32), OnCompleted<int>(800) });
  2850. var res = scheduler.Start(() =>
  2851. Observable.CombineLatest(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _10 + _11 + _12 + _13 + _14 + _15)
  2852. );
  2853. res.Messages.AssertEqual(
  2854. OnNext(360, 136),
  2855. OnNext(410, 152),
  2856. OnNext(420, 168),
  2857. OnNext(430, 184),
  2858. OnNext(440, 200),
  2859. OnNext(450, 216),
  2860. OnNext(460, 232),
  2861. OnNext(470, 248),
  2862. OnNext(480, 264),
  2863. OnNext(490, 280),
  2864. OnNext(500, 296),
  2865. OnNext(510, 312),
  2866. OnNext(520, 328),
  2867. OnNext(530, 344),
  2868. OnNext(540, 360),
  2869. OnNext(550, 376),
  2870. OnNext(560, 392),
  2871. OnCompleted<int>(800)
  2872. );
  2873. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 })
  2874. e.Subscriptions.AssertEqual(Subscribe(200, 800));
  2875. }
  2876. #endregion
  2877. #region NAry
  2878. [Fact]
  2879. public void CombineLatest_List_Regular()
  2880. {
  2881. var scheduler = new TestScheduler();
  2882. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(240, 4), OnCompleted<int>(270) });
  2883. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(250, 5), OnCompleted<int>(280) });
  2884. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(290) });
  2885. var res = scheduler.Start(() =>
  2886. Observable.CombineLatest<int>(new IObservable<int>[] { e0, e1, e2 }.AsEnumerable())
  2887. );
  2888. res.Messages.AssertEqual(
  2889. OnNext<IList<int>>(230, l => l.SequenceEqual(new[] { 1, 2, 3 })),
  2890. OnNext<IList<int>>(240, l => l.SequenceEqual(new[] { 4, 2, 3 })),
  2891. OnNext<IList<int>>(250, l => l.SequenceEqual(new[] { 4, 5, 3 })),
  2892. OnNext<IList<int>>(260, l => l.SequenceEqual(new[] { 4, 5, 6 })),
  2893. OnCompleted<IList<int>>(290)
  2894. );
  2895. }
  2896. [Fact]
  2897. public void CombineLatest_NAry_ArgumentChecking()
  2898. {
  2899. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IEnumerable<IObservable<int>>)));
  2900. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IEnumerable<IObservable<int>>), _ => 42));
  2901. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(new[] { Observable.Return(42) }, default(Func<IList<int>, string>)));
  2902. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.CombineLatest(default(IObservable<int>[])));
  2903. }
  2904. [Fact]
  2905. public void CombineLatest_NAry_Symmetric()
  2906. {
  2907. var scheduler = new TestScheduler();
  2908. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(420) });
  2909. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410) });
  2910. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400) });
  2911. var res = scheduler.Start(() =>
  2912. Observable.CombineLatest(e0, e1, e2)
  2913. );
  2914. res.Messages.AssertEqual(
  2915. OnNext<IList<int>>(230, l => l.SequenceEqual(new[] { 1, 2, 3 })),
  2916. OnNext<IList<int>>(240, l => l.SequenceEqual(new[] { 1, 5, 3 })),
  2917. OnNext<IList<int>>(250, l => l.SequenceEqual(new[] { 4, 5, 3 })),
  2918. OnNext<IList<int>>(260, l => l.SequenceEqual(new[] { 4, 5, 6 })),
  2919. OnCompleted<IList<int>>(420)
  2920. );
  2921. e0.Subscriptions.AssertEqual(
  2922. Subscribe(200, 420)
  2923. );
  2924. e1.Subscriptions.AssertEqual(
  2925. Subscribe(200, 410)
  2926. );
  2927. e2.Subscriptions.AssertEqual(
  2928. Subscribe(200, 400)
  2929. );
  2930. }
  2931. [Fact]
  2932. public void CombineLatest_NAry_Symmetric_Selector()
  2933. {
  2934. var scheduler = new TestScheduler();
  2935. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(420) });
  2936. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410) });
  2937. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400) });
  2938. var res = scheduler.Start(() =>
  2939. Observable.CombineLatest(new[] { e0, e1, e2 }, xs => xs.Sum())
  2940. );
  2941. res.Messages.AssertEqual(
  2942. OnNext<int>(230, new[] { 1, 2, 3 }.Sum()),
  2943. OnNext<int>(240, new[] { 1, 5, 3 }.Sum()),
  2944. OnNext<int>(250, new[] { 4, 5, 3 }.Sum()),
  2945. OnNext<int>(260, new[] { 4, 5, 6 }.Sum()),
  2946. OnCompleted<int>(420)
  2947. );
  2948. e0.Subscriptions.AssertEqual(
  2949. Subscribe(200, 420)
  2950. );
  2951. e1.Subscriptions.AssertEqual(
  2952. Subscribe(200, 410)
  2953. );
  2954. e2.Subscriptions.AssertEqual(
  2955. Subscribe(200, 400)
  2956. );
  2957. }
  2958. [Fact]
  2959. public void CombineLatest_NAry_Asymmetric()
  2960. {
  2961. var scheduler = new TestScheduler();
  2962. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(270) });
  2963. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnNext(290, 7), OnNext(310, 9), OnCompleted<int>(410) });
  2964. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnNext(280, 8), OnCompleted<int>(300) });
  2965. var res = scheduler.Start(() =>
  2966. Observable.CombineLatest(e0, e1, e2)
  2967. );
  2968. res.Messages.AssertEqual(
  2969. OnNext<IList<int>>(230, l => l.SequenceEqual(new[] { 1, 2, 3 })),
  2970. OnNext<IList<int>>(240, l => l.SequenceEqual(new[] { 1, 5, 3 })),
  2971. OnNext<IList<int>>(250, l => l.SequenceEqual(new[] { 4, 5, 3 })),
  2972. OnNext<IList<int>>(260, l => l.SequenceEqual(new[] { 4, 5, 6 })),
  2973. OnNext<IList<int>>(280, l => l.SequenceEqual(new[] { 4, 5, 8 })),
  2974. OnNext<IList<int>>(290, l => l.SequenceEqual(new[] { 4, 7, 8 })),
  2975. OnNext<IList<int>>(310, l => l.SequenceEqual(new[] { 4, 9, 8 })),
  2976. OnCompleted<IList<int>>(410)
  2977. );
  2978. e0.Subscriptions.AssertEqual(
  2979. Subscribe(200, 270)
  2980. );
  2981. e1.Subscriptions.AssertEqual(
  2982. Subscribe(200, 410)
  2983. );
  2984. e2.Subscriptions.AssertEqual(
  2985. Subscribe(200, 300)
  2986. );
  2987. }
  2988. [Fact]
  2989. public void CombineLatest_NAry_Asymmetric_Selector()
  2990. {
  2991. var scheduler = new TestScheduler();
  2992. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(270) });
  2993. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnNext(290, 7), OnNext(310, 9), OnCompleted<int>(410) });
  2994. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnNext(280, 8), OnCompleted<int>(300) });
  2995. var res = scheduler.Start(() =>
  2996. Observable.CombineLatest(new[] { e0, e1, e2 }, xs => xs.Sum())
  2997. );
  2998. res.Messages.AssertEqual(
  2999. OnNext<int>(230, new[] { 1, 2, 3 }.Sum()),
  3000. OnNext<int>(240, new[] { 1, 5, 3 }.Sum()),
  3001. OnNext<int>(250, new[] { 4, 5, 3 }.Sum()),
  3002. OnNext<int>(260, new[] { 4, 5, 6 }.Sum()),
  3003. OnNext<int>(280, new[] { 4, 5, 8 }.Sum()),
  3004. OnNext<int>(290, new[] { 4, 7, 8 }.Sum()),
  3005. OnNext<int>(310, new[] { 4, 9, 8 }.Sum()),
  3006. OnCompleted<int>(410)
  3007. );
  3008. e0.Subscriptions.AssertEqual(
  3009. Subscribe(200, 270)
  3010. );
  3011. e1.Subscriptions.AssertEqual(
  3012. Subscribe(200, 410)
  3013. );
  3014. e2.Subscriptions.AssertEqual(
  3015. Subscribe(200, 300)
  3016. );
  3017. }
  3018. [Fact]
  3019. public void CombineLatest_NAry_Error()
  3020. {
  3021. var ex = new Exception();
  3022. var scheduler = new TestScheduler();
  3023. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnError<int>(250, ex) });
  3024. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410) });
  3025. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400) });
  3026. var res = scheduler.Start(() =>
  3027. Observable.CombineLatest(e0, e1, e2)
  3028. );
  3029. res.Messages.AssertEqual(
  3030. OnNext<IList<int>>(230, l => l.SequenceEqual(new[] { 1, 2, 3 })),
  3031. OnNext<IList<int>>(240, l => l.SequenceEqual(new[] { 1, 5, 3 })),
  3032. OnError<IList<int>>(250, ex)
  3033. );
  3034. e0.Subscriptions.AssertEqual(
  3035. Subscribe(200, 250)
  3036. );
  3037. e1.Subscriptions.AssertEqual(
  3038. Subscribe(200, 250)
  3039. );
  3040. e2.Subscriptions.AssertEqual(
  3041. Subscribe(200, 250)
  3042. );
  3043. }
  3044. [Fact]
  3045. public void CombineLatest_NAry_Error_Selector()
  3046. {
  3047. var ex = new Exception();
  3048. var scheduler = new TestScheduler();
  3049. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnError<int>(250, ex) });
  3050. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410) });
  3051. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400) });
  3052. var res = scheduler.Start(() =>
  3053. Observable.CombineLatest(new[] { e0, e1, e2 }, xs => xs.Sum())
  3054. );
  3055. res.Messages.AssertEqual(
  3056. OnNext<int>(230, new[] { 1, 2, 3 }.Sum()),
  3057. OnNext<int>(240, new[] { 1, 5, 3 }.Sum()),
  3058. OnError<int>(250, ex)
  3059. );
  3060. e0.Subscriptions.AssertEqual(
  3061. Subscribe(200, 250)
  3062. );
  3063. e1.Subscriptions.AssertEqual(
  3064. Subscribe(200, 250)
  3065. );
  3066. e2.Subscriptions.AssertEqual(
  3067. Subscribe(200, 250)
  3068. );
  3069. }
  3070. #endregion
  3071. #region AtLeastOneThrows
  3072. [Fact]
  3073. public void CombineLatest_AtLeastOneThrows4()
  3074. {
  3075. var ex = new Exception();
  3076. var scheduler = new TestScheduler();
  3077. var e0 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400) });
  3078. var e1 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400) });
  3079. var e2 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnError<int>(230, ex) });
  3080. var e3 = scheduler.CreateHotObservable(new[] { OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400) });
  3081. var res = scheduler.Start(() =>
  3082. Observable.CombineLatest(e0, e1, e2, e3, (_0, _1, _2, _3) => 42)
  3083. );
  3084. res.Messages.AssertEqual(
  3085. OnError<int>(230, ex)
  3086. );
  3087. e0.Subscriptions.AssertEqual(Subscribe(200, 230));
  3088. e1.Subscriptions.AssertEqual(Subscribe(200, 230));
  3089. e2.Subscriptions.AssertEqual(Subscribe(200, 230));
  3090. e3.Subscriptions.AssertEqual(Subscribe(200, 230));
  3091. }
  3092. #endregion
  3093. }
  3094. }