Contains.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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;
  8. using System.Threading.Tasks;
  9. using Xunit;
  10. namespace Tests
  11. {
  12. public class Contains : AsyncEnumerableTests
  13. {
  14. [Fact]
  15. public async Task Contains_Null()
  16. {
  17. await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ContainsAsync(default, 42));
  18. await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ContainsAsync(default, 42, EqualityComparer<int>.Default));
  19. await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ContainsAsync(default, 42, CancellationToken.None));
  20. await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ContainsAsync(default, 42, EqualityComparer<int>.Default, CancellationToken.None));
  21. }
  22. [Fact]
  23. public async Task Contains1Async()
  24. {
  25. var xs = new[] { 1, 2, 3, 4, 5 }.ToAsyncEnumerable();
  26. var ys = xs.ContainsAsync(3);
  27. Assert.True(await ys);
  28. }
  29. [Fact]
  30. public async Task Contains2Async()
  31. {
  32. var xs = new[] { 1, 2, 3, 4, 5 }.ToAsyncEnumerable();
  33. var ys = xs.ContainsAsync(6);
  34. Assert.False(await ys);
  35. }
  36. [Fact]
  37. public async Task Contains3Async()
  38. {
  39. var xs = new[] { 1, 2, 3, 4, 5 }.ToAsyncEnumerable();
  40. var ys = xs.ContainsAsync(-3, new Eq());
  41. Assert.True(await ys);
  42. }
  43. [Fact]
  44. public async Task Contains4Async()
  45. {
  46. var xs = new[] { 1, 2, 3, 4, 5 }.ToAsyncEnumerable();
  47. var ys = xs.ContainsAsync(-6, new Eq());
  48. Assert.False(await ys);
  49. }
  50. private sealed class Eq : IEqualityComparer<int>
  51. {
  52. public bool Equals(int x, int y)
  53. {
  54. return EqualityComparer<int>.Default.Equals(Math.Abs(x), Math.Abs(y));
  55. }
  56. public int GetHashCode(int obj)
  57. {
  58. return EqualityComparer<int>.Default.GetHashCode(Math.Abs(obj));
  59. }
  60. }
  61. }
  62. }