// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT License. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Xunit; namespace Tests { public class AverageAsync : AsyncEnumerableTests { [Fact] public async Task AverageAsync_Int32_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Int32_Empty() { var ys = new int[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync().AsTask()); } [Fact] public async Task AverageAsync_Int32_Many() { var xs = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Int32_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable), x => x).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(AsyncEnumerable.Empty(), default(Func)).AsTask()); } [Fact] public async Task AverageAsync_Selector_Int32_Empty() { var ys = new int[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync(x => x).AsTask()); } [Fact] public async Task AverageAsync_Selector_Int32_Many() { var xs = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Int32_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Int32_Empty() { var ys = new int[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitAsync(x => new ValueTask(x)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Int32_Many() { var xs = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int32_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int32_Empty() { var ys = new int[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int32_Many() { var xs = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Int32_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Int32_Nullable_Empty() { var ys = new int?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Int32_Nullable_Many() { var xs = new int?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Int32_Nullable_Empty() { var ys = new int?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAsync_Selector_Int32_Nullable_Many() { var xs = new int?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Int32_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Int32_Nullable_Empty() { var ys = new int?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitAsync(x => new ValueTask(x))); } [Fact] public async Task AverageAwaitAsync_Selector_Int32_Nullable_Many() { var xs = new int?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int32_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int32_Nullable_Empty() { var ys = new int?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int32_Nullable_Many() { var xs = new int?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Int64_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Int64_Empty() { var ys = new long[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync().AsTask()); } [Fact] public async Task AverageAsync_Int64_Many() { var xs = new long[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Int64_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable), x => x).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(AsyncEnumerable.Empty(), default(Func)).AsTask()); } [Fact] public async Task AverageAsync_Selector_Int64_Empty() { var ys = new long[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync(x => x).AsTask()); } [Fact] public async Task AverageAsync_Selector_Int64_Many() { var xs = new long[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Int64_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Int64_Empty() { var ys = new long[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitAsync(x => new ValueTask(x)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Int64_Many() { var xs = new long[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int64_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int64_Empty() { var ys = new long[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int64_Many() { var xs = new long[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Int64_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Int64_Nullable_Empty() { var ys = new long?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Int64_Nullable_Many() { var xs = new long?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Int64_Nullable_Empty() { var ys = new long?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAsync_Selector_Int64_Nullable_Many() { var xs = new long?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Int64_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Int64_Nullable_Empty() { var ys = new long?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitAsync(x => new ValueTask(x))); } [Fact] public async Task AverageAwaitAsync_Selector_Int64_Nullable_Many() { var xs = new long?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int64_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int64_Nullable_Empty() { var ys = new long?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Int64_Nullable_Many() { var xs = new long?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Single_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Single_Empty() { var ys = new float[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync().AsTask()); } [Fact] public async Task AverageAsync_Single_Many() { var xs = new float[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Single_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable), x => x).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(AsyncEnumerable.Empty(), default(Func)).AsTask()); } [Fact] public async Task AverageAsync_Selector_Single_Empty() { var ys = new float[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync(x => x).AsTask()); } [Fact] public async Task AverageAsync_Selector_Single_Many() { var xs = new float[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Single_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Single_Empty() { var ys = new float[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitAsync(x => new ValueTask(x)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Single_Many() { var xs = new float[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Single_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Single_Empty() { var ys = new float[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Single_Many() { var xs = new float[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Single_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Single_Nullable_Empty() { var ys = new float?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Single_Nullable_Many() { var xs = new float?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Single_Nullable_Empty() { var ys = new float?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAsync_Selector_Single_Nullable_Many() { var xs = new float?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Single_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Single_Nullable_Empty() { var ys = new float?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitAsync(x => new ValueTask(x))); } [Fact] public async Task AverageAwaitAsync_Selector_Single_Nullable_Many() { var xs = new float?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Single_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Single_Nullable_Empty() { var ys = new float?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Single_Nullable_Many() { var xs = new float?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Double_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Double_Empty() { var ys = new double[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync().AsTask()); } [Fact] public async Task AverageAsync_Double_Many() { var xs = new double[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Double_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable), x => x).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(AsyncEnumerable.Empty(), default(Func)).AsTask()); } [Fact] public async Task AverageAsync_Selector_Double_Empty() { var ys = new double[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync(x => x).AsTask()); } [Fact] public async Task AverageAsync_Selector_Double_Many() { var xs = new double[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Double_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Double_Empty() { var ys = new double[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitAsync(x => new ValueTask(x)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Double_Many() { var xs = new double[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Double_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Double_Empty() { var ys = new double[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Double_Many() { var xs = new double[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Double_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Double_Nullable_Empty() { var ys = new double?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Double_Nullable_Many() { var xs = new double?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Double_Nullable_Empty() { var ys = new double?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAsync_Selector_Double_Nullable_Many() { var xs = new double?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Double_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Double_Nullable_Empty() { var ys = new double?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitAsync(x => new ValueTask(x))); } [Fact] public async Task AverageAwaitAsync_Selector_Double_Nullable_Many() { var xs = new double?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Double_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Double_Nullable_Empty() { var ys = new double?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Double_Nullable_Many() { var xs = new double?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Decimal_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Decimal_Empty() { var ys = new decimal[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync().AsTask()); } [Fact] public async Task AverageAsync_Decimal_Many() { var xs = new decimal[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Decimal_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable), x => x).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(AsyncEnumerable.Empty(), default(Func)).AsTask()); } [Fact] public async Task AverageAsync_Selector_Decimal_Empty() { var ys = new decimal[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAsync(x => x).AsTask()); } [Fact] public async Task AverageAsync_Selector_Decimal_Many() { var xs = new decimal[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Decimal_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Decimal_Empty() { var ys = new decimal[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitAsync(x => new ValueTask(x)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Decimal_Many() { var xs = new decimal[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Decimal_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Decimal_Empty() { var ys = new decimal[0].ToAsyncEnumerable(); await Assert.ThrowsAsync(() => ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Decimal_Many() { var xs = new decimal[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif [Fact] public async Task AverageAsync_Decimal_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAsync(default(IAsyncEnumerable)).AsTask()); } [Fact] public async Task AverageAsync_Decimal_Nullable_Empty() { var ys = new decimal?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Decimal_Nullable_Many() { var xs = new decimal?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync()); } [Fact] public async Task AverageAsync_Selector_Decimal_Nullable_Empty() { var ys = new decimal?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAsync_Selector_Decimal_Nullable_Many() { var xs = new decimal?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAsync(x => x)); } [Fact] public async Task AverageAwaitAsync_Selector_Decimal_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(default(IAsyncEnumerable), x => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitAsync_Selector_Decimal_Nullable_Empty() { var ys = new decimal?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitAsync(x => new ValueTask(x))); } [Fact] public async Task AverageAwaitAsync_Selector_Decimal_Nullable_Many() { var xs = new decimal?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitAsync(x => new ValueTask(x))); } #if !NO_DEEP_CANCELLATION [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Decimal_Nullable_Null() { await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(default(IAsyncEnumerable), (x, ct) => new ValueTask(x)).AsTask()); await Assert.ThrowsAsync(() => AsyncEnumerable.AverageAwaitWithCancellationAsync(AsyncEnumerable.Empty(), default(Func>)).AsTask()); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Decimal_Nullable_Empty() { var ys = new decimal?[0].ToAsyncEnumerable(); Assert.Null(await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } [Fact] public async Task AverageAwaitWithCancellationAsync_Selector_Decimal_Nullable_Many() { var xs = new decimal?[] { 2, 3, 5, 7, 11, 13, 17, 19 }; var ys = xs.ToAsyncEnumerable(); Assert.Equal(xs.Average(), await ys.AverageAwaitWithCancellationAsync((x, ct) => new ValueTask(x), CancellationToken.None)); } #endif } }