Skip to content

Commit 636e2d0

Browse files
authored
Add TrySingle overloads for (#643)
1 parent f5001c2 commit 636e2d0

File tree

14 files changed

+151
-4
lines changed

14 files changed

+151
-4
lines changed

Source/SuperLinq.Async/PublicAPI/net6.0/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,5 @@ static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collectio
104104
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
105105
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
106106
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
107+
static SuperLinq.Async.AsyncSuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask<TSource?>
107108
SuperLinq.Async.IAsyncBuffer<T>.ConfigureAwait(bool continueOnCapturedContext) -> System.Runtime.CompilerServices.ConfiguredAsyncDisposable

Source/SuperLinq.Async/PublicAPI/net7.0/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,5 @@ static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collectio
104104
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
105105
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
106106
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
107+
static SuperLinq.Async.AsyncSuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask<TSource?>
107108
SuperLinq.Async.IAsyncBuffer<T>.ConfigureAwait(bool continueOnCapturedContext) -> System.Runtime.CompilerServices.ConfiguredAsyncDisposable

Source/SuperLinq.Async/PublicAPI/net8.0/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,5 @@ static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collectio
104104
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
105105
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
106106
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
107+
static SuperLinq.Async.AsyncSuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask<TSource?>
107108
SuperLinq.Async.IAsyncBuffer<T>.ConfigureAwait(bool continueOnCapturedContext) -> System.Runtime.CompilerServices.ConfiguredAsyncDisposable

Source/SuperLinq.Async/PublicAPI/net9.0/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,5 @@ static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collectio
104104
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
105105
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
106106
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
107+
static SuperLinq.Async.AsyncSuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask<TSource?>
107108
SuperLinq.Async.IAsyncBuffer<T>.ConfigureAwait(bool continueOnCapturedContext) -> System.Runtime.CompilerServices.ConfiguredAsyncDisposable

Source/SuperLinq.Async/PublicAPI/netcoreapp3.1/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,5 @@ static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collectio
104104
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
105105
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
106106
static SuperLinq.Async.AsyncSuperEnumerable.Split<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IAsyncEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
107+
static SuperLinq.Async.AsyncSuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IAsyncEnumerable<TSource>! source, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask<TSource?>
107108
SuperLinq.Async.IAsyncBuffer<T>.ConfigureAwait(bool continueOnCapturedContext) -> System.Runtime.CompilerServices.ConfiguredAsyncDisposable

Source/SuperLinq.Async/TrySingle.cs

+40-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace SuperLinq.Async;
1+
namespace SuperLinq.Async;
22

33
public static partial class AsyncSuperEnumerable
44
{
@@ -107,4 +107,43 @@ static async ValueTask<TResult> Core(
107107
: resultSelector(many, default);
108108
}
109109
}
110+
111+
/// <summary>
112+
/// Returns the single element in the sequence if it contains exactly one element.
113+
/// Similar to <see cref="AsyncEnumerable.SingleOrDefaultAsync{TSource}(IAsyncEnumerable{TSource}, CancellationToken)"/>.
114+
/// </summary>
115+
/// <typeparam name="TSource">
116+
/// The type of the elements of <paramref name="source"/>.
117+
/// </typeparam>
118+
/// <param name="source">
119+
/// The source sequence.
120+
/// </param>
121+
/// <param name="cancellationToken">
122+
/// The optional cancellation token to be used for cancelling the sequence at any time.
123+
/// </param>
124+
/// <returns>
125+
/// The single element or the default value of <typeparamref name="TSource"/>.
126+
/// </returns>
127+
public static ValueTask<TSource?> TrySingle<TSource>(
128+
this IAsyncEnumerable<TSource> source,
129+
CancellationToken cancellationToken = default)
130+
{
131+
ArgumentNullException.ThrowIfNull(source);
132+
133+
return Core(source, cancellationToken);
134+
135+
static async ValueTask<TSource?> Core(
136+
IAsyncEnumerable<TSource> source,
137+
CancellationToken cancellationToken)
138+
{
139+
await using var e = source.GetConfiguredAsyncEnumerator(cancellationToken);
140+
if (!await e.MoveNextAsync())
141+
return default;
142+
143+
var current = e.Current;
144+
return !await e.MoveNextAsync()
145+
? current
146+
: default;
147+
}
148+
}
110149
}

Source/SuperLinq/PublicAPI/net6.0/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.
137137
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
138138
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
139139
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
140+
static SuperLinq.SuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source) -> TSource?
140141
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
141142
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
142143
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!

Source/SuperLinq/PublicAPI/net7.0/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.
137137
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
138138
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
139139
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
140+
static SuperLinq.SuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source) -> TSource?
140141
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
141142
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
142143
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!

Source/SuperLinq/PublicAPI/net8.0/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.
137137
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
138138
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
139139
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
140+
static SuperLinq.SuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source) -> TSource?
140141
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
141142
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
142143
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!

Source/SuperLinq/PublicAPI/net9.0/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.
137137
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
138138
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
139139
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
140+
static SuperLinq.SuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source) -> TSource?
140141
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
141142
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
142143
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!

Source/SuperLinq/PublicAPI/netcoreapp3.1/PublicAPI.Unshipped.txt

+1
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.
137137
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
138138
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
139139
static SuperLinq.SuperEnumerable.Split<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource separator, System.Collections.Generic.IEqualityComparer<TSource>? comparer, int count) -> System.Collections.Generic.IEnumerable<System.Collections.Generic.IReadOnlyList<TSource>!>!
140+
static SuperLinq.SuperEnumerable.TrySingle<TSource>(this System.Collections.Generic.IEnumerable<TSource>! source) -> TSource?
140141
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
141142
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, int size, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!
142143
static SuperLinq.SuperEnumerable.Window<TSource, TResult>(this System.Collections.Generic.IEnumerable<TSource>! source, TSource[]! array, SuperLinq.SuperEnumerable.ReadOnlySpanFunc<TSource, TResult>! selector) -> System.Collections.Generic.IEnumerable<TResult>!

Source/SuperLinq/TrySingle.cs

+39-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace SuperLinq;
1+
namespace SuperLinq;
22

33
public static partial class SuperEnumerable
44
{
@@ -112,4 +112,42 @@ public static TResult TrySingle<T, TCardinality, TResult>(
112112
: resultSelector(many, default);
113113
}
114114
}
115+
116+
/// <summary>
117+
/// Returns the single element in the sequence if it contains exactly one element.
118+
/// Similar to <see cref="Enumerable.SingleOrDefault{TSource}(IEnumerable{TSource})"/>.
119+
/// </summary>
120+
/// <typeparam name="TSource">
121+
/// The type of the elements of <paramref name="source"/>.
122+
/// </typeparam>
123+
/// <param name="source">
124+
/// The source sequence.
125+
/// </param>
126+
/// <returns>
127+
/// The single element or the default value of <typeparamref name="TSource"/>.
128+
/// </returns>
129+
public static TSource? TrySingle<TSource>(this IEnumerable<TSource> source)
130+
{
131+
ArgumentNullException.ThrowIfNull(source);
132+
133+
if (source.TryGetCollectionCount() is int n)
134+
{
135+
return n switch
136+
{
137+
1 => source.First(),
138+
0 or _ => default
139+
};
140+
}
141+
else
142+
{
143+
using var e = source.GetEnumerator();
144+
if (!e.MoveNext())
145+
return default;
146+
147+
var current = e.Current;
148+
return !e.MoveNext()
149+
? current
150+
: default;
151+
}
152+
}
115153
}

Tests/SuperLinq.Async.Test/TrySingleTest.cs

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace Test.Async;
1+
namespace Test.Async;
22

33
public class TrySingleTest
44
{
@@ -61,4 +61,15 @@ public async Task TrySingleEnumeratesOnceOnlyAndDisposes(int numberOfElements, s
6161
var (cardinality, _) = await seq.TrySingle("zero", "one", "many");
6262
Assert.Equal(expectedCardinality, cardinality);
6363
}
64+
65+
[Theory]
66+
[InlineData(0, 0)]
67+
[InlineData(1, 1)]
68+
[InlineData(2, 0)]
69+
public async Task TrySingleShouldReturnDefaultOrSingleValue(int numberOfElements, int expectedResult)
70+
{
71+
await using var seq = AsyncEnumerable.Range(1, numberOfElements).AsTestingSequence();
72+
var result = await seq.TrySingle();
73+
Assert.Equal(expectedResult, result);
74+
}
6475
}

0 commit comments

Comments
 (0)