DistinctUntilChanged.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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 DistinctUntilChanged : AsyncEnumerableExTests
  12. {
  13. [Fact]
  14. public void DistinctUntilChanged_Null()
  15. {
  16. Assert.Throws<ArgumentNullException>(() => AsyncEnumerableEx.DistinctUntilChanged(default(IAsyncEnumerable<int>)));
  17. Assert.Throws<ArgumentNullException>(() => AsyncEnumerableEx.DistinctUntilChanged(default, EqualityComparer<int>.Default));
  18. Assert.Throws<ArgumentNullException>(() => AsyncEnumerableEx.DistinctUntilChanged(default(IAsyncEnumerable<int>), x => x));
  19. Assert.Throws<ArgumentNullException>(() => AsyncEnumerableEx.DistinctUntilChanged(Return42, default(Func<int, int>)));
  20. Assert.Throws<ArgumentNullException>(() => AsyncEnumerableEx.DistinctUntilChanged(default(IAsyncEnumerable<int>), x => x, EqualityComparer<int>.Default));
  21. Assert.Throws<ArgumentNullException>(() => AsyncEnumerableEx.DistinctUntilChanged(Return42, default(Func<int, int>), EqualityComparer<int>.Default));
  22. }
  23. [Fact]
  24. public async Task DistinctUntilChanged1Async()
  25. {
  26. var xs = new[] { 1, 2, 2, 3, 4, 4, 4, 4, 5, 6, 6, 7, 3, 2, 2, 1, 1 }.ToAsyncEnumerable().DistinctUntilChanged();
  27. var e = xs.GetAsyncEnumerator();
  28. await HasNextAsync(e, 1);
  29. await HasNextAsync(e, 2);
  30. await HasNextAsync(e, 3);
  31. await HasNextAsync(e, 4);
  32. await HasNextAsync(e, 5);
  33. await HasNextAsync(e, 6);
  34. await HasNextAsync(e, 7);
  35. await HasNextAsync(e, 3);
  36. await HasNextAsync(e, 2);
  37. await HasNextAsync(e, 1);
  38. await NoNextAsync(e);
  39. }
  40. [Fact]
  41. public async Task DistinctUntilChanged2Async()
  42. {
  43. var xs = new[] { 1, 2, 3, 4, 3, 5, 2 }.ToAsyncEnumerable().DistinctUntilChanged(x => (x + 1) / 2);
  44. var e = xs.GetAsyncEnumerator();
  45. await HasNextAsync(e, 1);
  46. await HasNextAsync(e, 3);
  47. await HasNextAsync(e, 5);
  48. await HasNextAsync(e, 2);
  49. await NoNextAsync(e);
  50. }
  51. [Fact]
  52. public async Task DistinctUntilChanged3Async()
  53. {
  54. var ex = new Exception("Bang!");
  55. var xs = new[] { 1, 2, 3, 4, 3, 5, 2 }.ToAsyncEnumerable().DistinctUntilChanged(x => { if (x == 4) throw ex; return x; });
  56. var e = xs.GetAsyncEnumerator();
  57. await HasNextAsync(e, 1);
  58. await HasNextAsync(e, 2);
  59. await HasNextAsync(e, 3);
  60. await AssertThrowsAsync(e.MoveNextAsync(), ex);
  61. }
  62. [Fact]
  63. public async Task DistinctUntilChanged4()
  64. {
  65. var xs = new[] { 1, 2, 2, 3, 4, 4, 4, 4, 5, 6, 6, 7, 3, 2, 2, 1, 1 }.ToAsyncEnumerable().DistinctUntilChanged();
  66. await SequenceIdentity(xs);
  67. }
  68. [Fact]
  69. public async Task DistinctUntilChanged5()
  70. {
  71. var xs = new[] { 1, 2, 3, 4, 3, 5, 2 }.ToAsyncEnumerable().DistinctUntilChanged(x => (x + 1) / 2);
  72. await SequenceIdentity(xs);
  73. }
  74. }
  75. }