TakeWhile.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using Xunit;
  8. namespace Tests
  9. {
  10. public class TakeWhile : AsyncEnumerableTests
  11. {
  12. [Fact]
  13. public void TakeWhile_Null()
  14. {
  15. AssertThrows<ArgumentNullException>(() => AsyncEnumerable.TakeWhile<int>(null, x => true));
  16. AssertThrows<ArgumentNullException>(() => AsyncEnumerable.TakeWhile<int>(null, (x, i) => true));
  17. AssertThrows<ArgumentNullException>(() => AsyncEnumerable.TakeWhile<int>(AsyncEnumerable.Return(42), default(Func<int, bool>)));
  18. AssertThrows<ArgumentNullException>(() => AsyncEnumerable.TakeWhile<int>(AsyncEnumerable.Return(42), default(Func<int, int, bool>)));
  19. }
  20. [Fact]
  21. public void TakeWhile1()
  22. {
  23. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  24. var ys = xs.TakeWhile(x => x < 3);
  25. var e = ys.GetAsyncEnumerator();
  26. HasNext(e, 1);
  27. HasNext(e, 2);
  28. NoNext(e);
  29. }
  30. [Fact]
  31. public void TakeWhile2()
  32. {
  33. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  34. var ys = xs.TakeWhile(x => false);
  35. var e = ys.GetAsyncEnumerator();
  36. NoNext(e);
  37. }
  38. [Fact]
  39. public void TakeWhile3()
  40. {
  41. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  42. var ys = xs.TakeWhile(x => true);
  43. var e = ys.GetAsyncEnumerator();
  44. HasNext(e, 1);
  45. HasNext(e, 2);
  46. HasNext(e, 3);
  47. HasNext(e, 4);
  48. NoNext(e);
  49. }
  50. [Fact]
  51. public void TakeWhile4()
  52. {
  53. var xs = new[] { 1, 2, 3, 4, 3, 2, 1 }.ToAsyncEnumerable();
  54. var ys = xs.TakeWhile(x => x < 3);
  55. var e = ys.GetAsyncEnumerator();
  56. HasNext(e, 1);
  57. HasNext(e, 2);
  58. NoNext(e);
  59. }
  60. [Fact]
  61. public void TakeWhile5()
  62. {
  63. var ex = new Exception("Bang");
  64. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  65. var ys = xs.TakeWhile(new Func<int, bool>(x => { throw ex; }));
  66. var e = ys.GetAsyncEnumerator();
  67. AssertThrows(() => e.MoveNextAsync().Wait(WaitTimeoutMs), (Exception ex_) => ((AggregateException)ex_).Flatten().InnerExceptions.Single() == ex);
  68. }
  69. [Fact]
  70. public void TakeWhile6()
  71. {
  72. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  73. var ys = xs.TakeWhile((x, i) => i < 2);
  74. var e = ys.GetAsyncEnumerator();
  75. HasNext(e, 1);
  76. HasNext(e, 2);
  77. NoNext(e);
  78. }
  79. [Fact]
  80. public void TakeWhile7()
  81. {
  82. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  83. var ys = xs.TakeWhile((x, i) => false);
  84. var e = ys.GetAsyncEnumerator();
  85. NoNext(e);
  86. }
  87. [Fact]
  88. public void TakeWhile8()
  89. {
  90. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  91. var ys = xs.TakeWhile((x, i) => true);
  92. var e = ys.GetAsyncEnumerator();
  93. HasNext(e, 1);
  94. HasNext(e, 2);
  95. HasNext(e, 3);
  96. HasNext(e, 4);
  97. NoNext(e);
  98. }
  99. [Fact]
  100. public void TakeWhile9()
  101. {
  102. var ex = new Exception("Bang");
  103. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  104. var ys = xs.TakeWhile(new Func<int, int, bool>((x, i) => { throw ex; }));
  105. var e = ys.GetAsyncEnumerator();
  106. AssertThrows(() => e.MoveNextAsync().Wait(WaitTimeoutMs), (Exception ex_) => ((AggregateException)ex_).Flatten().InnerExceptions.Single() == ex);
  107. }
  108. [Fact]
  109. public async Task TakeWhile10()
  110. {
  111. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  112. var ys = xs.TakeWhile(x => x < 3);
  113. await SequenceIdentity(ys);
  114. }
  115. [Fact]
  116. public async Task TakeWhile11()
  117. {
  118. var xs = new[] { 1, 2, 3, 4 }.ToAsyncEnumerable();
  119. var ys = xs.TakeWhile((x, i) => i < 2);
  120. await SequenceIdentity(ys);
  121. }
  122. }
  123. }