ElementAtOrDefault.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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;
  7. using System.Threading.Tasks;
  8. using Xunit;
  9. namespace Tests
  10. {
  11. public class ElementAtOrDefault : AsyncEnumerableTests
  12. {
  13. [Fact]
  14. public async Task ElementAtOrDefaultAsync_Null()
  15. {
  16. await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ElementAtOrDefaultAsync<int>(default, 0).AsTask());
  17. await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ElementAtOrDefaultAsync<int>(default, 0, CancellationToken.None).AsTask());
  18. }
  19. [Fact]
  20. public async Task ElementAtOrDefaultAsync_Empty_Index0()
  21. {
  22. var res = AsyncEnumerable.Empty<int>().ElementAtOrDefaultAsync(0);
  23. Assert.Equal(0, await res);
  24. }
  25. [Fact]
  26. public async Task ElementAtOrDefaultAsync_Single_Index0()
  27. {
  28. var res = Return42.ElementAtOrDefaultAsync(0);
  29. Assert.Equal(42, await res);
  30. }
  31. [Fact]
  32. public async Task ElementAtOrDefaultAsync_Single_OutOfRange()
  33. {
  34. var res = Return42.ElementAtOrDefaultAsync(1);
  35. Assert.Equal(0, await res);
  36. }
  37. [Fact]
  38. public async Task ElementAtOrDefaultAsync_Single_NegativeIndex()
  39. {
  40. var res = Return42.ElementAtOrDefaultAsync(-1);
  41. Assert.Equal(0, await res);
  42. }
  43. [Fact]
  44. public async Task ElementAtOrDefaultAsync_Many_IList_InRange()
  45. {
  46. var res = new[] { 1, 42, 3 }.ToAsyncEnumerable().ElementAtOrDefaultAsync(1);
  47. Assert.Equal(42, await res);
  48. }
  49. [Fact]
  50. public async Task ElementAtOrDefaultAsync_Many_IList_OutOfRange()
  51. {
  52. var res = new[] { 1, 42, 3 }.ToAsyncEnumerable().ElementAtOrDefaultAsync(7);
  53. Assert.Equal(0, await res);
  54. }
  55. [Fact]
  56. public async Task ElementAtOrDefaultAsync_Many_IPartition_InRange()
  57. {
  58. var res = new[] { -1, 1, 42, 3 }.ToAsyncEnumerable().Skip(1).ElementAtOrDefaultAsync(1);
  59. Assert.Equal(42, await res);
  60. }
  61. [Fact]
  62. public async Task ElementAtOrDefaultAsync_Many_IPartition_OutOfRange()
  63. {
  64. var res = new[] { -1, 1, 42, 3 }.ToAsyncEnumerable().Skip(1).ElementAtOrDefaultAsync(7);
  65. Assert.Equal(0, await res);
  66. }
  67. [Fact]
  68. public async Task ElementAtOrDefaultAsync_Many_InRange()
  69. {
  70. var res = new[] { 1, 42, 3 }.ToAsyncEnumerable().Select(x => x).ElementAtOrDefaultAsync(1);
  71. Assert.Equal(42, await res);
  72. }
  73. [Fact]
  74. public async Task ElementAtOrDefaultAsync_Many_OutOfRange()
  75. {
  76. var res = new[] { 1, 42, 3 }.ToAsyncEnumerable().Select(x => x).ElementAtOrDefaultAsync(7);
  77. Assert.Equal(0, await res);
  78. }
  79. [Fact]
  80. public async Task ElementAtOrDefaultAsync_Throws_Source()
  81. {
  82. var ex = new Exception("Bang!");
  83. var res = Throw<int>(ex).ElementAtOrDefaultAsync(15);
  84. await AssertThrowsAsync(res, ex);
  85. }
  86. }
  87. }