mirror of
https://github.com/Cysharp/UniTask.git
synced 2026-05-16 12:00:10 +00:00
Average, MinMax, and others
This commit is contained in:
122
src/UniTask.NetCoreTests/Linq/Aggregate.cs
Normal file
122
src/UniTask.NetCoreTests/Linq/Aggregate.cs
Normal file
@@ -0,0 +1,122 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Cysharp.Threading.Tasks.Linq;
|
||||
using FluentAssertions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
namespace NetCoreTests.Linq
|
||||
{
|
||||
public class Aggregate
|
||||
{
|
||||
[Theory]
|
||||
[InlineData(0, 10)]
|
||||
[InlineData(0, 1)]
|
||||
[InlineData(10, 0)]
|
||||
[InlineData(1, 11)]
|
||||
public async Task Sum(int start, int count)
|
||||
{
|
||||
{
|
||||
var xs = await UniTaskAsyncEnumerable.Range(start, count).SumAsync();
|
||||
var ys = Enumerable.Range(start, count).Sum();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
{
|
||||
var xs = await UniTaskAsyncEnumerable.Range(start, count).SumAsync(x => x * 2);
|
||||
var ys = Enumerable.Range(start, count).Sum(x => x * 2);
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
{
|
||||
var xs = await UniTaskAsyncEnumerable.Range(start, count).SumAwaitAsync(x => UniTask.Run(() => x));
|
||||
var ys = Enumerable.Range(start, count).Sum(x => x);
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
{
|
||||
var xs = await UniTaskAsyncEnumerable.Range(start, count).SumAwaitCancellationAsync((x, _) => UniTask.Run(() => x));
|
||||
var ys = Enumerable.Range(start, count).Sum(x => x);
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
}
|
||||
|
||||
public static IEnumerable<object[]> array1 = new object[][]
|
||||
{
|
||||
new object[]{new int[] { 1, 10, 100 } },
|
||||
new object[]{new int?[] { 1, null, 100 } },
|
||||
new object[]{new float[] { 1, 10, 100 } },
|
||||
new object[]{new float?[] { 1, null, 100 } },
|
||||
new object[]{new double[] { 1, 10, 100 } },
|
||||
new object[]{new double?[] { 1, null, 100 } },
|
||||
new object[]{new decimal[] { 1, 10, 100 } },
|
||||
new object[]{new decimal?[] { 1, null, 100 } },
|
||||
};
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(array1))]
|
||||
public async Task Average<T>(T arr)
|
||||
{
|
||||
switch (arr)
|
||||
{
|
||||
case int[] array:
|
||||
{
|
||||
var xs = await array.ToUniTaskAsyncEnumerable().AverageAsync();
|
||||
var ys = array.Average();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
break;
|
||||
case int?[] array:
|
||||
{
|
||||
var xs = await array.ToUniTaskAsyncEnumerable().AverageAsync();
|
||||
var ys = array.Average();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
break;
|
||||
case float[] array:
|
||||
{
|
||||
var xs = await array.ToUniTaskAsyncEnumerable().AverageAsync();
|
||||
var ys = array.Average();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
break;
|
||||
case float?[] array:
|
||||
{
|
||||
var xs = await array.ToUniTaskAsyncEnumerable().AverageAsync();
|
||||
var ys = array.Average();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
break;
|
||||
case double[] array:
|
||||
{
|
||||
var xs = await array.ToUniTaskAsyncEnumerable().AverageAsync();
|
||||
var ys = array.Average();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
break;
|
||||
case double?[] array:
|
||||
{
|
||||
var xs = await array.ToUniTaskAsyncEnumerable().AverageAsync();
|
||||
var ys = array.Average();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
break;
|
||||
case decimal[] array:
|
||||
{
|
||||
var xs = await array.ToUniTaskAsyncEnumerable().AverageAsync();
|
||||
var ys = array.Average();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
break;
|
||||
case decimal?[] array:
|
||||
{
|
||||
var xs = await array.ToUniTaskAsyncEnumerable().AverageAsync();
|
||||
var ys = array.Average();
|
||||
xs.Should().Be(ys);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
79
src/UniTask.NetCoreTests/Linq/Convert.cs
Normal file
79
src/UniTask.NetCoreTests/Linq/Convert.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Cysharp.Threading.Tasks.Linq;
|
||||
using FluentAssertions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reactive.Concurrency;
|
||||
using System.Reactive.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
namespace NetCoreTests.Linq
|
||||
{
|
||||
public class Convert
|
||||
{
|
||||
[Fact]
|
||||
public async Task ToAsyncEnumerable()
|
||||
{
|
||||
{
|
||||
var xs = await Enumerable.Range(1, 100).ToUniTaskAsyncEnumerable().ToArrayAsync();
|
||||
|
||||
xs.Length.Should().Be(100);
|
||||
}
|
||||
{
|
||||
var xs = await Enumerable.Empty<int>().ToUniTaskAsyncEnumerable().ToArrayAsync();
|
||||
|
||||
xs.Length.Should().Be(0);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ToAsyncEnumerableTask()
|
||||
{
|
||||
var t = Task.FromResult(100);
|
||||
var xs = await t.ToUniTaskAsyncEnumerable().ToArrayAsync();
|
||||
|
||||
xs.Length.Should().Be(1);
|
||||
xs[0].Should().Be(100);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ToAsyncEnumerableUniTask()
|
||||
{
|
||||
var t = UniTask.FromResult(100);
|
||||
var xs = await t.ToUniTaskAsyncEnumerable().ToArrayAsync();
|
||||
|
||||
xs.Length.Should().Be(1);
|
||||
xs[0].Should().Be(100);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ToAsyncEnumerableObservable()
|
||||
{
|
||||
{
|
||||
var xs = await Observable.Range(1, 100).ToUniTaskAsyncEnumerable().ToArrayAsync();
|
||||
var ys = await Observable.Range(1, 100).ToArray();
|
||||
|
||||
xs.Should().BeEquivalentTo(ys);
|
||||
}
|
||||
|
||||
{
|
||||
var xs = await Observable.Range(1, 100, ThreadPoolScheduler.Instance).ToUniTaskAsyncEnumerable().ToArrayAsync();
|
||||
var ys = await Observable.Range(1, 100, ThreadPoolScheduler.Instance).ToArray();
|
||||
|
||||
xs.Should().BeEquivalentTo(ys);
|
||||
}
|
||||
|
||||
{
|
||||
var xs = await Observable.Empty<int>(ThreadPoolScheduler.Instance).ToUniTaskAsyncEnumerable().ToArrayAsync();
|
||||
var ys = await Observable.Empty<int>(ThreadPoolScheduler.Instance).ToArray();
|
||||
|
||||
xs.Should().BeEquivalentTo(ys);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -6,7 +6,7 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
namespace UniTask.NetCoreTests.Linq
|
||||
namespace NetCoreTests.Linq
|
||||
{
|
||||
public class Factory
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user