Concat.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. using Xunit;
  9. namespace Tests
  10. {
  11. public class Concat : AsyncEnumerableExTests
  12. {
  13. [Fact]
  14. public void Concat_Null()
  15. {
  16. Assert.Throws<ArgumentNullException>(() => AsyncEnumerableEx.Concat<int>(default(IAsyncEnumerable<int>[])));
  17. Assert.Throws<ArgumentNullException>(() => AsyncEnumerableEx.Concat<int>(default(IEnumerable<IAsyncEnumerable<int>>)));
  18. }
  19. [Fact]
  20. public async Task Concat4Async()
  21. {
  22. var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
  23. var ys = new[] { 4, 5 }.ToAsyncEnumerable();
  24. var zs = new[] { 6, 7, 8 }.ToAsyncEnumerable();
  25. var res = AsyncEnumerableEx.Concat(xs, ys, zs);
  26. var e = res.GetAsyncEnumerator();
  27. await HasNextAsync(e, 1);
  28. await HasNextAsync(e, 2);
  29. await HasNextAsync(e, 3);
  30. await HasNextAsync(e, 4);
  31. await HasNextAsync(e, 5);
  32. await HasNextAsync(e, 6);
  33. await HasNextAsync(e, 7);
  34. await HasNextAsync(e, 8);
  35. await NoNextAsync(e);
  36. }
  37. [Fact]
  38. public async Task Concat5Async()
  39. {
  40. var ex = new Exception("Bang");
  41. var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
  42. var ys = new[] { 4, 5 }.ToAsyncEnumerable();
  43. var zs = Throw<int>(ex);
  44. var res = AsyncEnumerableEx.Concat(xs, ys, zs);
  45. var e = res.GetAsyncEnumerator();
  46. await HasNextAsync(e, 1);
  47. await HasNextAsync(e, 2);
  48. await HasNextAsync(e, 3);
  49. await HasNextAsync(e, 4);
  50. await HasNextAsync(e, 5);
  51. AssertThrows(() => e.MoveNextAsync().Wait(WaitTimeoutMs), SingleInnerExceptionMatches(ex));
  52. }
  53. [Fact]
  54. public async Task Concat6Async()
  55. {
  56. var res = AsyncEnumerableEx.Concat(ConcatXss());
  57. var e = res.GetAsyncEnumerator();
  58. await HasNextAsync(e, 1);
  59. await HasNextAsync(e, 2);
  60. await HasNextAsync(e, 3);
  61. await HasNextAsync(e, 4);
  62. await HasNextAsync(e, 5);
  63. AssertThrows(() => e.MoveNextAsync().Wait(WaitTimeoutMs), (Exception ex_) => ((AggregateException)ex_).Flatten().InnerExceptions.Single().Message == "Bang!");
  64. }
  65. [Fact]
  66. public async Task Concat9()
  67. {
  68. var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
  69. var ys = new[] { 4, 5 }.ToAsyncEnumerable();
  70. var zs = new[] { 6, 7, 8 }.ToAsyncEnumerable();
  71. var res = AsyncEnumerableEx.Concat(xs, ys, zs);
  72. await SequenceIdentity(res);
  73. }
  74. private static IEnumerable<IAsyncEnumerable<int>> ConcatXss()
  75. {
  76. yield return new[] { 1, 2, 3 }.ToAsyncEnumerable();
  77. yield return new[] { 4, 5 }.ToAsyncEnumerable();
  78. throw new Exception("Bang!");
  79. }
  80. }
  81. }