mirror of https://github.com/Cysharp/UniTask
defaultifempty
parent
93dd82e3d4
commit
3f082f1923
|
@ -73,11 +73,16 @@ namespace Cysharp.Threading.Tasks.Linq
|
|||
cancellationToken.ThrowIfCancellationRequested();
|
||||
completionSource.Reset();
|
||||
|
||||
if (iteratingState == IteratingState.Empty)
|
||||
if (iteratingState == IteratingState.Completed)
|
||||
{
|
||||
return CompletedTasks.False;
|
||||
}
|
||||
|
||||
if (enumerator == null)
|
||||
{
|
||||
enumerator = source.GetAsyncEnumerator(cancellationToken);
|
||||
}
|
||||
|
||||
awaiter = enumerator.MoveNextAsync().GetAwaiter();
|
||||
|
||||
if (awaiter.IsCompleted)
|
||||
|
|
|
@ -112,5 +112,33 @@ namespace NetCoreTests.Linq
|
|||
await Assert.ThrowsAsync<UniTaskTestException>(async () => await zs);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DefaultIfEmpty()
|
||||
{
|
||||
{
|
||||
var xs = await Enumerable.Range(1, 0).ToUniTaskAsyncEnumerable().DefaultIfEmpty(99).ToArrayAsync();
|
||||
var ys = Enumerable.Range(1, 0).DefaultIfEmpty(99).ToArray();
|
||||
xs.Should().BeEquivalentTo(ys);
|
||||
}
|
||||
{
|
||||
var xs = await Enumerable.Range(1, 1).ToUniTaskAsyncEnumerable().DefaultIfEmpty(99).ToArrayAsync();
|
||||
var ys = Enumerable.Range(1, 1).DefaultIfEmpty(99).ToArray();
|
||||
xs.Should().BeEquivalentTo(ys);
|
||||
}
|
||||
{
|
||||
var xs = await Enumerable.Range(1, 10).ToUniTaskAsyncEnumerable().DefaultIfEmpty(99).ToArrayAsync();
|
||||
var ys = Enumerable.Range(1, 10).DefaultIfEmpty(99).ToArray();
|
||||
xs.Should().BeEquivalentTo(ys);
|
||||
}
|
||||
// Throw
|
||||
{
|
||||
foreach (var item in UniTaskTestException.Throws())
|
||||
{
|
||||
var xs = item.DefaultIfEmpty().ToArrayAsync();
|
||||
await Assert.ThrowsAsync<UniTaskTestException>(async () => await xs);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,14 +23,14 @@ namespace NetCoreTests.Linq
|
|||
}
|
||||
|
||||
|
||||
public static IEnumerable<IUniTaskAsyncEnumerable<int>> Throws()
|
||||
public static IEnumerable<IUniTaskAsyncEnumerable<int>> Throws(int count = 3)
|
||||
{
|
||||
yield return ThrowImmediate();
|
||||
yield return ThrowAfter();
|
||||
yield return ThrowInMoveNext();
|
||||
yield return UniTaskAsyncEnumerable.Range(1, 3).Concat(ThrowImmediate());
|
||||
yield return UniTaskAsyncEnumerable.Range(1, 3).Concat(ThrowAfter());
|
||||
yield return UniTaskAsyncEnumerable.Range(1, 3).Concat(ThrowInMoveNext());
|
||||
yield return UniTaskAsyncEnumerable.Range(1, count).Concat(ThrowImmediate());
|
||||
yield return UniTaskAsyncEnumerable.Range(1, count).Concat(ThrowAfter());
|
||||
yield return UniTaskAsyncEnumerable.Range(1, count).Concat(ThrowInMoveNext());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue