ZipTest.cs 215 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the MIT License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Reactive;
  9. using System.Reactive.Disposables;
  10. using System.Reactive.Linq;
  11. using System.Reactive.Subjects;
  12. using System.Threading;
  13. using Microsoft.Reactive.Testing;
  14. using ReactiveTests.Dummies;
  15. using Microsoft.VisualStudio.TestTools.UnitTesting;
  16. using Assert = Xunit.Assert;
  17. namespace ReactiveTests.Tests
  18. {
  19. #pragma warning disable IDE0039 // Use local function
  20. [TestClass]
  21. public class ZipTest : ReactiveTest
  22. {
  23. #region ArgumentChecking
  24. [TestMethod]
  25. public void Zip_ArgumentChecking()
  26. {
  27. var someObservable = DummyObservable<int>.Instance;
  28. var someEnumerable = DummyEnumerable<int>.Instance;
  29. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip<int, int, int>(someObservable, someObservable, null));
  30. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip<int, int, int>(null, someObservable, (_, __) => 0));
  31. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(someObservable, default(IObservable<int>), (_, __) => 0));
  32. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip<int, int, int>(someObservable, someEnumerable, null));
  33. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip<int, int, int>(null, someEnumerable, (_, __) => 0));
  34. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(someObservable, default(IEnumerable<int>), (_, __) => 0));
  35. }
  36. [TestMethod]
  37. public void Zip_ArgumentCheckingHighArity()
  38. {
  39. var xs = DummyObservable<int>.Instance;
  40. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IObservable<int>), xs, (_0, _1) => _0 + _1));
  41. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, default(IObservable<int>), (_0, _1) => _0 + _1));
  42. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, default(Func<int, int, int>)));
  43. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IObservable<int>), xs, xs, (_0, _1, _2) => _0 + _1 + _2));
  44. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, default(IObservable<int>), xs, (_0, _1, _2) => _0 + _1 + _2));
  45. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, default(IObservable<int>), (_0, _1, _2) => _0 + _1 + _2));
  46. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, default(Func<int, int, int, int>)));
  47. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3) => _0 + _1 + _2 + _3));
  48. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3) => _0 + _1 + _2 + _3));
  49. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3) => _0 + _1 + _2 + _3));
  50. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3) => _0 + _1 + _2 + _3));
  51. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, default(Func<int, int, int, int, int>)));
  52. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  53. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  54. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  55. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  56. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4));
  57. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int>)));
  58. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  59. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  60. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  61. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  62. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  63. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5));
  64. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int>)));
  65. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IObservable<int>), xs, xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  66. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, default(IObservable<int>), xs, xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  67. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, default(IObservable<int>), xs, xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  68. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, default(IObservable<int>), xs, xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  69. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, default(IObservable<int>), xs, xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  70. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, default(IObservable<int>), xs, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  71. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, xs, default(IObservable<int>), (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6));
  72. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int>)));
  73. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  74. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  75. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  76. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  77. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  78. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  79. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  80. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  81. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int>)));
  82. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  83. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  84. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  85. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  86. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  87. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  88. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  89. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  90. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  91. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int>)));
  92. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  93. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  94. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  95. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  96. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  97. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  98. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  99. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  100. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  101. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  102. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(xs, xs, xs, xs, xs, xs, xs, xs, xs, xs, default(Func<int, int, int, int, int, int, int, int, int, int, int>)));
  103. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  104. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  105. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  106. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  107. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  108. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  109. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  110. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  111. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  112. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  113. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  114. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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>)));
  115. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  116. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  117. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  118. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  119. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  120. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  121. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  122. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  123. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  124. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  125. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  126. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  127. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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>)));
  128. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  129. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  130. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  131. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  132. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  133. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  134. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  135. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  136. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  137. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  138. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  139. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  140. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  141. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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>)));
  142. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  143. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  144. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  145. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  146. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  147. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  148. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  149. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  150. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  151. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  152. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  153. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  154. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  155. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  156. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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>)));
  157. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  158. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  159. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  160. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  161. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  162. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  163. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  164. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  165. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  166. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  167. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  168. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  169. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  170. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  171. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  172. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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>)));
  173. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  174. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  175. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  176. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  177. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  178. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  179. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  180. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  181. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  182. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  183. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  184. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  185. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  186. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  187. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  188. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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));
  189. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(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>)));
  190. }
  191. #endregion
  192. #region Never/Never
  193. [TestMethod]
  194. public void Zip_Never2()
  195. {
  196. var scheduler = new TestScheduler();
  197. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  198. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  199. var res = scheduler.Start(() =>
  200. Observable.Zip(e0, e1, (_0, _1) => 42)
  201. );
  202. res.Messages.AssertEqual(
  203. );
  204. foreach (var e in new[] { e0, e1 })
  205. {
  206. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  207. }
  208. }
  209. [TestMethod]
  210. public void Zip_Never3()
  211. {
  212. var scheduler = new TestScheduler();
  213. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  214. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  215. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  216. var res = scheduler.Start(() =>
  217. Observable.Zip(e0, e1, e2, (_0, _1, _2) => 42)
  218. );
  219. res.Messages.AssertEqual(
  220. );
  221. foreach (var e in new[] { e0, e1, e2 })
  222. {
  223. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  224. }
  225. }
  226. [TestMethod]
  227. public void Zip_Never4()
  228. {
  229. var scheduler = new TestScheduler();
  230. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  231. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  232. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  233. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  234. var res = scheduler.Start(() =>
  235. Observable.Zip(e0, e1, e2, e3, (_0, _1, _2, _3) => 42)
  236. );
  237. res.Messages.AssertEqual(
  238. );
  239. foreach (var e in new[] { e0, e1, e2, e3 })
  240. {
  241. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  242. }
  243. }
  244. [TestMethod]
  245. public void Zip_Never5()
  246. {
  247. var scheduler = new TestScheduler();
  248. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  249. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  250. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  251. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  252. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  253. var res = scheduler.Start(() =>
  254. Observable.Zip(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => 42)
  255. );
  256. res.Messages.AssertEqual(
  257. );
  258. foreach (var e in new[] { e0, e1, e2, e3, e4 })
  259. {
  260. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  261. }
  262. }
  263. [TestMethod]
  264. public void Zip_Never6()
  265. {
  266. var scheduler = new TestScheduler();
  267. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  268. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  269. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  270. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  271. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  272. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  273. var res = scheduler.Start(() =>
  274. Observable.Zip(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => 42)
  275. );
  276. res.Messages.AssertEqual(
  277. );
  278. foreach (var e in new[] { e0, e1, e2, e3, e4, e5 })
  279. {
  280. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  281. }
  282. }
  283. [TestMethod]
  284. public void Zip_Never7()
  285. {
  286. var scheduler = new TestScheduler();
  287. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  288. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  289. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  290. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  291. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  292. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  293. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  294. var res = scheduler.Start(() =>
  295. Observable.Zip(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. {
  301. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  302. }
  303. }
  304. [TestMethod]
  305. public void Zip_Never8()
  306. {
  307. var scheduler = new TestScheduler();
  308. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  309. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  310. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  311. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  312. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  313. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  314. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  315. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  316. var res = scheduler.Start(() =>
  317. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => 42)
  318. );
  319. res.Messages.AssertEqual(
  320. );
  321. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7 })
  322. {
  323. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  324. }
  325. }
  326. [TestMethod]
  327. public void Zip_Never9()
  328. {
  329. var scheduler = new TestScheduler();
  330. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  331. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  332. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  333. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  334. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  335. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  336. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  337. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  338. var e8 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  339. var res = scheduler.Start(() =>
  340. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => 42)
  341. );
  342. res.Messages.AssertEqual(
  343. );
  344. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 })
  345. {
  346. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  347. }
  348. }
  349. [TestMethod]
  350. public void Zip_Never10()
  351. {
  352. var scheduler = new TestScheduler();
  353. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  354. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  355. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  356. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  357. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  358. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  359. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  360. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  361. var e8 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  362. var e9 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  363. var res = scheduler.Start(() =>
  364. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => 42)
  365. );
  366. res.Messages.AssertEqual(
  367. );
  368. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 })
  369. {
  370. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  371. }
  372. }
  373. [TestMethod]
  374. public void Zip_Never11()
  375. {
  376. var scheduler = new TestScheduler();
  377. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  378. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  379. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  380. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  381. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  382. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  383. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  384. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  385. var e8 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  386. var e9 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  387. var e10 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  388. var res = scheduler.Start(() =>
  389. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => 42)
  390. );
  391. res.Messages.AssertEqual(
  392. );
  393. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 })
  394. {
  395. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  396. }
  397. }
  398. [TestMethod]
  399. public void Zip_Never12()
  400. {
  401. var scheduler = new TestScheduler();
  402. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  403. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  404. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  405. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  406. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  407. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  408. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  409. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  410. var e8 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  411. var e9 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  412. var e10 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  413. var e11 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  414. var res = scheduler.Start(() =>
  415. Observable.Zip(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)
  416. );
  417. res.Messages.AssertEqual(
  418. );
  419. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 })
  420. {
  421. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  422. }
  423. }
  424. [TestMethod]
  425. public void Zip_Never13()
  426. {
  427. var scheduler = new TestScheduler();
  428. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  429. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  430. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  431. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  432. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  433. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  434. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  435. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  436. var e8 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  437. var e9 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  438. var e10 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  439. var e11 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  440. var e12 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  441. var res = scheduler.Start(() =>
  442. Observable.Zip(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)
  443. );
  444. res.Messages.AssertEqual(
  445. );
  446. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 })
  447. {
  448. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  449. }
  450. }
  451. [TestMethod]
  452. public void Zip_Never14()
  453. {
  454. var scheduler = new TestScheduler();
  455. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  456. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  457. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  458. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  459. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  460. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  461. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  462. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  463. var e8 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  464. var e9 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  465. var e10 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  466. var e11 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  467. var e12 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  468. var e13 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  469. var res = scheduler.Start(
  470. () => Observable.Zip(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)
  471. );
  472. res.Messages.AssertEqual(
  473. );
  474. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 })
  475. {
  476. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  477. }
  478. }
  479. [TestMethod]
  480. public void Zip_Never15()
  481. {
  482. var scheduler = new TestScheduler();
  483. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  484. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  485. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  486. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  487. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  488. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  489. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  490. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  491. var e8 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  492. var e9 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  493. var e10 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  494. var e11 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  495. var e12 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  496. var e13 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  497. var e14 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  498. var res = scheduler.Start(() =>
  499. Observable.Zip(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)
  500. );
  501. res.Messages.AssertEqual(
  502. );
  503. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 })
  504. {
  505. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  506. }
  507. }
  508. [TestMethod]
  509. public void Zip_Never16()
  510. {
  511. var scheduler = new TestScheduler();
  512. var e0 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  513. var e1 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  514. var e2 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  515. var e3 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  516. var e4 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  517. var e5 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  518. var e6 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  519. var e7 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  520. var e8 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  521. var e9 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  522. var e10 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  523. var e11 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  524. var e12 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  525. var e13 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  526. var e14 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  527. var e15 = scheduler.CreateHotObservable([OnNext(150, 1)]);
  528. var res = scheduler.Start(() =>
  529. Observable.Zip(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)
  530. );
  531. res.Messages.AssertEqual(
  532. );
  533. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 })
  534. {
  535. e.Subscriptions.AssertEqual(Subscribe(200, 1000));
  536. }
  537. }
  538. #endregion
  539. #region Never/Empty
  540. [TestMethod]
  541. public void Zip_NeverEmpty()
  542. {
  543. var scheduler = new TestScheduler();
  544. var n = scheduler.CreateHotObservable(
  545. OnNext(150, 1)
  546. );
  547. var e = scheduler.CreateHotObservable(
  548. OnNext(150, 1),
  549. OnCompleted<int>(210)
  550. );
  551. var res = scheduler.Start(() =>
  552. n.Zip(e, (x, y) => x + y)
  553. );
  554. res.Messages.AssertEqual(
  555. );
  556. n.Subscriptions.AssertEqual(
  557. Subscribe(200, 1000)
  558. );
  559. e.Subscriptions.AssertEqual(
  560. Subscribe(200, 210)
  561. );
  562. }
  563. [TestMethod]
  564. public void Zip_EmptyNever()
  565. {
  566. var scheduler = new TestScheduler();
  567. var n = scheduler.CreateHotObservable(
  568. OnNext(150, 1)
  569. );
  570. var e = scheduler.CreateHotObservable(
  571. OnNext(150, 1),
  572. OnCompleted<int>(210)
  573. );
  574. var res = scheduler.Start(() =>
  575. e.Zip(n, (x, y) => x + y)
  576. );
  577. res.Messages.AssertEqual(
  578. );
  579. n.Subscriptions.AssertEqual(
  580. Subscribe(200, 1000)
  581. );
  582. e.Subscriptions.AssertEqual(
  583. Subscribe(200, 210)
  584. );
  585. }
  586. #endregion
  587. #region Empty/Empty
  588. [TestMethod]
  589. public void Zip_EmptyEmpty()
  590. {
  591. var scheduler = new TestScheduler();
  592. var e1 = scheduler.CreateHotObservable(
  593. OnNext(150, 1),
  594. OnCompleted<int>(210)
  595. );
  596. var e2 = scheduler.CreateHotObservable(
  597. OnNext(150, 1),
  598. OnCompleted<int>(210)
  599. );
  600. var res = scheduler.Start(() =>
  601. e1.Zip(e2, (x, y) => x + y)
  602. );
  603. res.Messages.AssertEqual(
  604. OnCompleted<int>(210)
  605. );
  606. e1.Subscriptions.AssertEqual(
  607. Subscribe(200, 210)
  608. );
  609. e2.Subscriptions.AssertEqual(
  610. Subscribe(200, 210)
  611. );
  612. }
  613. [TestMethod]
  614. public void Zip_Empty2()
  615. {
  616. var scheduler = new TestScheduler();
  617. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  618. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  619. var res = scheduler.Start(() =>
  620. Observable.Zip(e0, e1, (_0, _1) => 42)
  621. );
  622. res.Messages.AssertEqual(
  623. OnCompleted<int>(220)
  624. );
  625. var i = 0;
  626. foreach (var e in new[] { e0, e1 })
  627. {
  628. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  629. }
  630. }
  631. [TestMethod]
  632. public void Zip_Empty3()
  633. {
  634. var scheduler = new TestScheduler();
  635. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  636. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  637. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  638. var res = scheduler.Start(() =>
  639. Observable.Zip(e0, e1, e2, (_0, _1, _2) => 42)
  640. );
  641. res.Messages.AssertEqual(
  642. OnCompleted<int>(230)
  643. );
  644. var i = 0;
  645. foreach (var e in new[] { e0, e1, e2 })
  646. {
  647. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  648. }
  649. }
  650. [TestMethod]
  651. public void Zip_Empty4()
  652. {
  653. var scheduler = new TestScheduler();
  654. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  655. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  656. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  657. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  658. var res = scheduler.Start(() =>
  659. Observable.Zip(e0, e1, e2, e3, (_0, _1, _2, _3) => 42)
  660. );
  661. res.Messages.AssertEqual(
  662. OnCompleted<int>(240)
  663. );
  664. var i = 0;
  665. foreach (var e in new[] { e0, e1, e2, e3 })
  666. {
  667. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  668. }
  669. }
  670. [TestMethod]
  671. public void Zip_Empty5()
  672. {
  673. var scheduler = new TestScheduler();
  674. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  675. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  676. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  677. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  678. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  679. var res = scheduler.Start(() =>
  680. Observable.Zip(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => 42)
  681. );
  682. res.Messages.AssertEqual(
  683. OnCompleted<int>(250)
  684. );
  685. var i = 0;
  686. foreach (var e in new[] { e0, e1, e2, e3, e4 })
  687. {
  688. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  689. }
  690. }
  691. [TestMethod]
  692. public void Zip_Empty6()
  693. {
  694. var scheduler = new TestScheduler();
  695. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  696. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  697. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  698. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  699. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  700. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  701. var res = scheduler.Start(() =>
  702. Observable.Zip(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => 42)
  703. );
  704. res.Messages.AssertEqual(
  705. OnCompleted<int>(260)
  706. );
  707. var i = 0;
  708. foreach (var e in new[] { e0, e1, e2, e3, e4, e5 })
  709. {
  710. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  711. }
  712. }
  713. [TestMethod]
  714. public void Zip_Empty7()
  715. {
  716. var scheduler = new TestScheduler();
  717. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  718. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  719. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  720. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  721. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  722. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  723. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  724. var res = scheduler.Start(() =>
  725. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => 42)
  726. );
  727. res.Messages.AssertEqual(
  728. OnCompleted<int>(270)
  729. );
  730. var i = 0;
  731. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6 })
  732. {
  733. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  734. }
  735. }
  736. [TestMethod]
  737. public void Zip_Empty8()
  738. {
  739. var scheduler = new TestScheduler();
  740. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  741. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  742. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  743. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  744. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  745. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  746. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  747. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  748. var res = scheduler.Start(() =>
  749. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => 42)
  750. );
  751. res.Messages.AssertEqual(
  752. OnCompleted<int>(280)
  753. );
  754. var i = 0;
  755. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7 })
  756. {
  757. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  758. }
  759. }
  760. [TestMethod]
  761. public void Zip_Empty9()
  762. {
  763. var scheduler = new TestScheduler();
  764. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  765. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  766. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  767. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  768. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  769. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  770. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  771. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  772. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(290)]);
  773. var res = scheduler.Start(() =>
  774. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => 42)
  775. );
  776. res.Messages.AssertEqual(
  777. OnCompleted<int>(290)
  778. );
  779. var i = 0;
  780. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 })
  781. {
  782. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  783. }
  784. }
  785. [TestMethod]
  786. public void Zip_Empty10()
  787. {
  788. var scheduler = new TestScheduler();
  789. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  790. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  791. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  792. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  793. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  794. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  795. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  796. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  797. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(290)]);
  798. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(300)]);
  799. var res = scheduler.Start(() =>
  800. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => 42)
  801. );
  802. res.Messages.AssertEqual(
  803. OnCompleted<int>(300)
  804. );
  805. var i = 0;
  806. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 })
  807. {
  808. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  809. }
  810. }
  811. [TestMethod]
  812. public void Zip_Empty11()
  813. {
  814. var scheduler = new TestScheduler();
  815. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  816. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  817. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  818. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  819. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  820. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  821. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  822. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  823. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(290)]);
  824. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(300)]);
  825. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(310)]);
  826. var res = scheduler.Start(() =>
  827. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => 42)
  828. );
  829. res.Messages.AssertEqual(
  830. OnCompleted<int>(310)
  831. );
  832. var i = 0;
  833. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 })
  834. {
  835. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  836. }
  837. }
  838. [TestMethod]
  839. public void Zip_Empty12()
  840. {
  841. var scheduler = new TestScheduler();
  842. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  843. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  844. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  845. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  846. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  847. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  848. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  849. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  850. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(290)]);
  851. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(300)]);
  852. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(310)]);
  853. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(320)]);
  854. var res = scheduler.Start(() =>
  855. Observable.Zip(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)
  856. );
  857. res.Messages.AssertEqual(
  858. OnCompleted<int>(320)
  859. );
  860. var i = 0;
  861. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 })
  862. {
  863. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  864. }
  865. }
  866. [TestMethod]
  867. public void Zip_Empty13()
  868. {
  869. var scheduler = new TestScheduler();
  870. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  871. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  872. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  873. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  874. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  875. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  876. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  877. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  878. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(290)]);
  879. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(300)]);
  880. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(310)]);
  881. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(320)]);
  882. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(330)]);
  883. var res = scheduler.Start(() =>
  884. Observable.Zip(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)
  885. );
  886. res.Messages.AssertEqual(
  887. OnCompleted<int>(330)
  888. );
  889. var i = 0;
  890. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 })
  891. {
  892. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  893. }
  894. }
  895. [TestMethod]
  896. public void Zip_Empty14()
  897. {
  898. var scheduler = new TestScheduler();
  899. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  900. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  901. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  902. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  903. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  904. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  905. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  906. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  907. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(290)]);
  908. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(300)]);
  909. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(310)]);
  910. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(320)]);
  911. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(330)]);
  912. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(340)]);
  913. var res = scheduler.Start(() =>
  914. Observable.Zip(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)
  915. );
  916. res.Messages.AssertEqual(
  917. OnCompleted<int>(340)
  918. );
  919. var i = 0;
  920. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 })
  921. {
  922. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  923. }
  924. }
  925. [TestMethod]
  926. public void Zip_Empty15()
  927. {
  928. var scheduler = new TestScheduler();
  929. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  930. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  931. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  932. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  933. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  934. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  935. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  936. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  937. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(290)]);
  938. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(300)]);
  939. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(310)]);
  940. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(320)]);
  941. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(330)]);
  942. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(340)]);
  943. var e14 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(350)]);
  944. var res = scheduler.Start(() =>
  945. Observable.Zip(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)
  946. );
  947. res.Messages.AssertEqual(
  948. OnCompleted<int>(350)
  949. );
  950. var i = 0;
  951. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 })
  952. {
  953. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  954. }
  955. }
  956. [TestMethod]
  957. public void Zip_Empty16()
  958. {
  959. var scheduler = new TestScheduler();
  960. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(210)]);
  961. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(220)]);
  962. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(230)]);
  963. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(240)]);
  964. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(250)]);
  965. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(260)]);
  966. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(270)]);
  967. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(280)]);
  968. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(290)]);
  969. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(300)]);
  970. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(310)]);
  971. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(320)]);
  972. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(330)]);
  973. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(340)]);
  974. var e14 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(350)]);
  975. var e15 = scheduler.CreateHotObservable([OnNext(150, 1), OnCompleted<int>(360)]);
  976. var res = scheduler.Start(() =>
  977. Observable.Zip(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)
  978. );
  979. res.Messages.AssertEqual(
  980. OnCompleted<int>(360)
  981. );
  982. var i = 0;
  983. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 })
  984. {
  985. e.Subscriptions.AssertEqual(Subscribe(200, 200 + (++i * 10)));
  986. }
  987. }
  988. #endregion
  989. #region Empty/Some
  990. [TestMethod]
  991. public void Zip_EmptyNonEmpty()
  992. {
  993. var scheduler = new TestScheduler();
  994. var e = scheduler.CreateHotObservable(
  995. OnNext(150, 1),
  996. OnCompleted<int>(210)
  997. );
  998. var o = scheduler.CreateHotObservable(
  999. OnNext(150, 1),
  1000. OnNext(215, 2), // Intended behavior - will only know here there was no error and we can complete gracefully
  1001. OnCompleted<int>(220)
  1002. );
  1003. var res = scheduler.Start(() =>
  1004. e.Zip(o, (x, y) => x + y)
  1005. );
  1006. res.Messages.AssertEqual(
  1007. OnCompleted<int>(215)
  1008. );
  1009. e.Subscriptions.AssertEqual(
  1010. Subscribe(200, 210)
  1011. );
  1012. o.Subscriptions.AssertEqual(
  1013. Subscribe(200, 215)
  1014. );
  1015. }
  1016. [TestMethod]
  1017. public void Zip_NonEmptyEmpty()
  1018. {
  1019. var scheduler = new TestScheduler();
  1020. var e = scheduler.CreateHotObservable(
  1021. OnNext(150, 1),
  1022. OnCompleted<int>(210)
  1023. );
  1024. var o = scheduler.CreateHotObservable(
  1025. OnNext(150, 1),
  1026. OnNext(215, 2),
  1027. OnCompleted<int>(220)
  1028. );
  1029. var res = scheduler.Start(() =>
  1030. o.Zip(e, (x, y) => x + y)
  1031. );
  1032. res.Messages.AssertEqual(
  1033. OnCompleted<int>(215)
  1034. );
  1035. e.Subscriptions.AssertEqual(
  1036. Subscribe(200, 210)
  1037. );
  1038. o.Subscriptions.AssertEqual(
  1039. Subscribe(200, 215)
  1040. );
  1041. }
  1042. #endregion
  1043. #region Never/Some
  1044. [TestMethod]
  1045. public void Zip_NeverNonEmpty()
  1046. {
  1047. var scheduler = new TestScheduler();
  1048. var o = scheduler.CreateHotObservable(
  1049. OnNext(150, 1),
  1050. OnNext(215, 2),
  1051. OnCompleted<int>(220)
  1052. );
  1053. var n = scheduler.CreateHotObservable(
  1054. OnNext(150, 1)
  1055. );
  1056. var res = scheduler.Start(() =>
  1057. n.Zip(o, (x, y) => x + y)
  1058. );
  1059. res.Messages.AssertEqual(
  1060. );
  1061. o.Subscriptions.AssertEqual(
  1062. Subscribe(200, 220)
  1063. );
  1064. n.Subscriptions.AssertEqual(
  1065. Subscribe(200, 1000)
  1066. );
  1067. }
  1068. [TestMethod]
  1069. public void Zip_NonEmptyNever()
  1070. {
  1071. var scheduler = new TestScheduler();
  1072. var o = scheduler.CreateHotObservable(
  1073. OnNext(150, 1),
  1074. OnNext(215, 2),
  1075. OnCompleted<int>(220)
  1076. );
  1077. var n = scheduler.CreateHotObservable(
  1078. OnNext(150, 1)
  1079. );
  1080. var res = scheduler.Start(() =>
  1081. o.Zip(n, (x, y) => x + y)
  1082. );
  1083. res.Messages.AssertEqual(
  1084. );
  1085. o.Subscriptions.AssertEqual(
  1086. Subscribe(200, 220)
  1087. );
  1088. n.Subscriptions.AssertEqual(
  1089. Subscribe(200, 1000)
  1090. );
  1091. }
  1092. #endregion
  1093. #region Some/Some
  1094. [TestMethod]
  1095. public void Zip_NonEmptyNonEmpty()
  1096. {
  1097. var scheduler = new TestScheduler();
  1098. var o1 = scheduler.CreateHotObservable(
  1099. OnNext(150, 1),
  1100. OnNext(215, 2),
  1101. OnCompleted<int>(230)
  1102. );
  1103. var o2 = scheduler.CreateHotObservable(
  1104. OnNext(150, 1),
  1105. OnNext(220, 3),
  1106. OnCompleted<int>(240) // Intended behavior - will only know here there was no error and we can complete gracefully
  1107. );
  1108. var res = scheduler.Start(() =>
  1109. o1.Zip(o2, (x, y) => x + y)
  1110. );
  1111. res.Messages.AssertEqual(
  1112. OnNext(220, 2 + 3),
  1113. OnCompleted<int>(240)
  1114. );
  1115. o1.Subscriptions.AssertEqual(
  1116. Subscribe(200, 230)
  1117. );
  1118. o2.Subscriptions.AssertEqual(
  1119. Subscribe(200, 240)
  1120. );
  1121. }
  1122. #endregion
  1123. #region Empty/Error
  1124. [TestMethod]
  1125. public void Zip_EmptyError()
  1126. {
  1127. var scheduler = new TestScheduler();
  1128. var ex = new Exception();
  1129. var e = scheduler.CreateHotObservable(
  1130. OnNext(150, 1),
  1131. OnCompleted<int>(230)
  1132. );
  1133. var f = scheduler.CreateHotObservable(
  1134. OnNext(150, 1),
  1135. OnError<int>(220, ex)
  1136. );
  1137. var res = scheduler.Start(() =>
  1138. e.Zip(f, (x, y) => x + y)
  1139. );
  1140. res.Messages.AssertEqual(
  1141. OnError<int>(220, ex)
  1142. );
  1143. e.Subscriptions.AssertEqual(
  1144. Subscribe(200, 220)
  1145. );
  1146. f.Subscriptions.AssertEqual(
  1147. Subscribe(200, 220)
  1148. );
  1149. }
  1150. [TestMethod]
  1151. public void Zip_ErrorEmpty()
  1152. {
  1153. var scheduler = new TestScheduler();
  1154. var ex = new Exception();
  1155. var e = scheduler.CreateHotObservable(
  1156. OnNext(150, 1),
  1157. OnCompleted<int>(230)
  1158. );
  1159. var f = scheduler.CreateHotObservable(
  1160. OnNext(150, 1),
  1161. OnError<int>(220, ex)
  1162. );
  1163. var res = scheduler.Start(() =>
  1164. f.Zip(e, (x, y) => x + y)
  1165. );
  1166. res.Messages.AssertEqual(
  1167. OnError<int>(220, ex)
  1168. );
  1169. e.Subscriptions.AssertEqual(
  1170. Subscribe(200, 220)
  1171. );
  1172. f.Subscriptions.AssertEqual(
  1173. Subscribe(200, 220)
  1174. );
  1175. }
  1176. #endregion
  1177. #region Never/Error
  1178. [TestMethod]
  1179. public void Zip_NeverError()
  1180. {
  1181. var scheduler = new TestScheduler();
  1182. var ex = new Exception();
  1183. var n = scheduler.CreateHotObservable(
  1184. OnNext(150, 1)
  1185. );
  1186. var f = scheduler.CreateHotObservable(
  1187. OnNext(150, 1),
  1188. OnError<int>(220, ex)
  1189. );
  1190. var res = scheduler.Start(() =>
  1191. n.Zip(f, (x, y) => x + y)
  1192. );
  1193. res.Messages.AssertEqual(
  1194. OnError<int>(220, ex)
  1195. );
  1196. n.Subscriptions.AssertEqual(
  1197. Subscribe(200, 220)
  1198. );
  1199. f.Subscriptions.AssertEqual(
  1200. Subscribe(200, 220)
  1201. );
  1202. }
  1203. [TestMethod]
  1204. public void Zip_ErrorNever()
  1205. {
  1206. var scheduler = new TestScheduler();
  1207. var ex = new Exception();
  1208. var n = scheduler.CreateHotObservable(
  1209. OnNext(150, 1)
  1210. );
  1211. var f = scheduler.CreateHotObservable(
  1212. OnNext(150, 1),
  1213. OnError<int>(220, ex)
  1214. );
  1215. var res = scheduler.Start(() =>
  1216. f.Zip(n, (x, y) => x + y)
  1217. );
  1218. res.Messages.AssertEqual(
  1219. OnError<int>(220, ex)
  1220. );
  1221. n.Subscriptions.AssertEqual(
  1222. Subscribe(200, 220)
  1223. );
  1224. f.Subscriptions.AssertEqual(
  1225. Subscribe(200, 220)
  1226. );
  1227. }
  1228. #endregion
  1229. #region Error/Error
  1230. [TestMethod]
  1231. public void Zip_ErrorError()
  1232. {
  1233. var scheduler = new TestScheduler();
  1234. var ex1 = new Exception();
  1235. var ex2 = new Exception();
  1236. var f1 = scheduler.CreateHotObservable(
  1237. OnNext(150, 1),
  1238. OnError<int>(230, ex1)
  1239. );
  1240. var f2 = scheduler.CreateHotObservable(
  1241. OnNext(150, 1),
  1242. OnError<int>(220, ex2)
  1243. );
  1244. var res = scheduler.Start(() =>
  1245. f1.Zip(f2, (x, y) => x + y)
  1246. );
  1247. res.Messages.AssertEqual(
  1248. OnError<int>(220, ex2)
  1249. );
  1250. f1.Subscriptions.AssertEqual(
  1251. Subscribe(200, 220)
  1252. );
  1253. f2.Subscriptions.AssertEqual(
  1254. Subscribe(200, 220)
  1255. );
  1256. }
  1257. #endregion
  1258. #region Some/Error
  1259. [TestMethod]
  1260. public void Zip_SomeError()
  1261. {
  1262. var scheduler = new TestScheduler();
  1263. var ex = new Exception();
  1264. var o = scheduler.CreateHotObservable(
  1265. OnNext(150, 1),
  1266. OnNext(215, 2),
  1267. OnCompleted<int>(230)
  1268. );
  1269. var e = scheduler.CreateHotObservable(
  1270. OnNext(150, 1),
  1271. OnError<int>(220, ex)
  1272. );
  1273. var res = scheduler.Start(() =>
  1274. o.Zip(e, (x, y) => x + y)
  1275. );
  1276. res.Messages.AssertEqual(
  1277. OnError<int>(220, ex)
  1278. );
  1279. o.Subscriptions.AssertEqual(
  1280. Subscribe(200, 220)
  1281. );
  1282. e.Subscriptions.AssertEqual(
  1283. Subscribe(200, 220)
  1284. );
  1285. }
  1286. [TestMethod]
  1287. public void Zip_ErrorSome()
  1288. {
  1289. var scheduler = new TestScheduler();
  1290. var ex = new Exception();
  1291. var o = scheduler.CreateHotObservable(
  1292. OnNext(150, 1),
  1293. OnNext(215, 2),
  1294. OnCompleted<int>(230)
  1295. );
  1296. var e = scheduler.CreateHotObservable(
  1297. OnNext(150, 1),
  1298. OnError<int>(220, ex)
  1299. );
  1300. var res = scheduler.Start(() =>
  1301. e.Zip(o, (x, y) => x + y)
  1302. );
  1303. res.Messages.AssertEqual(
  1304. OnError<int>(220, ex)
  1305. );
  1306. o.Subscriptions.AssertEqual(
  1307. Subscribe(200, 220)
  1308. );
  1309. e.Subscriptions.AssertEqual(
  1310. Subscribe(200, 220)
  1311. );
  1312. }
  1313. #endregion
  1314. #region Simple
  1315. [TestMethod]
  1316. public void Zip_LeftCompletesFirst()
  1317. {
  1318. var scheduler = new TestScheduler();
  1319. var o = scheduler.CreateHotObservable(
  1320. OnNext(150, 1),
  1321. OnNext(210, 2),
  1322. OnCompleted<int>(220)
  1323. );
  1324. var e = scheduler.CreateHotObservable(
  1325. OnNext(150, 1),
  1326. OnNext(215, 4),
  1327. OnCompleted<int>(225)
  1328. );
  1329. var res = scheduler.Start(() =>
  1330. o.Zip(e, (x, y) => x + y)
  1331. );
  1332. res.Messages.AssertEqual(
  1333. OnNext(215, 6),
  1334. OnCompleted<int>(225)
  1335. );
  1336. o.Subscriptions.AssertEqual(
  1337. Subscribe(200, 220)
  1338. );
  1339. e.Subscriptions.AssertEqual(
  1340. Subscribe(200, 225)
  1341. );
  1342. }
  1343. [TestMethod]
  1344. public void Zip_RightCompletesFirst()
  1345. {
  1346. var scheduler = new TestScheduler();
  1347. var o = scheduler.CreateHotObservable(
  1348. OnNext(150, 1),
  1349. OnNext(215, 4),
  1350. OnCompleted<int>(225)
  1351. );
  1352. var e = scheduler.CreateHotObservable(
  1353. OnNext(150, 1),
  1354. OnNext(210, 2),
  1355. OnCompleted<int>(220)
  1356. );
  1357. var res = scheduler.Start(() =>
  1358. o.Zip(e, (x, y) => x + y)
  1359. );
  1360. res.Messages.AssertEqual(
  1361. OnNext(215, 6),
  1362. OnCompleted<int>(225)
  1363. );
  1364. o.Subscriptions.AssertEqual(
  1365. Subscribe(200, 225)
  1366. );
  1367. e.Subscriptions.AssertEqual(
  1368. Subscribe(200, 220)
  1369. );
  1370. }
  1371. [TestMethod]
  1372. public void Zip_LeftTriggersSelectorError()
  1373. {
  1374. var scheduler = new TestScheduler();
  1375. var ex = new Exception();
  1376. var o = scheduler.CreateHotObservable(
  1377. OnNext(150, 1),
  1378. OnNext(220, 2)
  1379. );
  1380. var e = scheduler.CreateHotObservable(
  1381. OnNext(150, 1),
  1382. OnNext(210, 4)
  1383. );
  1384. var res = scheduler.Start(() =>
  1385. o.Zip(e, (x, y) => { if (x == y) { return 42; } throw ex; })
  1386. );
  1387. res.Messages.AssertEqual(
  1388. OnError<int>(220, ex)
  1389. );
  1390. o.Subscriptions.AssertEqual(
  1391. Subscribe(200, 220)
  1392. );
  1393. e.Subscriptions.AssertEqual(
  1394. Subscribe(200, 220)
  1395. );
  1396. }
  1397. [TestMethod]
  1398. public void Zip_RightTriggersSelectorError()
  1399. {
  1400. var scheduler = new TestScheduler();
  1401. var ex = new Exception();
  1402. var o = scheduler.CreateHotObservable(
  1403. OnNext(150, 1),
  1404. OnNext(210, 2)
  1405. );
  1406. var e = scheduler.CreateHotObservable(
  1407. OnNext(150, 1),
  1408. OnNext(220, 4)
  1409. );
  1410. var res = scheduler.Start(() =>
  1411. o.Zip(e, (x, y) => { if (x == y) { return 42; } throw ex; })
  1412. );
  1413. res.Messages.AssertEqual(
  1414. OnError<int>(220, ex)
  1415. );
  1416. o.Subscriptions.AssertEqual(
  1417. Subscribe(200, 220)
  1418. );
  1419. e.Subscriptions.AssertEqual(
  1420. Subscribe(200, 220)
  1421. );
  1422. }
  1423. #endregion
  1424. #region SymmetricReturn
  1425. [TestMethod]
  1426. public void Zip_SymmetricReturn2()
  1427. {
  1428. var scheduler = new TestScheduler();
  1429. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1430. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1431. var res = scheduler.Start(() =>
  1432. Observable.Zip(e0, e1, (_0, _1) => _0 + _1)
  1433. );
  1434. res.Messages.AssertEqual(
  1435. OnNext(220, 3),
  1436. OnCompleted<int>(400)
  1437. );
  1438. foreach (var e in new[] { e0, e1 })
  1439. {
  1440. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1441. }
  1442. }
  1443. [TestMethod]
  1444. public void Zip_SymmetricReturn3()
  1445. {
  1446. var scheduler = new TestScheduler();
  1447. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1448. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1449. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1450. var res = scheduler.Start(() =>
  1451. Observable.Zip(e0, e1, e2, (_0, _1, _2) => _0 + _1 + _2)
  1452. );
  1453. res.Messages.AssertEqual(
  1454. OnNext(230, 6),
  1455. OnCompleted<int>(400)
  1456. );
  1457. foreach (var e in new[] { e0, e1, e2 })
  1458. {
  1459. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1460. }
  1461. }
  1462. [TestMethod]
  1463. public void Zip_SymmetricReturn4()
  1464. {
  1465. var scheduler = new TestScheduler();
  1466. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1467. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1468. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1469. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1470. var res = scheduler.Start(() =>
  1471. Observable.Zip(e0, e1, e2, e3, (_0, _1, _2, _3) => _0 + _1 + _2 + _3)
  1472. );
  1473. res.Messages.AssertEqual(
  1474. OnNext(240, 10),
  1475. OnCompleted<int>(400)
  1476. );
  1477. foreach (var e in new[] { e0, e1, e2, e3 })
  1478. {
  1479. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1480. }
  1481. }
  1482. [TestMethod]
  1483. public void Zip_SymmetricReturn5()
  1484. {
  1485. var scheduler = new TestScheduler();
  1486. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1487. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1488. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1489. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1490. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1491. var res = scheduler.Start(() =>
  1492. Observable.Zip(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4)
  1493. );
  1494. res.Messages.AssertEqual(
  1495. OnNext(250, 15),
  1496. OnCompleted<int>(400)
  1497. );
  1498. foreach (var e in new[] { e0, e1, e2, e3, e4 })
  1499. {
  1500. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1501. }
  1502. }
  1503. [TestMethod]
  1504. public void Zip_SymmetricReturn6()
  1505. {
  1506. var scheduler = new TestScheduler();
  1507. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1508. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1509. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1510. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1511. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1512. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1513. var res = scheduler.Start(() =>
  1514. Observable.Zip(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5)
  1515. );
  1516. res.Messages.AssertEqual(
  1517. OnNext(260, 21),
  1518. OnCompleted<int>(400)
  1519. );
  1520. foreach (var e in new[] { e0, e1, e2, e3, e4, e5 })
  1521. {
  1522. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1523. }
  1524. }
  1525. [TestMethod]
  1526. public void Zip_SymmetricReturn7()
  1527. {
  1528. var scheduler = new TestScheduler();
  1529. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1530. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1531. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1532. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1533. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1534. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1535. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1536. var res = scheduler.Start(() =>
  1537. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6)
  1538. );
  1539. res.Messages.AssertEqual(
  1540. OnNext(270, 28),
  1541. OnCompleted<int>(400)
  1542. );
  1543. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6 })
  1544. {
  1545. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1546. }
  1547. }
  1548. [TestMethod]
  1549. public void Zip_SymmetricReturn8()
  1550. {
  1551. var scheduler = new TestScheduler();
  1552. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1553. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1554. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1555. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1556. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1557. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1558. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1559. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1560. var res = scheduler.Start(() =>
  1561. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7)
  1562. );
  1563. res.Messages.AssertEqual(
  1564. OnNext(280, 36),
  1565. OnCompleted<int>(400)
  1566. );
  1567. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7 })
  1568. {
  1569. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1570. }
  1571. }
  1572. [TestMethod]
  1573. public void Zip_SymmetricReturn9()
  1574. {
  1575. var scheduler = new TestScheduler();
  1576. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1577. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1578. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1579. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1580. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1581. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1582. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1583. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1584. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  1585. var res = scheduler.Start(() =>
  1586. Observable.Zip(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)
  1587. );
  1588. res.Messages.AssertEqual(
  1589. OnNext(290, 45),
  1590. OnCompleted<int>(400)
  1591. );
  1592. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 })
  1593. {
  1594. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1595. }
  1596. }
  1597. [TestMethod]
  1598. public void Zip_SymmetricReturn10()
  1599. {
  1600. var scheduler = new TestScheduler();
  1601. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1602. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1603. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1604. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1605. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1606. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1607. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1608. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1609. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  1610. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  1611. var res = scheduler.Start(() =>
  1612. Observable.Zip(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)
  1613. );
  1614. res.Messages.AssertEqual(
  1615. OnNext(300, 55),
  1616. OnCompleted<int>(400)
  1617. );
  1618. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 })
  1619. {
  1620. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1621. }
  1622. }
  1623. [TestMethod]
  1624. public void Zip_SymmetricReturn11()
  1625. {
  1626. var scheduler = new TestScheduler();
  1627. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1628. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1629. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1630. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1631. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1632. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1633. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1634. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1635. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  1636. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  1637. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  1638. var res = scheduler.Start(() =>
  1639. Observable.Zip(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)
  1640. );
  1641. res.Messages.AssertEqual(
  1642. OnNext(310, 66),
  1643. OnCompleted<int>(400)
  1644. );
  1645. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 })
  1646. {
  1647. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1648. }
  1649. }
  1650. [TestMethod]
  1651. public void Zip_SymmetricReturn12()
  1652. {
  1653. var scheduler = new TestScheduler();
  1654. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1655. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1656. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1657. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1658. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1659. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1660. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1661. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1662. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  1663. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  1664. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  1665. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  1666. var res = scheduler.Start(() =>
  1667. Observable.Zip(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)
  1668. );
  1669. res.Messages.AssertEqual(
  1670. OnNext(320, 78),
  1671. OnCompleted<int>(400)
  1672. );
  1673. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 })
  1674. {
  1675. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1676. }
  1677. }
  1678. [TestMethod]
  1679. public void Zip_SymmetricReturn13()
  1680. {
  1681. var scheduler = new TestScheduler();
  1682. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1683. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1684. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1685. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1686. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1687. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1688. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1689. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1690. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  1691. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  1692. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  1693. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  1694. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400)]);
  1695. var res = scheduler.Start(() =>
  1696. Observable.Zip(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)
  1697. );
  1698. res.Messages.AssertEqual(
  1699. OnNext(330, 91),
  1700. OnCompleted<int>(400)
  1701. );
  1702. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 })
  1703. {
  1704. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1705. }
  1706. }
  1707. [TestMethod]
  1708. public void Zip_SymmetricReturn14()
  1709. {
  1710. var scheduler = new TestScheduler();
  1711. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1712. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1713. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1714. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1715. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1716. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1717. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1718. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1719. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  1720. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  1721. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  1722. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  1723. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400)]);
  1724. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400)]);
  1725. var res = scheduler.Start(() =>
  1726. Observable.Zip(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)
  1727. );
  1728. res.Messages.AssertEqual(
  1729. OnNext(340, 105),
  1730. OnCompleted<int>(400)
  1731. );
  1732. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 })
  1733. {
  1734. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1735. }
  1736. }
  1737. [TestMethod]
  1738. public void Zip_SymmetricReturn15()
  1739. {
  1740. var scheduler = new TestScheduler();
  1741. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1742. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1743. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1744. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1745. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1746. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1747. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1748. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1749. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  1750. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  1751. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  1752. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  1753. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400)]);
  1754. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400)]);
  1755. var e14 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(350, 15), OnCompleted<int>(400)]);
  1756. var res = scheduler.Start(() =>
  1757. Observable.Zip(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)
  1758. );
  1759. res.Messages.AssertEqual(
  1760. OnNext(350, 120),
  1761. OnCompleted<int>(400)
  1762. );
  1763. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 })
  1764. {
  1765. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1766. }
  1767. }
  1768. [TestMethod]
  1769. public void Zip_SymmetricReturn16()
  1770. {
  1771. var scheduler = new TestScheduler();
  1772. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1773. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1774. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1775. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1776. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1777. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1778. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  1779. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  1780. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  1781. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  1782. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  1783. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  1784. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400)]);
  1785. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400)]);
  1786. var e14 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(350, 15), OnCompleted<int>(400)]);
  1787. var e15 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(360, 16), OnCompleted<int>(400)]);
  1788. var res = scheduler.Start(() =>
  1789. Observable.Zip(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)
  1790. );
  1791. res.Messages.AssertEqual(
  1792. OnNext(360, 136),
  1793. OnCompleted<int>(400)
  1794. );
  1795. foreach (var e in new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 })
  1796. {
  1797. e.Subscriptions.AssertEqual(Subscribe(200, 400));
  1798. }
  1799. }
  1800. #endregion
  1801. #region Various
  1802. [TestMethod]
  1803. public void Zip_SomeDataAsymmetric1()
  1804. {
  1805. var scheduler = new TestScheduler();
  1806. var msgs1 = Enumerable.Range(0, 5).Select((x, i) => OnNext((ushort)(205 + i * 5), x)).ToArray();
  1807. var msgs2 = Enumerable.Range(0, 10).Select((x, i) => OnNext((ushort)(202 + i * 8), x)).ToArray();
  1808. var len = Math.Min(msgs1.Length, msgs2.Length);
  1809. var o1 = scheduler.CreateHotObservable(msgs1);
  1810. var o2 = scheduler.CreateHotObservable(msgs2);
  1811. var res = scheduler.Start(() =>
  1812. o1.Zip(o2, (x, y) => x + y)
  1813. );
  1814. Assert.True(len == res.Messages.Count, "length");
  1815. for (var i = 0; i < len; i++)
  1816. {
  1817. var sum = msgs1[i].Value.Value + msgs2[i].Value.Value;
  1818. var time = Math.Max(msgs1[i].Time, msgs2[i].Time);
  1819. Assert.True(res.Messages[i].Time == time);
  1820. Assert.True(res.Messages[i].Value.Kind == NotificationKind.OnNext);
  1821. Assert.True(res.Messages[i].Value.Value == sum, i.ToString());
  1822. }
  1823. }
  1824. [TestMethod]
  1825. public void Zip_SomeDataAsymmetric2()
  1826. {
  1827. var scheduler = new TestScheduler();
  1828. var msgs1 = Enumerable.Range(0, 10).Select((x, i) => OnNext((ushort)(205 + i * 5), x)).ToArray();
  1829. var msgs2 = Enumerable.Range(0, 5).Select((x, i) => OnNext((ushort)(202 + i * 8), x)).ToArray();
  1830. var len = Math.Min(msgs1.Length, msgs2.Length);
  1831. var o1 = scheduler.CreateHotObservable(msgs1);
  1832. var o2 = scheduler.CreateHotObservable(msgs2);
  1833. var res = scheduler.Start(() =>
  1834. o1.Zip(o2, (x, y) => x + y)
  1835. );
  1836. Assert.True(len == res.Messages.Count, "length");
  1837. for (var i = 0; i < len; i++)
  1838. {
  1839. var sum = msgs1[i].Value.Value + msgs2[i].Value.Value;
  1840. var time = Math.Max(msgs1[i].Time, msgs2[i].Time);
  1841. Assert.True(res.Messages[i].Time == time);
  1842. Assert.True(res.Messages[i].Value.Kind == NotificationKind.OnNext);
  1843. Assert.True(res.Messages[i].Value.Value == sum, i.ToString());
  1844. }
  1845. }
  1846. [TestMethod]
  1847. public void Zip_SomeDataSymmetric()
  1848. {
  1849. var scheduler = new TestScheduler();
  1850. var msgs1 = Enumerable.Range(0, 10).Select((x, i) => OnNext((ushort)(205 + i * 5), x)).ToArray();
  1851. var msgs2 = Enumerable.Range(0, 10).Select((x, i) => OnNext((ushort)(202 + i * 8), x)).ToArray();
  1852. var len = Math.Min(msgs1.Length, msgs2.Length);
  1853. var o1 = scheduler.CreateHotObservable(msgs1);
  1854. var o2 = scheduler.CreateHotObservable(msgs2);
  1855. var res = scheduler.Start(() =>
  1856. o1.Zip(o2, (x, y) => x + y)
  1857. );
  1858. Assert.True(len == res.Messages.Count, "length");
  1859. for (var i = 0; i < len; i++)
  1860. {
  1861. var sum = msgs1[i].Value.Value + msgs2[i].Value.Value;
  1862. var time = Math.Max(msgs1[i].Time, msgs2[i].Time);
  1863. Assert.True(res.Messages[i].Time == time);
  1864. Assert.True(res.Messages[i].Value.Kind == NotificationKind.OnNext);
  1865. Assert.True(res.Messages[i].Value.Value == sum, i.ToString());
  1866. }
  1867. }
  1868. #endregion
  1869. #region SelectorThrows
  1870. [TestMethod]
  1871. public void Zip_SelectorThrows()
  1872. {
  1873. var scheduler = new TestScheduler();
  1874. var o1 = scheduler.CreateHotObservable(
  1875. OnNext(150, 1),
  1876. OnNext(215, 2),
  1877. OnNext(225, 4),
  1878. OnCompleted<int>(240)
  1879. );
  1880. var o2 = scheduler.CreateHotObservable(
  1881. OnNext(150, 1),
  1882. OnNext(220, 3),
  1883. OnNext(230, 5), //!
  1884. OnCompleted<int>(250)
  1885. );
  1886. var ex = new Exception();
  1887. var res = scheduler.Start(() =>
  1888. o1.Zip(o2, (x, y) =>
  1889. {
  1890. if (y == 5)
  1891. {
  1892. throw ex;
  1893. }
  1894. return x + y;
  1895. })
  1896. );
  1897. res.Messages.AssertEqual(
  1898. OnNext(220, 2 + 3),
  1899. OnError<int>(230, ex)
  1900. );
  1901. }
  1902. [TestMethod]
  1903. public void Zip_SelectorThrows2()
  1904. {
  1905. var scheduler = new TestScheduler();
  1906. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1907. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1908. var ex = new Exception();
  1909. Func<int> f = () => { throw ex; };
  1910. var res = scheduler.Start(() =>
  1911. Observable.Zip(e0, e1, (_0, _1) => f())
  1912. );
  1913. res.Messages.AssertEqual(
  1914. OnError<int>(220, ex)
  1915. );
  1916. var es = new[] { e0, e1 };
  1917. foreach (var e in es)
  1918. {
  1919. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  1920. }
  1921. }
  1922. [TestMethod]
  1923. public void Zip_SelectorThrows3()
  1924. {
  1925. var scheduler = new TestScheduler();
  1926. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1927. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1928. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1929. var ex = new Exception();
  1930. Func<int> f = () => { throw ex; };
  1931. var res = scheduler.Start(() =>
  1932. Observable.Zip(e0, e1, e2, (_0, _1, _2) => f())
  1933. );
  1934. res.Messages.AssertEqual(
  1935. OnError<int>(230, ex)
  1936. );
  1937. var es = new[] { e0, e1, e2 };
  1938. foreach (var e in es)
  1939. {
  1940. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  1941. }
  1942. }
  1943. [TestMethod]
  1944. public void Zip_SelectorThrows4()
  1945. {
  1946. var scheduler = new TestScheduler();
  1947. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1948. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1949. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1950. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1951. var ex = new Exception();
  1952. Func<int> f = () => { throw ex; };
  1953. var res = scheduler.Start(() =>
  1954. Observable.Zip(e0, e1, e2, e3, (_0, _1, _2, _3) => f())
  1955. );
  1956. res.Messages.AssertEqual(
  1957. OnError<int>(240, ex)
  1958. );
  1959. var es = new[] { e0, e1, e2, e3 };
  1960. foreach (var e in es)
  1961. {
  1962. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  1963. }
  1964. }
  1965. [TestMethod]
  1966. public void Zip_SelectorThrows5()
  1967. {
  1968. var scheduler = new TestScheduler();
  1969. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1970. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1971. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1972. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1973. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1974. var ex = new Exception();
  1975. Func<int> f = () => { throw ex; };
  1976. var res = scheduler.Start(() =>
  1977. Observable.Zip(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => f())
  1978. );
  1979. res.Messages.AssertEqual(
  1980. OnError<int>(250, ex)
  1981. );
  1982. var es = new[] { e0, e1, e2, e3, e4 };
  1983. foreach (var e in es)
  1984. {
  1985. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  1986. }
  1987. }
  1988. [TestMethod]
  1989. public void Zip_SelectorThrows6()
  1990. {
  1991. var scheduler = new TestScheduler();
  1992. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  1993. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  1994. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  1995. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  1996. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  1997. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  1998. var ex = new Exception();
  1999. Func<int> f = () => { throw ex; };
  2000. var res = scheduler.Start(() =>
  2001. Observable.Zip(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => f())
  2002. );
  2003. res.Messages.AssertEqual(
  2004. OnError<int>(260, ex)
  2005. );
  2006. var es = new[] { e0, e1, e2, e3, e4, e5 };
  2007. foreach (var e in es)
  2008. {
  2009. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2010. }
  2011. }
  2012. [TestMethod]
  2013. public void Zip_SelectorThrows7()
  2014. {
  2015. var scheduler = new TestScheduler();
  2016. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2017. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2018. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2019. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2020. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2021. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2022. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2023. var ex = new Exception();
  2024. Func<int> f = () => { throw ex; };
  2025. var res = scheduler.Start(() =>
  2026. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => f())
  2027. );
  2028. res.Messages.AssertEqual(
  2029. OnError<int>(270, ex)
  2030. );
  2031. var es = new[] { e0, e1, e2, e3, e4, e5, e6 };
  2032. foreach (var e in es)
  2033. {
  2034. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2035. }
  2036. }
  2037. [TestMethod]
  2038. public void Zip_SelectorThrows8()
  2039. {
  2040. var scheduler = new TestScheduler();
  2041. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2042. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2043. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2044. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2045. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2046. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2047. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2048. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2049. var ex = new Exception();
  2050. Func<int> f = () => { throw ex; };
  2051. var res = scheduler.Start(() =>
  2052. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => f())
  2053. );
  2054. res.Messages.AssertEqual(
  2055. OnError<int>(280, ex)
  2056. );
  2057. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7 };
  2058. foreach (var e in es)
  2059. {
  2060. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2061. }
  2062. }
  2063. [TestMethod]
  2064. public void Zip_SelectorThrows9()
  2065. {
  2066. var scheduler = new TestScheduler();
  2067. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2068. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2069. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2070. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2071. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2072. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2073. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2074. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2075. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  2076. var ex = new Exception();
  2077. Func<int> f = () => { throw ex; };
  2078. var res = scheduler.Start(() =>
  2079. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, (_0, _1, _2, _3, _4, _5, _6, _7, _8) => f())
  2080. );
  2081. res.Messages.AssertEqual(
  2082. OnError<int>(290, ex)
  2083. );
  2084. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 };
  2085. foreach (var e in es)
  2086. {
  2087. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2088. }
  2089. }
  2090. [TestMethod]
  2091. public void Zip_SelectorThrows10()
  2092. {
  2093. var scheduler = new TestScheduler();
  2094. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2095. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2096. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2097. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2098. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2099. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2100. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2101. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2102. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  2103. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  2104. var ex = new Exception();
  2105. Func<int> f = () => { throw ex; };
  2106. var res = scheduler.Start(() =>
  2107. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) => f())
  2108. );
  2109. res.Messages.AssertEqual(
  2110. OnError<int>(300, ex)
  2111. );
  2112. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 };
  2113. foreach (var e in es)
  2114. {
  2115. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2116. }
  2117. }
  2118. [TestMethod]
  2119. public void Zip_SelectorThrows11()
  2120. {
  2121. var scheduler = new TestScheduler();
  2122. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2123. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2124. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2125. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2126. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2127. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2128. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2129. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2130. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  2131. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  2132. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  2133. var ex = new Exception();
  2134. Func<int> f = () => { throw ex; };
  2135. var res = scheduler.Start(() =>
  2136. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, (_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) => f())
  2137. );
  2138. res.Messages.AssertEqual(
  2139. OnError<int>(310, ex)
  2140. );
  2141. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 };
  2142. foreach (var e in es)
  2143. {
  2144. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2145. }
  2146. }
  2147. [TestMethod]
  2148. public void Zip_SelectorThrows12()
  2149. {
  2150. var scheduler = new TestScheduler();
  2151. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2152. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2153. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2154. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2155. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2156. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2157. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2158. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2159. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  2160. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  2161. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  2162. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  2163. var ex = new Exception();
  2164. Func<int> f = () => { throw ex; };
  2165. var res = scheduler.Start(() =>
  2166. Observable.Zip(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())
  2167. );
  2168. res.Messages.AssertEqual(
  2169. OnError<int>(320, ex)
  2170. );
  2171. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 };
  2172. foreach (var e in es)
  2173. {
  2174. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2175. }
  2176. }
  2177. [TestMethod]
  2178. public void Zip_SelectorThrows13()
  2179. {
  2180. var scheduler = new TestScheduler();
  2181. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2182. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2183. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2184. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2185. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2186. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2187. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2188. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2189. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  2190. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  2191. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  2192. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  2193. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400)]);
  2194. var ex = new Exception();
  2195. Func<int> f = () => { throw ex; };
  2196. var res = scheduler.Start(() =>
  2197. Observable.Zip(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())
  2198. );
  2199. res.Messages.AssertEqual(
  2200. OnError<int>(330, ex)
  2201. );
  2202. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 };
  2203. foreach (var e in es)
  2204. {
  2205. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2206. }
  2207. }
  2208. [TestMethod]
  2209. public void Zip_SelectorThrows14()
  2210. {
  2211. var scheduler = new TestScheduler();
  2212. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2213. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2214. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2215. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2216. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2217. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2218. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2219. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2220. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  2221. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  2222. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  2223. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  2224. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400)]);
  2225. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400)]);
  2226. var ex = new Exception();
  2227. Func<int> f = () => { throw ex; };
  2228. var res = scheduler.Start(() =>
  2229. Observable.Zip(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())
  2230. );
  2231. res.Messages.AssertEqual(
  2232. OnError<int>(340, ex)
  2233. );
  2234. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 };
  2235. foreach (var e in es)
  2236. {
  2237. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2238. }
  2239. }
  2240. [TestMethod]
  2241. public void Zip_SelectorThrows15()
  2242. {
  2243. var scheduler = new TestScheduler();
  2244. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2245. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2246. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2247. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2248. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2249. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2250. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2251. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2252. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  2253. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  2254. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  2255. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  2256. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400)]);
  2257. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400)]);
  2258. var e14 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(350, 15), OnCompleted<int>(400)]);
  2259. var ex = new Exception();
  2260. Func<int> f = () => { throw ex; };
  2261. var res = scheduler.Start(() =>
  2262. Observable.Zip(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())
  2263. );
  2264. res.Messages.AssertEqual(
  2265. OnError<int>(350, ex)
  2266. );
  2267. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 };
  2268. foreach (var e in es)
  2269. {
  2270. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2271. }
  2272. }
  2273. [TestMethod]
  2274. public void Zip_SelectorThrows16()
  2275. {
  2276. var scheduler = new TestScheduler();
  2277. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  2278. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  2279. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnCompleted<int>(400)]);
  2280. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  2281. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(250, 5), OnCompleted<int>(400)]);
  2282. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(260, 6), OnCompleted<int>(400)]);
  2283. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(270, 7), OnCompleted<int>(400)]);
  2284. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(280, 8), OnCompleted<int>(400)]);
  2285. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(290, 9), OnCompleted<int>(400)]);
  2286. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(300, 10), OnCompleted<int>(400)]);
  2287. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(310, 11), OnCompleted<int>(400)]);
  2288. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(320, 12), OnCompleted<int>(400)]);
  2289. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(330, 13), OnCompleted<int>(400)]);
  2290. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(340, 14), OnCompleted<int>(400)]);
  2291. var e14 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(350, 15), OnCompleted<int>(400)]);
  2292. var e15 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(360, 16), OnCompleted<int>(400)]);
  2293. var ex = new Exception();
  2294. Func<int> f = () => { throw ex; };
  2295. var res = scheduler.Start(() =>
  2296. Observable.Zip(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())
  2297. );
  2298. res.Messages.AssertEqual(
  2299. OnError<int>(360, ex)
  2300. );
  2301. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 };
  2302. foreach (var e in es)
  2303. {
  2304. e.Subscriptions.AssertEqual(Subscribe(200, 200 + es.Length * 10));
  2305. }
  2306. }
  2307. #endregion
  2308. #region GetEnumeratorThrows
  2309. [TestMethod]
  2310. public void Zip_GetEnumeratorThrows()
  2311. {
  2312. var ex = new Exception();
  2313. var scheduler = new TestScheduler();
  2314. var xs = scheduler.CreateHotObservable(
  2315. OnNext(210, 42),
  2316. OnNext(220, 43),
  2317. OnCompleted<int>(230)
  2318. );
  2319. var ys = new RogueEnumerable<int>(ex);
  2320. var res = scheduler.Start(() =>
  2321. xs.Zip(ys, (x, y) => x + y)
  2322. );
  2323. res.Messages.AssertEqual(
  2324. OnError<int>(200, ex)
  2325. );
  2326. xs.Subscriptions.AssertEqual(
  2327. );
  2328. }
  2329. #endregion
  2330. #region AllCompleted
  2331. [TestMethod]
  2332. public void Zip_AllCompleted2()
  2333. {
  2334. var scheduler = new TestScheduler();
  2335. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2336. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2337. var res = scheduler.Start(() =>
  2338. Observable.Zip(e0, e1, (_0, _1) => _0 + _1)
  2339. );
  2340. res.Messages.AssertEqual(
  2341. OnNext(210, 10),
  2342. OnCompleted<int>(220)
  2343. );
  2344. var es = new[] { e0, e1 };
  2345. var i = 0;
  2346. foreach (var e in es.Take(es.Length - 1))
  2347. {
  2348. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2349. }
  2350. es.Last().Subscriptions.AssertEqual(
  2351. Subscribe(200, 220 + (i - 1) * 10)
  2352. );
  2353. }
  2354. [TestMethod]
  2355. public void Zip_AllCompleted3()
  2356. {
  2357. var scheduler = new TestScheduler();
  2358. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2359. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2360. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2361. var res = scheduler.Start(() =>
  2362. Observable.Zip(e0, e1, e2, (_0, _1, _2) => _0 + _1 + _2)
  2363. );
  2364. res.Messages.AssertEqual(
  2365. OnNext(210, 15),
  2366. OnCompleted<int>(230)
  2367. );
  2368. var es = new[] { e0, e1, e2 };
  2369. var i = 0;
  2370. foreach (var e in es.Take(es.Length - 1))
  2371. {
  2372. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2373. }
  2374. es.Last().Subscriptions.AssertEqual(
  2375. Subscribe(200, 220 + (i - 1) * 10)
  2376. );
  2377. }
  2378. [TestMethod]
  2379. public void Zip_AllCompleted4()
  2380. {
  2381. var scheduler = new TestScheduler();
  2382. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2383. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2384. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2385. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2386. var res = scheduler.Start(() =>
  2387. Observable.Zip(e0, e1, e2, e3, (_0, _1, _2, _3) => _0 + _1 + _2 + _3)
  2388. );
  2389. res.Messages.AssertEqual(
  2390. OnNext(210, 20),
  2391. OnCompleted<int>(240)
  2392. );
  2393. var es = new[] { e0, e1, e2, e3 };
  2394. var i = 0;
  2395. foreach (var e in es.Take(es.Length - 1))
  2396. {
  2397. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2398. }
  2399. es.Last().Subscriptions.AssertEqual(
  2400. Subscribe(200, 220 + (i - 1) * 10)
  2401. );
  2402. }
  2403. [TestMethod]
  2404. public void Zip_AllCompleted5()
  2405. {
  2406. var scheduler = new TestScheduler();
  2407. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2408. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2409. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2410. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2411. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2412. var res = scheduler.Start(() =>
  2413. Observable.Zip(e0, e1, e2, e3, e4, (_0, _1, _2, _3, _4) => _0 + _1 + _2 + _3 + _4)
  2414. );
  2415. res.Messages.AssertEqual(
  2416. OnNext(210, 25),
  2417. OnCompleted<int>(250)
  2418. );
  2419. var es = new[] { e0, e1, e2, e3, e4 };
  2420. var i = 0;
  2421. foreach (var e in es.Take(es.Length - 1))
  2422. {
  2423. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2424. }
  2425. es.Last().Subscriptions.AssertEqual(
  2426. Subscribe(200, 220 + (i - 1) * 10)
  2427. );
  2428. }
  2429. [TestMethod]
  2430. public void Zip_AllCompleted6()
  2431. {
  2432. var scheduler = new TestScheduler();
  2433. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2434. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2435. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2436. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2437. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2438. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2439. var res = scheduler.Start(() =>
  2440. Observable.Zip(e0, e1, e2, e3, e4, e5, (_0, _1, _2, _3, _4, _5) => _0 + _1 + _2 + _3 + _4 + _5)
  2441. );
  2442. res.Messages.AssertEqual(
  2443. OnNext(210, 30),
  2444. OnCompleted<int>(260)
  2445. );
  2446. var es = new[] { e0, e1, e2, e3, e4, e5 };
  2447. var i = 0;
  2448. foreach (var e in es.Take(es.Length - 1))
  2449. {
  2450. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2451. }
  2452. es.Last().Subscriptions.AssertEqual(
  2453. Subscribe(200, 220 + (i - 1) * 10)
  2454. );
  2455. }
  2456. [TestMethod]
  2457. public void Zip_AllCompleted7()
  2458. {
  2459. var scheduler = new TestScheduler();
  2460. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2461. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2462. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2463. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2464. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2465. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2466. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2467. var res = scheduler.Start(() =>
  2468. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, (_0, _1, _2, _3, _4, _5, _6) => _0 + _1 + _2 + _3 + _4 + _5 + _6)
  2469. );
  2470. res.Messages.AssertEqual(
  2471. OnNext(210, 35),
  2472. OnCompleted<int>(270)
  2473. );
  2474. var es = new[] { e0, e1, e2, e3, e4, e5, e6 };
  2475. var i = 0;
  2476. foreach (var e in es.Take(es.Length - 1))
  2477. {
  2478. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2479. }
  2480. es.Last().Subscriptions.AssertEqual(
  2481. Subscribe(200, 220 + (i - 1) * 10)
  2482. );
  2483. }
  2484. [TestMethod]
  2485. public void Zip_AllCompleted8()
  2486. {
  2487. var scheduler = new TestScheduler();
  2488. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2489. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2490. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2491. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2492. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2493. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2494. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2495. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2496. var res = scheduler.Start(() =>
  2497. Observable.Zip(e0, e1, e2, e3, e4, e5, e6, e7, (_0, _1, _2, _3, _4, _5, _6, _7) => _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7)
  2498. );
  2499. res.Messages.AssertEqual(
  2500. OnNext(210, 40),
  2501. OnCompleted<int>(280)
  2502. );
  2503. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7 };
  2504. var i = 0;
  2505. foreach (var e in es.Take(es.Length - 1))
  2506. {
  2507. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2508. }
  2509. es.Last().Subscriptions.AssertEqual(
  2510. Subscribe(200, 220 + (i - 1) * 10)
  2511. );
  2512. }
  2513. [TestMethod]
  2514. public void Zip_AllCompleted9()
  2515. {
  2516. var scheduler = new TestScheduler();
  2517. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2518. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2519. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2520. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2521. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2522. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2523. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2524. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2525. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnCompleted<int>(300)]);
  2526. var res = scheduler.Start(() =>
  2527. Observable.Zip(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)
  2528. );
  2529. res.Messages.AssertEqual(
  2530. OnNext(210, 45),
  2531. OnCompleted<int>(290)
  2532. );
  2533. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8 };
  2534. var i = 0;
  2535. foreach (var e in es.Take(es.Length - 1))
  2536. {
  2537. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2538. }
  2539. es.Last().Subscriptions.AssertEqual(
  2540. Subscribe(200, 220 + (i - 1) * 10)
  2541. );
  2542. }
  2543. [TestMethod]
  2544. public void Zip_AllCompleted10()
  2545. {
  2546. var scheduler = new TestScheduler();
  2547. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2548. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2549. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2550. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2551. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2552. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2553. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2554. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2555. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnCompleted<int>(300)]);
  2556. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnCompleted<int>(310)]);
  2557. var res = scheduler.Start(() =>
  2558. Observable.Zip(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)
  2559. );
  2560. res.Messages.AssertEqual(
  2561. OnNext(210, 50),
  2562. OnCompleted<int>(300)
  2563. );
  2564. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 };
  2565. var i = 0;
  2566. foreach (var e in es.Take(es.Length - 1))
  2567. {
  2568. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2569. }
  2570. es.Last().Subscriptions.AssertEqual(
  2571. Subscribe(200, 220 + (i - 1) * 10)
  2572. );
  2573. }
  2574. [TestMethod]
  2575. public void Zip_AllCompleted11()
  2576. {
  2577. var scheduler = new TestScheduler();
  2578. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2579. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2580. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2581. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2582. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2583. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2584. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2585. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2586. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnCompleted<int>(300)]);
  2587. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnCompleted<int>(310)]);
  2588. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnCompleted<int>(320)]);
  2589. var res = scheduler.Start(() =>
  2590. Observable.Zip(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)
  2591. );
  2592. res.Messages.AssertEqual(
  2593. OnNext(210, 55),
  2594. OnCompleted<int>(310)
  2595. );
  2596. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10 };
  2597. var i = 0;
  2598. foreach (var e in es.Take(es.Length - 1))
  2599. {
  2600. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2601. }
  2602. es.Last().Subscriptions.AssertEqual(
  2603. Subscribe(200, 220 + (i - 1) * 10)
  2604. );
  2605. }
  2606. [TestMethod]
  2607. public void Zip_AllCompleted12()
  2608. {
  2609. var scheduler = new TestScheduler();
  2610. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2611. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2612. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2613. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2614. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2615. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2616. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2617. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2618. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnCompleted<int>(300)]);
  2619. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnCompleted<int>(310)]);
  2620. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnCompleted<int>(320)]);
  2621. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnCompleted<int>(330)]);
  2622. var res = scheduler.Start(() =>
  2623. Observable.Zip(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)
  2624. );
  2625. res.Messages.AssertEqual(
  2626. OnNext(210, 60),
  2627. OnCompleted<int>(320)
  2628. );
  2629. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11 };
  2630. var i = 0;
  2631. foreach (var e in es.Take(es.Length - 1))
  2632. {
  2633. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2634. }
  2635. es.Last().Subscriptions.AssertEqual(
  2636. Subscribe(200, 220 + (i - 1) * 10)
  2637. );
  2638. }
  2639. [TestMethod]
  2640. public void Zip_AllCompleted13()
  2641. {
  2642. var scheduler = new TestScheduler();
  2643. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2644. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2645. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2646. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2647. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2648. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2649. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2650. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2651. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnCompleted<int>(300)]);
  2652. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnCompleted<int>(310)]);
  2653. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnCompleted<int>(320)]);
  2654. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnCompleted<int>(330)]);
  2655. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnCompleted<int>(340)]);
  2656. var res = scheduler.Start(() =>
  2657. Observable.Zip(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)
  2658. );
  2659. res.Messages.AssertEqual(
  2660. OnNext(210, 65),
  2661. OnCompleted<int>(330)
  2662. );
  2663. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12 };
  2664. var i = 0;
  2665. foreach (var e in es.Take(es.Length - 1))
  2666. {
  2667. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2668. }
  2669. es.Last().Subscriptions.AssertEqual(
  2670. Subscribe(200, 220 + (i - 1) * 10)
  2671. );
  2672. }
  2673. [TestMethod]
  2674. public void Zip_AllCompleted14()
  2675. {
  2676. var scheduler = new TestScheduler();
  2677. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2678. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2679. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2680. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2681. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2682. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2683. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2684. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2685. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnCompleted<int>(300)]);
  2686. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnCompleted<int>(310)]);
  2687. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnCompleted<int>(320)]);
  2688. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnCompleted<int>(330)]);
  2689. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnCompleted<int>(340)]);
  2690. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnNext(340, 18), OnCompleted<int>(350)]);
  2691. var res = scheduler.Start(() =>
  2692. Observable.Zip(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)
  2693. );
  2694. res.Messages.AssertEqual(
  2695. OnNext(210, 70),
  2696. OnCompleted<int>(340)
  2697. );
  2698. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13 };
  2699. var i = 0;
  2700. foreach (var e in es.Take(es.Length - 1))
  2701. {
  2702. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2703. }
  2704. es.Last().Subscriptions.AssertEqual(
  2705. Subscribe(200, 220 + (i - 1) * 10)
  2706. );
  2707. }
  2708. [TestMethod]
  2709. public void Zip_AllCompleted15()
  2710. {
  2711. var scheduler = new TestScheduler();
  2712. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2713. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2714. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2715. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2716. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2717. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2718. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2719. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2720. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnCompleted<int>(300)]);
  2721. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnCompleted<int>(310)]);
  2722. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnCompleted<int>(320)]);
  2723. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnCompleted<int>(330)]);
  2724. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnCompleted<int>(340)]);
  2725. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnNext(340, 18), OnCompleted<int>(350)]);
  2726. var e14 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnNext(340, 18), OnNext(350, 19), OnCompleted<int>(360)]);
  2727. var res = scheduler.Start(() =>
  2728. Observable.Zip(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)
  2729. );
  2730. res.Messages.AssertEqual(
  2731. OnNext(210, 75),
  2732. OnCompleted<int>(350)
  2733. );
  2734. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14 };
  2735. var i = 0;
  2736. foreach (var e in es.Take(es.Length - 1))
  2737. {
  2738. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2739. }
  2740. es.Last().Subscriptions.AssertEqual(
  2741. Subscribe(200, 220 + (i - 1) * 10)
  2742. );
  2743. }
  2744. [TestMethod]
  2745. public void Zip_AllCompleted16()
  2746. {
  2747. var scheduler = new TestScheduler();
  2748. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnCompleted<int>(220)]);
  2749. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnCompleted<int>(230)]);
  2750. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnCompleted<int>(240)]);
  2751. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnCompleted<int>(250)]);
  2752. var e4 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnCompleted<int>(260)]);
  2753. var e5 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnCompleted<int>(270)]);
  2754. var e6 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnCompleted<int>(280)]);
  2755. var e7 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnCompleted<int>(290)]);
  2756. var e8 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnCompleted<int>(300)]);
  2757. var e9 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnCompleted<int>(310)]);
  2758. var e10 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnCompleted<int>(320)]);
  2759. var e11 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnCompleted<int>(330)]);
  2760. var e12 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnCompleted<int>(340)]);
  2761. var e13 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnNext(340, 18), OnCompleted<int>(350)]);
  2762. var e14 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnNext(340, 18), OnNext(350, 19), OnCompleted<int>(360)]);
  2763. var e15 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 5), OnNext(220, 6), OnNext(230, 7), OnNext(240, 8), OnNext(250, 9), OnNext(260, 10), OnNext(270, 11), OnNext(280, 12), OnNext(290, 13), OnNext(300, 14), OnNext(310, 15), OnNext(320, 16), OnNext(330, 17), OnNext(340, 18), OnNext(350, 19), OnNext(360, 20), OnCompleted<int>(370)]);
  2764. var res = scheduler.Start(() =>
  2765. Observable.Zip(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)
  2766. );
  2767. res.Messages.AssertEqual(
  2768. OnNext(210, 80),
  2769. OnCompleted<int>(360)
  2770. );
  2771. var es = new[] { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15 };
  2772. var i = 0;
  2773. foreach (var e in es.Take(es.Length - 1))
  2774. {
  2775. e.Subscriptions.AssertEqual(Subscribe(200, 220 + (i++ * 10)));
  2776. }
  2777. es.Last().Subscriptions.AssertEqual(
  2778. Subscribe(200, 220 + (i - 1) * 10)
  2779. );
  2780. }
  2781. #endregion
  2782. #region ZipWithEnumerable
  2783. [TestMethod]
  2784. public void ZipWithEnumerable_NeverNever()
  2785. {
  2786. var evt = new ManualResetEvent(false);
  2787. var scheduler = new TestScheduler();
  2788. var n1 = scheduler.CreateHotObservable(
  2789. OnNext(150, 1)
  2790. );
  2791. var n2 = new MockEnumerable<int>(scheduler,
  2792. EnumerableNever(evt)
  2793. );
  2794. var res = scheduler.Start(() =>
  2795. n1.Zip(n2, (x, y) => x + y)
  2796. );
  2797. res.Messages.AssertEqual(
  2798. );
  2799. n1.Subscriptions.AssertEqual(
  2800. Subscribe(200, 1000)
  2801. );
  2802. n2.Subscriptions.AssertEqual(
  2803. Subscribe(200, 1000)
  2804. );
  2805. evt.Set();
  2806. }
  2807. [TestMethod]
  2808. public void ZipWithEnumerable_NeverEmpty()
  2809. {
  2810. var scheduler = new TestScheduler();
  2811. var n = scheduler.CreateHotObservable(
  2812. OnNext(150, 1)
  2813. );
  2814. var e = new MockEnumerable<int>(scheduler,
  2815. []
  2816. );
  2817. var res = scheduler.Start(() =>
  2818. n.Zip(e, (x, y) => x + y)
  2819. );
  2820. res.Messages.AssertEqual(
  2821. );
  2822. n.Subscriptions.AssertEqual(
  2823. Subscribe(200, 1000)
  2824. );
  2825. e.Subscriptions.AssertEqual(
  2826. Subscribe(200, 1000)
  2827. );
  2828. }
  2829. [TestMethod]
  2830. public void ZipWithEnumerable_EmptyNever()
  2831. {
  2832. var evt = new ManualResetEvent(false);
  2833. var scheduler = new TestScheduler();
  2834. var e = scheduler.CreateHotObservable(
  2835. OnNext(150, 1),
  2836. OnCompleted<int>(210)
  2837. );
  2838. var n = new MockEnumerable<int>(scheduler,
  2839. EnumerableNever(evt)
  2840. );
  2841. var res = scheduler.Start(() =>
  2842. e.Zip(n, (x, y) => x + y)
  2843. );
  2844. res.Messages.AssertEqual(
  2845. OnCompleted<int>(210)
  2846. );
  2847. e.Subscriptions.AssertEqual(
  2848. Subscribe(200, 210)
  2849. );
  2850. n.Subscriptions.AssertEqual(
  2851. Subscribe(200, 210)
  2852. );
  2853. evt.Set();
  2854. }
  2855. [TestMethod]
  2856. public void ZipWithEnumerable_EmptyEmpty()
  2857. {
  2858. var scheduler = new TestScheduler();
  2859. var e1 = scheduler.CreateHotObservable(
  2860. OnNext(150, 1),
  2861. OnCompleted<int>(210)
  2862. );
  2863. var e2 = new MockEnumerable<int>(scheduler,
  2864. []
  2865. );
  2866. var res = scheduler.Start(() =>
  2867. e1.Zip(e2, (x, y) => x + y)
  2868. );
  2869. res.Messages.AssertEqual(
  2870. OnCompleted<int>(210)
  2871. );
  2872. e1.Subscriptions.AssertEqual(
  2873. Subscribe(200, 210)
  2874. );
  2875. e2.Subscriptions.AssertEqual(
  2876. Subscribe(200, 210)
  2877. );
  2878. }
  2879. [TestMethod]
  2880. public void ZipWithEnumerable_EmptyNonEmpty()
  2881. {
  2882. var scheduler = new TestScheduler();
  2883. var e = scheduler.CreateHotObservable(
  2884. OnNext(150, 1),
  2885. OnCompleted<int>(210)
  2886. );
  2887. var o = new MockEnumerable<int>(scheduler,
  2888. [2]
  2889. );
  2890. var res = scheduler.Start(() =>
  2891. e.Zip(o, (x, y) => x + y)
  2892. );
  2893. res.Messages.AssertEqual(
  2894. OnCompleted<int>(210)
  2895. );
  2896. e.Subscriptions.AssertEqual(
  2897. Subscribe(200, 210)
  2898. );
  2899. o.Subscriptions.AssertEqual(
  2900. Subscribe(200, 210)
  2901. );
  2902. }
  2903. [TestMethod]
  2904. public void ZipWithEnumerable_NonEmptyEmpty()
  2905. {
  2906. var scheduler = new TestScheduler();
  2907. var e = new MockEnumerable<int>(scheduler,
  2908. []
  2909. );
  2910. var o = scheduler.CreateHotObservable(
  2911. OnNext(150, 1),
  2912. OnNext(215, 2),
  2913. OnCompleted<int>(220)
  2914. );
  2915. var res = scheduler.Start(() =>
  2916. o.Zip(e, (x, y) => x + y)
  2917. );
  2918. res.Messages.AssertEqual(
  2919. OnCompleted<int>(215)
  2920. );
  2921. e.Subscriptions.AssertEqual(
  2922. Subscribe(200, 215)
  2923. );
  2924. o.Subscriptions.AssertEqual(
  2925. Subscribe(200, 215)
  2926. );
  2927. }
  2928. [TestMethod]
  2929. public void ZipWithEnumerable_NeverNonEmpty()
  2930. {
  2931. var scheduler = new TestScheduler();
  2932. var o = new MockEnumerable<int>(scheduler,
  2933. [2]
  2934. );
  2935. var n = scheduler.CreateHotObservable(
  2936. OnNext(150, 1)
  2937. );
  2938. var res = scheduler.Start(() =>
  2939. n.Zip(o, (x, y) => x + y)
  2940. );
  2941. res.Messages.AssertEqual(
  2942. );
  2943. o.Subscriptions.AssertEqual(
  2944. Subscribe(200, 1000)
  2945. );
  2946. n.Subscriptions.AssertEqual(
  2947. Subscribe(200, 1000)
  2948. );
  2949. }
  2950. [TestMethod]
  2951. public void ZipWithEnumerable_NonEmptyNonEmpty()
  2952. {
  2953. var scheduler = new TestScheduler();
  2954. var o1 = scheduler.CreateHotObservable(
  2955. OnNext(150, 1),
  2956. OnNext(215, 2),
  2957. OnCompleted<int>(230)
  2958. );
  2959. var o2 = new MockEnumerable<int>(scheduler,
  2960. [3]
  2961. );
  2962. var res = scheduler.Start(() =>
  2963. o1.Zip(o2, (x, y) => x + y)
  2964. );
  2965. res.Messages.AssertEqual(
  2966. OnNext(215, 2 + 3),
  2967. OnCompleted<int>(230)
  2968. );
  2969. o1.Subscriptions.AssertEqual(
  2970. Subscribe(200, 230)
  2971. );
  2972. o2.Subscriptions.AssertEqual(
  2973. Subscribe(200, 230)
  2974. );
  2975. }
  2976. [TestMethod]
  2977. public void ZipWithEnumerable_EmptyError()
  2978. {
  2979. var scheduler = new TestScheduler();
  2980. var ex = new Exception();
  2981. var e = scheduler.CreateHotObservable(
  2982. OnNext(150, 1),
  2983. OnCompleted<int>(230)
  2984. );
  2985. var f = new MockEnumerable<int>(scheduler,
  2986. ThrowEnumerable(false, ex)
  2987. );
  2988. var res = scheduler.Start(() =>
  2989. e.Zip(f, (x, y) => x + y)
  2990. );
  2991. res.Messages.AssertEqual(
  2992. OnCompleted<int>(230)
  2993. );
  2994. e.Subscriptions.AssertEqual(
  2995. Subscribe(200, 230)
  2996. );
  2997. f.Subscriptions.AssertEqual(
  2998. Subscribe(200, 230)
  2999. );
  3000. }
  3001. [TestMethod]
  3002. public void ZipWithEnumerable_ErrorEmpty()
  3003. {
  3004. var scheduler = new TestScheduler();
  3005. var ex = new Exception();
  3006. var e = new MockEnumerable<int>(scheduler,
  3007. []
  3008. );
  3009. var f = scheduler.CreateHotObservable(
  3010. OnNext(150, 1),
  3011. OnError<int>(220, ex)
  3012. );
  3013. var res = scheduler.Start(() =>
  3014. f.Zip(e, (x, y) => x + y)
  3015. );
  3016. res.Messages.AssertEqual(
  3017. OnError<int>(220, ex)
  3018. );
  3019. e.Subscriptions.AssertEqual(
  3020. Subscribe(200, 220)
  3021. );
  3022. f.Subscriptions.AssertEqual(
  3023. Subscribe(200, 220)
  3024. );
  3025. }
  3026. [TestMethod]
  3027. public void ZipWithEnumerable_NeverError()
  3028. {
  3029. var scheduler = new TestScheduler();
  3030. var ex = new Exception();
  3031. var n = scheduler.CreateHotObservable(
  3032. OnNext(150, 1)
  3033. );
  3034. var f = new MockEnumerable<int>(scheduler,
  3035. ThrowEnumerable(false, ex)
  3036. );
  3037. var res = scheduler.Start(() =>
  3038. n.Zip(f, (x, y) => x + y)
  3039. );
  3040. res.Messages.AssertEqual(
  3041. );
  3042. n.Subscriptions.AssertEqual(
  3043. Subscribe(200, 1000)
  3044. );
  3045. f.Subscriptions.AssertEqual(
  3046. Subscribe(200, 1000)
  3047. );
  3048. }
  3049. [TestMethod]
  3050. public void ZipWithEnumerable_ErrorNever()
  3051. {
  3052. var evt = new ManualResetEvent(false);
  3053. var scheduler = new TestScheduler();
  3054. var ex = new Exception();
  3055. var n = new MockEnumerable<int>(scheduler,
  3056. EnumerableNever(evt)
  3057. );
  3058. var f = scheduler.CreateHotObservable(
  3059. OnNext(150, 1),
  3060. OnError<int>(220, ex)
  3061. );
  3062. var res = scheduler.Start(() =>
  3063. f.Zip(n, (x, y) => x + y)
  3064. );
  3065. res.Messages.AssertEqual(
  3066. OnError<int>(220, ex)
  3067. );
  3068. n.Subscriptions.AssertEqual(
  3069. Subscribe(200, 220)
  3070. );
  3071. f.Subscriptions.AssertEqual(
  3072. Subscribe(200, 220)
  3073. );
  3074. evt.Set();
  3075. }
  3076. [TestMethod]
  3077. public void ZipWithEnumerable_ErrorError()
  3078. {
  3079. var scheduler = new TestScheduler();
  3080. var ex1 = new Exception();
  3081. var ex2 = new Exception();
  3082. var f1 = scheduler.CreateHotObservable(
  3083. OnNext(150, 1),
  3084. OnError<int>(230, ex1)
  3085. );
  3086. var f2 = new MockEnumerable<int>(scheduler,
  3087. ThrowEnumerable(false, ex2)
  3088. );
  3089. var res = scheduler.Start(() =>
  3090. f1.Zip(f2, (x, y) => x + y)
  3091. );
  3092. res.Messages.AssertEqual(
  3093. OnError<int>(230, ex1)
  3094. );
  3095. f1.Subscriptions.AssertEqual(
  3096. Subscribe(200, 230)
  3097. );
  3098. f2.Subscriptions.AssertEqual(
  3099. Subscribe(200, 230)
  3100. );
  3101. }
  3102. [TestMethod]
  3103. public void ZipWithEnumerable_SomeError()
  3104. {
  3105. var scheduler = new TestScheduler();
  3106. var ex = new Exception();
  3107. var o = scheduler.CreateHotObservable(
  3108. OnNext(150, 1),
  3109. OnNext(215, 2),
  3110. OnCompleted<int>(230)
  3111. );
  3112. var e = new MockEnumerable<int>(scheduler,
  3113. ThrowEnumerable(false, ex)
  3114. );
  3115. var res = scheduler.Start(() =>
  3116. o.Zip(e, (x, y) => x + y)
  3117. );
  3118. res.Messages.AssertEqual(
  3119. OnError<int>(215, ex)
  3120. );
  3121. o.Subscriptions.AssertEqual(
  3122. Subscribe(200, 215)
  3123. );
  3124. e.Subscriptions.AssertEqual(
  3125. Subscribe(200, 215)
  3126. );
  3127. }
  3128. [TestMethod]
  3129. public void ZipWithEnumerable_ErrorSome()
  3130. {
  3131. var scheduler = new TestScheduler();
  3132. var ex = new Exception();
  3133. var o = new MockEnumerable<int>(scheduler,
  3134. [2]
  3135. );
  3136. var e = scheduler.CreateHotObservable(
  3137. OnNext(150, 1),
  3138. OnError<int>(220, ex)
  3139. );
  3140. var res = scheduler.Start(() =>
  3141. e.Zip(o, (x, y) => x + y)
  3142. );
  3143. res.Messages.AssertEqual(
  3144. OnError<int>(220, ex)
  3145. );
  3146. o.Subscriptions.AssertEqual(
  3147. Subscribe(200, 220)
  3148. );
  3149. e.Subscriptions.AssertEqual(
  3150. Subscribe(200, 220)
  3151. );
  3152. }
  3153. [TestMethod]
  3154. public void ZipWithEnumerable_SomeDataBothSides()
  3155. {
  3156. var scheduler = new TestScheduler();
  3157. var ex = new Exception();
  3158. var o = new MockEnumerable<int>(scheduler,
  3159. [5, 4, 3, 2]
  3160. );
  3161. var e = scheduler.CreateHotObservable(
  3162. OnNext(150, 1),
  3163. OnNext(210, 2),
  3164. OnNext(220, 3),
  3165. OnNext(230, 4),
  3166. OnNext(240, 5)
  3167. );
  3168. var res = scheduler.Start(() =>
  3169. e.Zip(o, (x, y) => x + y)
  3170. );
  3171. res.Messages.AssertEqual(
  3172. OnNext(210, 7),
  3173. OnNext(220, 7),
  3174. OnNext(230, 7),
  3175. OnNext(240, 7)
  3176. );
  3177. o.Subscriptions.AssertEqual(
  3178. Subscribe(200, 1000)
  3179. );
  3180. e.Subscriptions.AssertEqual(
  3181. Subscribe(200, 1000)
  3182. );
  3183. }
  3184. [TestMethod]
  3185. public void ZipWithEnumerable_EnumeratorThrowsMoveNext()
  3186. {
  3187. var ex = new Exception();
  3188. var scheduler = new TestScheduler();
  3189. var o1 = scheduler.CreateHotObservable(
  3190. OnNext(150, 1),
  3191. OnNext(215, 2),
  3192. OnNext(225, 4),
  3193. OnCompleted<int>(240)
  3194. );
  3195. var o2 = new MockEnumerable<int>(scheduler,
  3196. new MyEnumerable(false, ex)
  3197. );
  3198. var res = scheduler.Start(() =>
  3199. o1.Zip(o2, (x, y) => x + y)
  3200. );
  3201. res.Messages.AssertEqual(
  3202. OnError<int>(215, ex)
  3203. );
  3204. o1.Subscriptions.AssertEqual(
  3205. Subscribe(200, 215)
  3206. );
  3207. o2.Subscriptions.AssertEqual(
  3208. Subscribe(200, 215)
  3209. );
  3210. }
  3211. [TestMethod]
  3212. public void ZipWithEnumerable_EnumeratorThrowsCurrent()
  3213. {
  3214. var ex = new Exception();
  3215. var scheduler = new TestScheduler();
  3216. var o1 = scheduler.CreateHotObservable(
  3217. OnNext(150, 1),
  3218. OnNext(215, 2),
  3219. OnNext(225, 4),
  3220. OnCompleted<int>(240)
  3221. );
  3222. var o2 = new MockEnumerable<int>(scheduler,
  3223. new MyEnumerable(true, ex)
  3224. );
  3225. var res = scheduler.Start(() =>
  3226. o1.Zip(o2, (x, y) => x + y)
  3227. );
  3228. res.Messages.AssertEqual(
  3229. OnError<int>(215, ex)
  3230. );
  3231. o1.Subscriptions.AssertEqual(
  3232. Subscribe(200, 215)
  3233. );
  3234. o2.Subscriptions.AssertEqual(
  3235. Subscribe(200, 215)
  3236. );
  3237. }
  3238. [TestMethod]
  3239. public void ZipWithEnumerable_SelectorThrows()
  3240. {
  3241. var scheduler = new TestScheduler();
  3242. var o1 = scheduler.CreateHotObservable(
  3243. OnNext(150, 1),
  3244. OnNext(215, 2),
  3245. OnNext(225, 4),
  3246. OnCompleted<int>(240)
  3247. );
  3248. var o2 = new MockEnumerable<int>(scheduler,
  3249. [3, 5]
  3250. );
  3251. var ex = new Exception();
  3252. var res = scheduler.Start(() =>
  3253. o1.Zip(o2, (x, y) =>
  3254. {
  3255. if (y == 5)
  3256. {
  3257. throw ex;
  3258. }
  3259. return x + y;
  3260. })
  3261. );
  3262. res.Messages.AssertEqual(
  3263. OnNext(215, 2 + 3),
  3264. OnError<int>(225, ex)
  3265. );
  3266. o1.Subscriptions.AssertEqual(
  3267. Subscribe(200, 225)
  3268. );
  3269. o2.Subscriptions.AssertEqual(
  3270. Subscribe(200, 225)
  3271. );
  3272. }
  3273. [TestMethod]
  3274. public void ZipWithEnumerable_NoAsyncDisposeOnMoveNext()
  3275. {
  3276. var source = new Subject<int>();
  3277. var disposable = new SingleAssignmentDisposable();
  3278. var other = new MoveNextDisposeDetectEnumerable(disposable, true);
  3279. disposable.Disposable = source.Zip(other, (a, b) => a + b).Subscribe();
  3280. source.OnNext(1);
  3281. Assert.True(other.IsDisposed);
  3282. Assert.False(other.DisposedWhileMoveNext);
  3283. Assert.False(other.DisposedWhileCurrent);
  3284. }
  3285. [TestMethod]
  3286. public void ZipWithEnumerable_NoAsyncDisposeOnCurrent()
  3287. {
  3288. var source = new Subject<int>();
  3289. var disposable = new SingleAssignmentDisposable();
  3290. var other = new MoveNextDisposeDetectEnumerable(disposable, false);
  3291. disposable.Disposable = source.Zip(other, (a, b) => a + b).Subscribe();
  3292. source.OnNext(1);
  3293. Assert.True(other.IsDisposed);
  3294. Assert.False(other.DisposedWhileMoveNext);
  3295. Assert.False(other.DisposedWhileCurrent);
  3296. }
  3297. private class MoveNextDisposeDetectEnumerable : IEnumerable<int>, IEnumerator<int>
  3298. {
  3299. private readonly IDisposable _disposable;
  3300. private readonly bool _disposeOnMoveNext;
  3301. private bool _moveNextRunning;
  3302. private bool _currentRunning;
  3303. internal bool DisposedWhileMoveNext;
  3304. internal bool DisposedWhileCurrent;
  3305. internal bool IsDisposed;
  3306. internal MoveNextDisposeDetectEnumerable(IDisposable disposable, bool disposeOnMoveNext)
  3307. {
  3308. _disposable = disposable;
  3309. _disposeOnMoveNext = disposeOnMoveNext;
  3310. }
  3311. public int Current
  3312. {
  3313. get
  3314. {
  3315. _currentRunning = true;
  3316. if (!_disposeOnMoveNext)
  3317. {
  3318. _disposable.Dispose();
  3319. }
  3320. _currentRunning = false;
  3321. return 0;
  3322. }
  3323. }
  3324. object IEnumerator.Current => Current;
  3325. public void Dispose()
  3326. {
  3327. DisposedWhileMoveNext = _moveNextRunning;
  3328. DisposedWhileCurrent = _currentRunning;
  3329. IsDisposed = true;
  3330. }
  3331. public IEnumerator<int> GetEnumerator()
  3332. {
  3333. return this;
  3334. }
  3335. public bool MoveNext()
  3336. {
  3337. _moveNextRunning = true;
  3338. if (_disposeOnMoveNext)
  3339. {
  3340. _disposable.Dispose();
  3341. }
  3342. _moveNextRunning = false;
  3343. return true;
  3344. }
  3345. public void Reset()
  3346. {
  3347. throw new NotSupportedException();
  3348. }
  3349. IEnumerator IEnumerable.GetEnumerator()
  3350. {
  3351. return this;
  3352. }
  3353. }
  3354. private IEnumerable<int> EnumerableNever(ManualResetEvent evt)
  3355. {
  3356. evt.WaitOne();
  3357. yield break;
  3358. }
  3359. private IEnumerable<int> ThrowEnumerable(bool b, Exception ex)
  3360. {
  3361. if (!b)
  3362. {
  3363. throw ex;
  3364. }
  3365. yield break;
  3366. }
  3367. private class MyEnumerable : IEnumerable<int>
  3368. {
  3369. private readonly bool _throwInCurrent;
  3370. private readonly Exception _ex;
  3371. public MyEnumerable(bool throwInCurrent, Exception ex)
  3372. {
  3373. _throwInCurrent = throwInCurrent;
  3374. _ex = ex;
  3375. }
  3376. public IEnumerator<int> GetEnumerator()
  3377. {
  3378. return new MyEnumerator(_throwInCurrent, _ex);
  3379. }
  3380. System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
  3381. {
  3382. return GetEnumerator();
  3383. }
  3384. private class MyEnumerator : IEnumerator<int>
  3385. {
  3386. private readonly bool _throwInCurrent;
  3387. private readonly Exception _ex;
  3388. public MyEnumerator(bool throwInCurrent, Exception ex)
  3389. {
  3390. _throwInCurrent = throwInCurrent;
  3391. _ex = ex;
  3392. }
  3393. public int Current
  3394. {
  3395. get
  3396. {
  3397. if (_throwInCurrent)
  3398. {
  3399. throw _ex;
  3400. }
  3401. else
  3402. {
  3403. return 1;
  3404. }
  3405. }
  3406. }
  3407. public void Dispose()
  3408. {
  3409. }
  3410. object System.Collections.IEnumerator.Current
  3411. {
  3412. get { return Current; }
  3413. }
  3414. public bool MoveNext()
  3415. {
  3416. if (!_throwInCurrent)
  3417. {
  3418. throw _ex;
  3419. }
  3420. return true;
  3421. }
  3422. public void Reset()
  3423. {
  3424. }
  3425. }
  3426. }
  3427. #endregion
  3428. #region NAry
  3429. [TestMethod]
  3430. public void Zip_NAry_ArgumentChecking()
  3431. {
  3432. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IEnumerable<IObservable<int>>)));
  3433. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IEnumerable<IObservable<int>>), _ => 42));
  3434. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip([Observable.Return(42)], default(Func<IList<int>, string>)));
  3435. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Zip(default(IObservable<int>[])));
  3436. }
  3437. [TestMethod]
  3438. public void Zip_NAry_Symmetric()
  3439. {
  3440. var scheduler = new TestScheduler();
  3441. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(420)]);
  3442. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410)]);
  3443. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400)]);
  3444. var res = scheduler.Start(() =>
  3445. Observable.Zip(e0, e1, e2)
  3446. );
  3447. res.Messages.AssertEqual(
  3448. OnNext<IList<int>>(230, l => l.SequenceEqual([1, 2, 3])),
  3449. OnNext<IList<int>>(260, l => l.SequenceEqual([4, 5, 6])),
  3450. OnCompleted<IList<int>>(420)
  3451. );
  3452. e0.Subscriptions.AssertEqual(
  3453. Subscribe(200, 420)
  3454. );
  3455. e1.Subscriptions.AssertEqual(
  3456. Subscribe(200, 410)
  3457. );
  3458. e2.Subscriptions.AssertEqual(
  3459. Subscribe(200, 400)
  3460. );
  3461. }
  3462. [TestMethod]
  3463. public void Zip_NAry_Symmetric_Selector()
  3464. {
  3465. var scheduler = new TestScheduler();
  3466. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(420)]);
  3467. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410)]);
  3468. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400)]);
  3469. var res = scheduler.Start(() =>
  3470. Observable.Zip([e0, e1, e2], xs => xs.Sum())
  3471. );
  3472. res.Messages.AssertEqual(
  3473. OnNext(230, new[] { 1, 2, 3 }.Sum()),
  3474. OnNext(260, new[] { 4, 5, 6 }.Sum()),
  3475. OnCompleted<int>(420)
  3476. );
  3477. e0.Subscriptions.AssertEqual(
  3478. Subscribe(200, 420)
  3479. );
  3480. e1.Subscriptions.AssertEqual(
  3481. Subscribe(200, 410)
  3482. );
  3483. e2.Subscriptions.AssertEqual(
  3484. Subscribe(200, 400)
  3485. );
  3486. }
  3487. [TestMethod]
  3488. public void Zip_NAry_Asymmetric()
  3489. {
  3490. var scheduler = new TestScheduler();
  3491. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(270)]);
  3492. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnNext(290, 7), OnNext(310, 9), OnCompleted<int>(410)]);
  3493. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnNext(280, 8), OnCompleted<int>(300)]);
  3494. var res = scheduler.Start(() =>
  3495. Observable.Zip(e0, e1, e2)
  3496. );
  3497. res.Messages.AssertEqual(
  3498. OnNext<IList<int>>(230, l => l.SequenceEqual([1, 2, 3])),
  3499. OnNext<IList<int>>(260, l => l.SequenceEqual([4, 5, 6])),
  3500. OnCompleted<IList<int>>(310)
  3501. );
  3502. e0.Subscriptions.AssertEqual(
  3503. Subscribe(200, 270)
  3504. );
  3505. e1.Subscriptions.AssertEqual(
  3506. Subscribe(200, 310)
  3507. );
  3508. e2.Subscriptions.AssertEqual(
  3509. Subscribe(200, 300)
  3510. );
  3511. }
  3512. [TestMethod]
  3513. public void Zip_NAry_Asymmetric_Selector()
  3514. {
  3515. var scheduler = new TestScheduler();
  3516. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(270)]);
  3517. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnNext(290, 7), OnNext(310, 9), OnCompleted<int>(410)]);
  3518. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnNext(280, 8), OnCompleted<int>(300)]);
  3519. var res = scheduler.Start(() =>
  3520. Observable.Zip([e0, e1, e2], xs => xs.Sum())
  3521. );
  3522. res.Messages.AssertEqual(
  3523. OnNext(230, new[] { 1, 2, 3 }.Sum()),
  3524. OnNext(260, new[] { 4, 5, 6 }.Sum()),
  3525. OnCompleted<int>(310)
  3526. );
  3527. e0.Subscriptions.AssertEqual(
  3528. Subscribe(200, 270)
  3529. );
  3530. e1.Subscriptions.AssertEqual(
  3531. Subscribe(200, 310)
  3532. );
  3533. e2.Subscriptions.AssertEqual(
  3534. Subscribe(200, 300)
  3535. );
  3536. }
  3537. [TestMethod]
  3538. public void Zip_NAry_Error()
  3539. {
  3540. var ex = new Exception();
  3541. var scheduler = new TestScheduler();
  3542. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnError<int>(250, ex)]);
  3543. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410)]);
  3544. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400)]);
  3545. var res = scheduler.Start(() =>
  3546. Observable.Zip(e0, e1, e2)
  3547. );
  3548. res.Messages.AssertEqual(
  3549. OnNext<IList<int>>(230, l => l.SequenceEqual([1, 2, 3])),
  3550. OnError<IList<int>>(250, ex)
  3551. );
  3552. e0.Subscriptions.AssertEqual(
  3553. Subscribe(200, 250)
  3554. );
  3555. e1.Subscriptions.AssertEqual(
  3556. Subscribe(200, 250)
  3557. );
  3558. e2.Subscriptions.AssertEqual(
  3559. Subscribe(200, 250)
  3560. );
  3561. }
  3562. [TestMethod]
  3563. public void Zip_NAry_Error_Selector()
  3564. {
  3565. var ex = new Exception();
  3566. var scheduler = new TestScheduler();
  3567. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnError<int>(250, ex)]);
  3568. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410)]);
  3569. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400)]);
  3570. var res = scheduler.Start(() =>
  3571. Observable.Zip([e0, e1, e2], xs => xs.Sum())
  3572. );
  3573. res.Messages.AssertEqual(
  3574. OnNext(230, new[] { 1, 2, 3 }.Sum()),
  3575. OnError<int>(250, ex)
  3576. );
  3577. e0.Subscriptions.AssertEqual(
  3578. Subscribe(200, 250)
  3579. );
  3580. e1.Subscriptions.AssertEqual(
  3581. Subscribe(200, 250)
  3582. );
  3583. e2.Subscriptions.AssertEqual(
  3584. Subscribe(200, 250)
  3585. );
  3586. }
  3587. [TestMethod]
  3588. public void Zip_NAry_Enumerable_Simple()
  3589. {
  3590. var scheduler = new TestScheduler();
  3591. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnNext(250, 4), OnCompleted<int>(420)]);
  3592. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnNext(240, 5), OnCompleted<int>(410)]);
  3593. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(230, 3), OnNext(260, 6), OnCompleted<int>(400)]);
  3594. var started = default(long);
  3595. var xss = GetSources(() => started = scheduler.Clock, e0, e1, e2).Select(xs => (IObservable<int>)xs);
  3596. var res = scheduler.Start(() =>
  3597. Observable.Zip(xss)
  3598. );
  3599. Assert.Equal(200, started);
  3600. res.Messages.AssertEqual(
  3601. OnNext<IList<int>>(230, l => l.SequenceEqual([1, 2, 3])),
  3602. OnNext<IList<int>>(260, l => l.SequenceEqual([4, 5, 6])),
  3603. OnCompleted<IList<int>>(420)
  3604. );
  3605. e0.Subscriptions.AssertEqual(
  3606. Subscribe(200, 420)
  3607. );
  3608. e1.Subscriptions.AssertEqual(
  3609. Subscribe(200, 410)
  3610. );
  3611. e2.Subscriptions.AssertEqual(
  3612. Subscribe(200, 400)
  3613. );
  3614. }
  3615. [TestMethod]
  3616. public void Zip_NAry_Enumerable_Throws()
  3617. {
  3618. var ex = new Exception();
  3619. var xss = GetSources(ex, Observable.Return(42));
  3620. var res = Observable.Zip(xss);
  3621. ReactiveAssert.Throws(ex, () => res.Subscribe(_ => { }));
  3622. }
  3623. private IEnumerable<ITestableObservable<int>> GetSources(Action start, params ITestableObservable<int>[] sources)
  3624. {
  3625. start();
  3626. foreach (var xs in sources)
  3627. {
  3628. yield return xs;
  3629. }
  3630. }
  3631. private IEnumerable<IObservable<T>> GetSources<T>(Exception ex, params IObservable<T>[] sources)
  3632. {
  3633. foreach (var xs in sources)
  3634. {
  3635. yield return xs;
  3636. }
  3637. throw ex;
  3638. }
  3639. #endregion
  3640. #region AtLeastOneThrows
  3641. [TestMethod]
  3642. public void Zip_AtLeastOneThrows4()
  3643. {
  3644. var ex = new Exception();
  3645. var scheduler = new TestScheduler();
  3646. var e0 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(210, 1), OnCompleted<int>(400)]);
  3647. var e1 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(220, 2), OnCompleted<int>(400)]);
  3648. var e2 = scheduler.CreateHotObservable([OnNext(150, 1), OnError<int>(230, ex)]);
  3649. var e3 = scheduler.CreateHotObservable([OnNext(150, 1), OnNext(240, 4), OnCompleted<int>(400)]);
  3650. var res = scheduler.Start(() =>
  3651. Observable.Zip(e0, e1, e2, e3, (_0, _1, _2, _3) => 42)
  3652. );
  3653. res.Messages.AssertEqual(
  3654. OnError<int>(230, ex)
  3655. );
  3656. e0.Subscriptions.AssertEqual(Subscribe(200, 230));
  3657. e1.Subscriptions.AssertEqual(Subscribe(200, 230));
  3658. e2.Subscriptions.AssertEqual(Subscribe(200, 230));
  3659. e3.Subscriptions.AssertEqual(Subscribe(200, 230));
  3660. }
  3661. #endregion
  3662. [TestMethod]
  3663. public void Zip2WithImmediateReturn()
  3664. {
  3665. Observable.Zip<Unit, Unit, Unit>(
  3666. Observable.Return(Unit.Default),
  3667. Observable.Return(Unit.Default),
  3668. (_, __) => Unit.Default
  3669. )
  3670. .Subscribe(_ => { });
  3671. }
  3672. [TestMethod]
  3673. public void Zip3WithImmediateReturn()
  3674. {
  3675. var result = 0;
  3676. Observable.Zip<int, int, int, int>(
  3677. Observable.Return(1),
  3678. Observable.Return(2),
  3679. Observable.Return(4),
  3680. (a, b, c) => a + b + c
  3681. )
  3682. .Subscribe(v => result = v);
  3683. Assert.Equal(7, result);
  3684. }
  3685. [TestMethod]
  3686. public void ZipEnumerableWithImmediateReturn()
  3687. {
  3688. Enumerable.Range(0, 100)
  3689. .Select(_ => Observable.Return(Unit.Default))
  3690. .Zip()
  3691. .Subscribe(_ =>
  3692. {
  3693. }
  3694. );
  3695. }
  3696. }
  3697. #pragma warning restore IDE0039 // Use local function
  3698. }