DistinctUntilChanged.cs 3.4 KB

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