TakeTest.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837
  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.Generic;
  6. using System.Linq;
  7. using System.Reactive.Concurrency;
  8. using System.Reactive.Linq;
  9. using System.Reactive.Subjects;
  10. using System.Threading;
  11. using Microsoft.Reactive.Testing;
  12. using ReactiveTests.Dummies;
  13. using Microsoft.VisualStudio.TestTools.UnitTesting;
  14. using Assert = Xunit.Assert;
  15. namespace ReactiveTests.Tests
  16. {
  17. [TestClass]
  18. public class TakeTest : ReactiveTest
  19. {
  20. #region + Count +
  21. [TestMethod]
  22. public void Take_ArgumentChecking()
  23. {
  24. ReactiveAssert.Throws<ArgumentNullException>(() => ((IObservable<int>)null).Take(0));
  25. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => DummyObservable<int>.Instance.Take(-1));
  26. ReactiveAssert.Throws<ArgumentNullException>(() => DummyObservable<int>.Instance.Take(1).Subscribe(null));
  27. ReactiveAssert.Throws<ArgumentNullException>(() => ((IObservable<int>)null).Take(0, Scheduler.Immediate));
  28. ReactiveAssert.Throws<ArgumentNullException>(() => DummyObservable<int>.Instance.Take(0, default));
  29. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => DummyObservable<int>.Instance.Take(-1, Scheduler.Immediate));
  30. }
  31. [TestMethod]
  32. public void Take_Complete_After()
  33. {
  34. var scheduler = new TestScheduler();
  35. var xs = scheduler.CreateHotObservable(
  36. OnNext(70, 6),
  37. OnNext(150, 4),
  38. OnNext(210, 9),
  39. OnNext(230, 13),
  40. OnNext(270, 7),
  41. OnNext(280, 1),
  42. OnNext(300, -1),
  43. OnNext(310, 3),
  44. OnNext(340, 8),
  45. OnNext(370, 11),
  46. OnNext(410, 15),
  47. OnNext(415, 16),
  48. OnNext(460, 72),
  49. OnNext(510, 76),
  50. OnNext(560, 32),
  51. OnNext(570, -100),
  52. OnNext(580, -3),
  53. OnNext(590, 5),
  54. OnNext(630, 10),
  55. OnCompleted<int>(690)
  56. );
  57. var res = scheduler.Start(() =>
  58. xs.Take(20)
  59. );
  60. res.Messages.AssertEqual(
  61. OnNext(210, 9),
  62. OnNext(230, 13),
  63. OnNext(270, 7),
  64. OnNext(280, 1),
  65. OnNext(300, -1),
  66. OnNext(310, 3),
  67. OnNext(340, 8),
  68. OnNext(370, 11),
  69. OnNext(410, 15),
  70. OnNext(415, 16),
  71. OnNext(460, 72),
  72. OnNext(510, 76),
  73. OnNext(560, 32),
  74. OnNext(570, -100),
  75. OnNext(580, -3),
  76. OnNext(590, 5),
  77. OnNext(630, 10),
  78. OnCompleted<int>(690)
  79. );
  80. xs.Subscriptions.AssertEqual(
  81. Subscribe(200, 690)
  82. );
  83. }
  84. [TestMethod]
  85. public void Take_Complete_Same()
  86. {
  87. var scheduler = new TestScheduler();
  88. var xs = scheduler.CreateHotObservable(
  89. OnNext(70, 6),
  90. OnNext(150, 4),
  91. OnNext(210, 9),
  92. OnNext(230, 13),
  93. OnNext(270, 7),
  94. OnNext(280, 1),
  95. OnNext(300, -1),
  96. OnNext(310, 3),
  97. OnNext(340, 8),
  98. OnNext(370, 11),
  99. OnNext(410, 15),
  100. OnNext(415, 16),
  101. OnNext(460, 72),
  102. OnNext(510, 76),
  103. OnNext(560, 32),
  104. OnNext(570, -100),
  105. OnNext(580, -3),
  106. OnNext(590, 5),
  107. OnNext(630, 10),
  108. OnCompleted<int>(690)
  109. );
  110. var res = scheduler.Start(() =>
  111. xs.Take(17)
  112. );
  113. res.Messages.AssertEqual(
  114. OnNext(210, 9),
  115. OnNext(230, 13),
  116. OnNext(270, 7),
  117. OnNext(280, 1),
  118. OnNext(300, -1),
  119. OnNext(310, 3),
  120. OnNext(340, 8),
  121. OnNext(370, 11),
  122. OnNext(410, 15),
  123. OnNext(415, 16),
  124. OnNext(460, 72),
  125. OnNext(510, 76),
  126. OnNext(560, 32),
  127. OnNext(570, -100),
  128. OnNext(580, -3),
  129. OnNext(590, 5),
  130. OnNext(630, 10),
  131. OnCompleted<int>(630)
  132. );
  133. xs.Subscriptions.AssertEqual(
  134. Subscribe(200, 630)
  135. );
  136. }
  137. [TestMethod]
  138. public void Take_Complete_Before()
  139. {
  140. var scheduler = new TestScheduler();
  141. var xs = scheduler.CreateHotObservable(
  142. OnNext(70, 6),
  143. OnNext(150, 4),
  144. OnNext(210, 9),
  145. OnNext(230, 13),
  146. OnNext(270, 7),
  147. OnNext(280, 1),
  148. OnNext(300, -1),
  149. OnNext(310, 3),
  150. OnNext(340, 8),
  151. OnNext(370, 11),
  152. OnNext(410, 15),
  153. OnNext(415, 16),
  154. OnNext(460, 72),
  155. OnNext(510, 76),
  156. OnNext(560, 32),
  157. OnNext(570, -100),
  158. OnNext(580, -3),
  159. OnNext(590, 5),
  160. OnNext(630, 10),
  161. OnCompleted<int>(690)
  162. );
  163. var res = scheduler.Start(() =>
  164. xs.Take(10)
  165. );
  166. res.Messages.AssertEqual(
  167. OnNext(210, 9),
  168. OnNext(230, 13),
  169. OnNext(270, 7),
  170. OnNext(280, 1),
  171. OnNext(300, -1),
  172. OnNext(310, 3),
  173. OnNext(340, 8),
  174. OnNext(370, 11),
  175. OnNext(410, 15),
  176. OnNext(415, 16),
  177. OnCompleted<int>(415)
  178. );
  179. xs.Subscriptions.AssertEqual(
  180. Subscribe(200, 415)
  181. );
  182. }
  183. [TestMethod]
  184. public void Take_Error_After()
  185. {
  186. var scheduler = new TestScheduler();
  187. var ex = new Exception();
  188. var xs = scheduler.CreateHotObservable(
  189. OnNext(70, 6),
  190. OnNext(150, 4),
  191. OnNext(210, 9),
  192. OnNext(230, 13),
  193. OnNext(270, 7),
  194. OnNext(280, 1),
  195. OnNext(300, -1),
  196. OnNext(310, 3),
  197. OnNext(340, 8),
  198. OnNext(370, 11),
  199. OnNext(410, 15),
  200. OnNext(415, 16),
  201. OnNext(460, 72),
  202. OnNext(510, 76),
  203. OnNext(560, 32),
  204. OnNext(570, -100),
  205. OnNext(580, -3),
  206. OnNext(590, 5),
  207. OnNext(630, 10),
  208. OnError<int>(690, ex)
  209. );
  210. var res = scheduler.Start(() =>
  211. xs.Take(20)
  212. );
  213. res.Messages.AssertEqual(
  214. OnNext(210, 9),
  215. OnNext(230, 13),
  216. OnNext(270, 7),
  217. OnNext(280, 1),
  218. OnNext(300, -1),
  219. OnNext(310, 3),
  220. OnNext(340, 8),
  221. OnNext(370, 11),
  222. OnNext(410, 15),
  223. OnNext(415, 16),
  224. OnNext(460, 72),
  225. OnNext(510, 76),
  226. OnNext(560, 32),
  227. OnNext(570, -100),
  228. OnNext(580, -3),
  229. OnNext(590, 5),
  230. OnNext(630, 10),
  231. OnError<int>(690, ex)
  232. );
  233. xs.Subscriptions.AssertEqual(
  234. Subscribe(200, 690)
  235. );
  236. }
  237. [TestMethod]
  238. public void Take_Error_Same()
  239. {
  240. var scheduler = new TestScheduler();
  241. var xs = scheduler.CreateHotObservable(
  242. OnNext(70, 6),
  243. OnNext(150, 4),
  244. OnNext(210, 9),
  245. OnNext(230, 13),
  246. OnNext(270, 7),
  247. OnNext(280, 1),
  248. OnNext(300, -1),
  249. OnNext(310, 3),
  250. OnNext(340, 8),
  251. OnNext(370, 11),
  252. OnNext(410, 15),
  253. OnNext(415, 16),
  254. OnNext(460, 72),
  255. OnNext(510, 76),
  256. OnNext(560, 32),
  257. OnNext(570, -100),
  258. OnNext(580, -3),
  259. OnNext(590, 5),
  260. OnNext(630, 10),
  261. OnError<int>(690, new Exception())
  262. );
  263. var res = scheduler.Start(() =>
  264. xs.Take(17)
  265. );
  266. res.Messages.AssertEqual(
  267. OnNext(210, 9),
  268. OnNext(230, 13),
  269. OnNext(270, 7),
  270. OnNext(280, 1),
  271. OnNext(300, -1),
  272. OnNext(310, 3),
  273. OnNext(340, 8),
  274. OnNext(370, 11),
  275. OnNext(410, 15),
  276. OnNext(415, 16),
  277. OnNext(460, 72),
  278. OnNext(510, 76),
  279. OnNext(560, 32),
  280. OnNext(570, -100),
  281. OnNext(580, -3),
  282. OnNext(590, 5),
  283. OnNext(630, 10),
  284. OnCompleted<int>(630)
  285. );
  286. xs.Subscriptions.AssertEqual(
  287. Subscribe(200, 630)
  288. );
  289. }
  290. [TestMethod]
  291. public void Take_Error_Before()
  292. {
  293. var scheduler = new TestScheduler();
  294. var xs = scheduler.CreateHotObservable(
  295. OnNext(70, 6),
  296. OnNext(150, 4),
  297. OnNext(210, 9),
  298. OnNext(230, 13),
  299. OnNext(270, 7),
  300. OnNext(280, 1),
  301. OnNext(300, -1),
  302. OnNext(310, 3),
  303. OnNext(340, 8),
  304. OnNext(370, 11),
  305. OnNext(410, 15),
  306. OnNext(415, 16),
  307. OnNext(460, 72),
  308. OnNext(510, 76),
  309. OnNext(560, 32),
  310. OnNext(570, -100),
  311. OnNext(580, -3),
  312. OnNext(590, 5),
  313. OnNext(630, 10),
  314. OnError<int>(690, new Exception())
  315. );
  316. var res = scheduler.Start(() =>
  317. xs.Take(3)
  318. );
  319. res.Messages.AssertEqual(
  320. OnNext(210, 9),
  321. OnNext(230, 13),
  322. OnNext(270, 7),
  323. OnCompleted<int>(270)
  324. );
  325. xs.Subscriptions.AssertEqual(
  326. Subscribe(200, 270)
  327. );
  328. }
  329. [TestMethod]
  330. public void Take_Dispose_Before()
  331. {
  332. var scheduler = new TestScheduler();
  333. var xs = scheduler.CreateHotObservable(
  334. OnNext(70, 6),
  335. OnNext(150, 4),
  336. OnNext(210, 9),
  337. OnNext(230, 13),
  338. OnNext(270, 7),
  339. OnNext(280, 1),
  340. OnNext(300, -1),
  341. OnNext(310, 3),
  342. OnNext(340, 8),
  343. OnNext(370, 11),
  344. OnNext(410, 15),
  345. OnNext(415, 16),
  346. OnNext(460, 72),
  347. OnNext(510, 76),
  348. OnNext(560, 32),
  349. OnNext(570, -100),
  350. OnNext(580, -3),
  351. OnNext(590, 5),
  352. OnNext(630, 10)
  353. );
  354. var res = scheduler.Start(() =>
  355. xs.Take(3),
  356. 250
  357. );
  358. res.Messages.AssertEqual(
  359. OnNext(210, 9),
  360. OnNext(230, 13)
  361. );
  362. xs.Subscriptions.AssertEqual(
  363. Subscribe(200, 250)
  364. );
  365. }
  366. [TestMethod]
  367. public void Take_Dispose_After()
  368. {
  369. var scheduler = new TestScheduler();
  370. var xs = scheduler.CreateHotObservable(
  371. OnNext(70, 6),
  372. OnNext(150, 4),
  373. OnNext(210, 9),
  374. OnNext(230, 13),
  375. OnNext(270, 7),
  376. OnNext(280, 1),
  377. OnNext(300, -1),
  378. OnNext(310, 3),
  379. OnNext(340, 8),
  380. OnNext(370, 11),
  381. OnNext(410, 15),
  382. OnNext(415, 16),
  383. OnNext(460, 72),
  384. OnNext(510, 76),
  385. OnNext(560, 32),
  386. OnNext(570, -100),
  387. OnNext(580, -3),
  388. OnNext(590, 5),
  389. OnNext(630, 10)
  390. );
  391. var res = scheduler.Start(() =>
  392. xs.Take(3),
  393. 400
  394. );
  395. res.Messages.AssertEqual(
  396. OnNext(210, 9),
  397. OnNext(230, 13),
  398. OnNext(270, 7),
  399. OnCompleted<int>(270)
  400. );
  401. xs.Subscriptions.AssertEqual(
  402. Subscribe(200, 270)
  403. );
  404. }
  405. [TestMethod]
  406. public void Take_0_Scheduler()
  407. {
  408. var scheduler = new TestScheduler();
  409. var xs = scheduler.CreateHotObservable(
  410. OnNext(70, 6),
  411. OnNext(150, 4),
  412. OnNext(210, 9),
  413. OnNext(230, 13)
  414. );
  415. var res = scheduler.Start(() =>
  416. xs.Take(0, scheduler)
  417. );
  418. res.Messages.AssertEqual(
  419. OnCompleted<int>(200 + 1) // Extra scheduling call by Empty
  420. );
  421. xs.Subscriptions.AssertEqual(
  422. );
  423. }
  424. [TestMethod]
  425. public void Take_0_DefaultScheduler()
  426. {
  427. var scheduler = new TestScheduler();
  428. var xs = scheduler.CreateHotObservable(
  429. OnNext(70, 6),
  430. OnNext(150, 4),
  431. OnNext(210, 9),
  432. OnNext(230, 13)
  433. );
  434. var res = scheduler.Start(() =>
  435. xs.Take(0)
  436. );
  437. res.Messages.AssertEqual(
  438. OnCompleted<int>(200) // Immediate
  439. );
  440. xs.Subscriptions.AssertEqual(
  441. );
  442. }
  443. [TestMethod]
  444. public void Take_Non0_Scheduler()
  445. {
  446. var scheduler = new TestScheduler();
  447. var xs = scheduler.CreateHotObservable(
  448. OnNext(70, 6),
  449. OnNext(150, 4),
  450. OnNext(210, 9),
  451. OnNext(230, 13)
  452. );
  453. var res = scheduler.Start(() =>
  454. xs.Take(1, scheduler)
  455. );
  456. res.Messages.AssertEqual(
  457. OnNext(210, 9),
  458. OnCompleted<int>(210)
  459. );
  460. xs.Subscriptions.AssertEqual(
  461. Subscribe(200, 210)
  462. );
  463. }
  464. [TestMethod]
  465. public void Take_Take1()
  466. {
  467. var scheduler = new TestScheduler();
  468. var xs = scheduler.CreateHotObservable(
  469. OnNext(70, 6),
  470. OnNext(150, 4),
  471. OnNext(210, 9),
  472. OnNext(230, 13),
  473. OnNext(270, 7),
  474. OnNext(280, 1),
  475. OnNext(300, -1),
  476. OnNext(310, 3),
  477. OnNext(340, 8),
  478. OnNext(370, 11),
  479. OnCompleted<int>(400)
  480. );
  481. var res = scheduler.Start(() =>
  482. xs.Take(3).Take(4)
  483. );
  484. res.Messages.AssertEqual(
  485. OnNext(210, 9),
  486. OnNext(230, 13),
  487. OnNext(270, 7),
  488. OnCompleted<int>(270)
  489. );
  490. xs.Subscriptions.AssertEqual(
  491. Subscribe(200, 270)
  492. );
  493. }
  494. [TestMethod]
  495. public void Take_Take2()
  496. {
  497. var scheduler = new TestScheduler();
  498. var xs = scheduler.CreateHotObservable(
  499. OnNext(70, 6),
  500. OnNext(150, 4),
  501. OnNext(210, 9),
  502. OnNext(230, 13),
  503. OnNext(270, 7),
  504. OnNext(280, 1),
  505. OnNext(300, -1),
  506. OnNext(310, 3),
  507. OnNext(340, 8),
  508. OnNext(370, 11),
  509. OnCompleted<int>(400)
  510. );
  511. var res = scheduler.Start(() =>
  512. xs.Take(4).Take(3)
  513. );
  514. res.Messages.AssertEqual(
  515. OnNext(210, 9),
  516. OnNext(230, 13),
  517. OnNext(270, 7),
  518. OnCompleted<int>(270)
  519. );
  520. xs.Subscriptions.AssertEqual(
  521. Subscribe(200, 270)
  522. );
  523. }
  524. [TestMethod]
  525. public void Take_DecrementsCountFirst()
  526. {
  527. var k = new BehaviorSubject<bool>(true);
  528. k.Take(1).Subscribe(b => k.OnNext(!b));
  529. //
  530. // No assert needed; test will stack overflow for failure.
  531. //
  532. }
  533. #endregion
  534. #region + Timed +
  535. [TestMethod]
  536. public void Take_Timed_ArgumentChecking()
  537. {
  538. var xs = Observable.Return(42);
  539. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Take(default(IObservable<int>), TimeSpan.FromSeconds(1)));
  540. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.Take(xs, TimeSpan.FromSeconds(-1)));
  541. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Take(default(IObservable<int>), TimeSpan.FromSeconds(1), Scheduler.Default));
  542. ReactiveAssert.Throws<ArgumentNullException>(() => Observable.Take(xs, TimeSpan.FromSeconds(1), default));
  543. ReactiveAssert.Throws<ArgumentOutOfRangeException>(() => Observable.Take(xs, TimeSpan.FromSeconds(-1), Scheduler.Default));
  544. }
  545. [TestMethod]
  546. public void Take_Zero()
  547. {
  548. var scheduler = new TestScheduler();
  549. var xs = scheduler.CreateHotObservable(
  550. OnNext(210, 1),
  551. OnNext(220, 2),
  552. OnCompleted<int>(230)
  553. );
  554. var res = scheduler.Start(() =>
  555. xs.Take(TimeSpan.Zero, scheduler)
  556. );
  557. res.Messages.AssertEqual(
  558. OnCompleted<int>(201)
  559. );
  560. xs.Subscriptions.AssertEqual(
  561. Subscribe(200, 201)
  562. );
  563. }
  564. [TestMethod]
  565. public void Take_Some()
  566. {
  567. var scheduler = new TestScheduler();
  568. var xs = scheduler.CreateHotObservable(
  569. OnNext(210, 1),
  570. OnNext(220, 2),
  571. OnNext(230, 3),
  572. OnCompleted<int>(240)
  573. );
  574. var res = scheduler.Start(() =>
  575. xs.Take(TimeSpan.FromTicks(25), scheduler)
  576. );
  577. res.Messages.AssertEqual(
  578. OnNext(210, 1),
  579. OnNext(220, 2),
  580. OnCompleted<int>(225)
  581. );
  582. xs.Subscriptions.AssertEqual(
  583. Subscribe(200, 225)
  584. );
  585. }
  586. [TestMethod]
  587. public void Take_Late()
  588. {
  589. var scheduler = new TestScheduler();
  590. var xs = scheduler.CreateHotObservable(
  591. OnNext(210, 1),
  592. OnNext(220, 2),
  593. OnCompleted<int>(230)
  594. );
  595. var res = scheduler.Start(() =>
  596. xs.Take(TimeSpan.FromTicks(50), scheduler)
  597. );
  598. res.Messages.AssertEqual(
  599. OnNext(210, 1),
  600. OnNext(220, 2),
  601. OnCompleted<int>(230)
  602. );
  603. xs.Subscriptions.AssertEqual(
  604. Subscribe(200, 230)
  605. );
  606. }
  607. [TestMethod]
  608. public void Take_Error()
  609. {
  610. var scheduler = new TestScheduler();
  611. var ex = new Exception();
  612. var xs = scheduler.CreateHotObservable(
  613. OnError<int>(210, ex)
  614. );
  615. var res = scheduler.Start(() =>
  616. xs.Take(TimeSpan.FromTicks(50), scheduler)
  617. );
  618. res.Messages.AssertEqual(
  619. OnError<int>(210, ex)
  620. );
  621. xs.Subscriptions.AssertEqual(
  622. Subscribe(200, 210)
  623. );
  624. }
  625. [TestMethod]
  626. public void Take_Never()
  627. {
  628. var scheduler = new TestScheduler();
  629. var ex = new Exception();
  630. var xs = scheduler.CreateHotObservable<int>(
  631. );
  632. var res = scheduler.Start(() =>
  633. xs.Take(TimeSpan.FromTicks(50), scheduler)
  634. );
  635. res.Messages.AssertEqual(
  636. OnCompleted<int>(250)
  637. );
  638. xs.Subscriptions.AssertEqual(
  639. Subscribe(200, 250)
  640. );
  641. }
  642. [TestMethod]
  643. public void Take_Twice1()
  644. {
  645. var scheduler = new TestScheduler();
  646. var ex = new Exception();
  647. var xs = scheduler.CreateHotObservable(
  648. OnNext(210, 1),
  649. OnNext(220, 2),
  650. OnNext(230, 3),
  651. OnNext(240, 4),
  652. OnNext(250, 5),
  653. OnNext(260, 6),
  654. OnCompleted<int>(270)
  655. );
  656. var res = scheduler.Start(() =>
  657. xs.Take(TimeSpan.FromTicks(55), scheduler).Take(TimeSpan.FromTicks(35), scheduler)
  658. );
  659. res.Messages.AssertEqual(
  660. OnNext(210, 1),
  661. OnNext(220, 2),
  662. OnNext(230, 3),
  663. OnCompleted<int>(235)
  664. );
  665. xs.Subscriptions.AssertEqual(
  666. Subscribe(200, 235)
  667. );
  668. }
  669. [TestMethod]
  670. public void Take_Twice2()
  671. {
  672. var scheduler = new TestScheduler();
  673. var ex = new Exception();
  674. var xs = scheduler.CreateHotObservable(
  675. OnNext(210, 1),
  676. OnNext(220, 2),
  677. OnNext(230, 3),
  678. OnNext(240, 4),
  679. OnNext(250, 5),
  680. OnNext(260, 6),
  681. OnCompleted<int>(270)
  682. );
  683. var res = scheduler.Start(() =>
  684. xs.Take(TimeSpan.FromTicks(35), scheduler).Take(TimeSpan.FromTicks(55), scheduler)
  685. );
  686. res.Messages.AssertEqual(
  687. OnNext(210, 1),
  688. OnNext(220, 2),
  689. OnNext(230, 3),
  690. OnCompleted<int>(235)
  691. );
  692. xs.Subscriptions.AssertEqual(
  693. Subscribe(200, 235)
  694. );
  695. }
  696. [TestMethod]
  697. public void Take_Default()
  698. {
  699. var xs = Observable.Range(0, 10, Scheduler.Default);
  700. var res = xs.Take(TimeSpan.FromSeconds(60));
  701. var e = new ManualResetEvent(false);
  702. var lst = new List<int>();
  703. res.Subscribe(
  704. lst.Add,
  705. () => e.Set()
  706. );
  707. e.WaitOne();
  708. Assert.True(lst.SequenceEqual(Enumerable.Range(0, 10)));
  709. }
  710. #endregion
  711. }
  712. }