Summary

Class:AsyncEnumeration.EmptyAsyncProvider
Assembly:AsyncEnumeration.Abstractions
File(s):/repo-dir/contents/Source/Code/AsyncEnumeration.Abstractions/Empty.cs
Covered lines:47
Uncovered lines:1
Coverable lines:48
Total lines:204
Line coverage:97.9%
Branch coverage:100%
Tag:7d9974899246b95481b7aa9cd3a1462ae2a67c91

Coverage History

Metrics

MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.ctor()101%0%
AggregateAsync(...)101%0%
AggregateAsync(...)101%0%
AggregateAsync(...)101%0%
AggregateAsync(...)101%0%
AllAsync(...)101%0%
AllAsync(...)101%0%
AnyAsync(...)100%0%
AnyAsync(...)101%0%
AnyAsync(...)101%0%
FirstAsync(...)101%0%
FirstOrDefaultAsync(...)101%0%
OfType(...)201%1%
Select(...)101%0%
Select(...)101%0%
SelectMany(...)101%0%
SelectMany(...)101%0%
SelectMany(...)101%0%
SelectMany(...)101%0%
Skip(...)101%0%
Skip(...)101%0%
SkipWhile(...)101%0%
SkipWhile(...)101%0%
Take(...)101%0%
Take(...)101%0%
TakeWhile(...)101%0%
TakeWhile(...)101%0%
Where(...)101%0%
Where(...)101%0%

File(s)

/repo-dir/contents/Source/Code/AsyncEnumeration.Abstractions/Empty.cs

#LineLine coverage
 1/*
 2 * Copyright 2017 Stanislav Muhametsin. All rights Reserved.
 3 *
 4 * Licensed  under the  Apache License,  Version 2.0  (the "License");
 5 * you may not use  this file  except in  compliance with the License.
 6 * You may obtain a copy of the License at
 7 *
 8 *   http://www.apache.org/licenses/LICENSE-2.0
 9 *
 10 * Unless required by applicable law or agreed to in writing, software
 11 * distributed  under the  License is distributed on an "AS IS" BASIS,
 12 * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
 13 * implied.
 14 *
 15 * See the License for the specific language governing permissions and
 16 * limitations under the License.
 17 */
 18using AsyncEnumeration.Abstractions;
 19using System;
 20using System.Collections.Generic;
 21using System.Reflection;
 22using System.Text;
 23using System.Threading.Tasks;
 24using UtilPack;
 25
 26namespace AsyncEnumeration
 27{
 28   /// <summary>
 29   /// This is utility class for various empty asynchronous enumerables and enumerators.
 30   /// </summary>
 31   /// <typeparam name="T">The type of items being enumerated.</typeparam>
 32   public static class EmptyAsync<T>
 33   {
 34      private sealed class EmptyAsyncEnumerable : IAsyncEnumerable<T>
 35      {
 36         public IAsyncEnumerator<T> GetAsyncEnumerator()
 37            => Enumerator;
 38
 39         public IAsyncProvider AsyncProvider
 40            => EmptyAsyncProvider.Instance;
 41
 42      }
 43
 44      private sealed class EmptyAsyncEnumerator : IAsyncEnumerator<T>
 45      {
 46         public Task<Boolean> WaitForNextAsync()
 47            => TaskUtils.False;
 48
 49         public T TryGetNext( out Boolean success )
 50         {
 51            success = false;
 52            return default;
 53         }
 54
 55         public Task DisposeAsync()
 56            => TaskUtils.CompletedTask;
 57      }
 58
 59      /// <summary>
 60      /// Gets the <see cref="IAsyncEnumerator{T}"/> which will return no items.
 61      /// </summary>
 62      /// <value>The <see cref="IAsyncEnumerator{T}"/> which will return no items.</value>
 63      public static IAsyncEnumerator<T> Enumerator { get; } = new EmptyAsyncEnumerator();
 64
 65      /// <summary>
 66      /// Gets the <see cref="IAsyncEnumerable{T}"/> which will always return <see cref="IAsyncEnumerator{T}"/> with no 
 67      /// </summary>
 68      /// <value>The <see cref="IAsyncEnumerable{T}"/> which will always return <see cref="IAsyncEnumerator{T}"/> with n
 69      public static IAsyncEnumerable<T> Enumerable { get; } = new EmptyAsyncEnumerable();
 70
 71   }
 72
 73   internal sealed class EmptyAsyncProvider : IAsyncProvider
 74   {
 3075      public static EmptyAsyncProvider Instance { get; } = new EmptyAsyncProvider();
 76
 177      private EmptyAsyncProvider()
 78      {
 79
 180      }
 81
 82      public Task<T> AggregateAsync<T>( IAsyncEnumerable<T> source, Func<T, T, T> func )
 183         => throw AsyncProviderUtilities.EmptySequenceException();
 84
 85      public Task<T> AggregateAsync<T>( IAsyncEnumerable<T> source, Func<T, T, ValueTask<T>> asyncFunc )
 186         => throw AsyncProviderUtilities.EmptySequenceException();
 87
 88      public Task<TResult> AggregateAsync<T, TResult>( IAsyncEnumerable<T> source, Func<TResult, T, TResult> func, TResu
 89         =>
 90#if NET40
 91         TaskEx
 92#else
 193         Task
 194#endif
 195         .FromResult( seed );
 96
 97      public Task<TResult> AggregateAsync<T, TResult>( IAsyncEnumerable<T> source, Func<TResult, T, ValueTask<TResult>> 
 98         =>
 99#if NET40
 100         TaskEx
 101#else
 1102         Task
 1103#endif
 1104         .FromResult( seed );
 105
 106      public Task<Boolean> AllAsync<T>( IAsyncEnumerable<T> source, Func<T, Boolean> predicate )
 1107         => TaskUtils.True;
 108
 109      public Task<Boolean> AllAsync<T>( IAsyncEnumerable<T> source, Func<T, ValueTask<Boolean>> asyncPredicate )
 1110         => TaskUtils.True;
 111
 112      public Task<Boolean> AnyAsync<T>( IAsyncEnumerable<T> source )
 0113         => TaskUtils.False;
 114
 115      public Task<Boolean> AnyAsync<T>( IAsyncEnumerable<T> source, Func<T, Boolean> predicate )
 1116         => TaskUtils.False;
 117
 118      public Task<Boolean> AnyAsync<T>( IAsyncEnumerable<T> source, Func<T, ValueTask<Boolean>> asyncPredicate )
 1119         => TaskUtils.False;
 120
 121      //public ValueTask<Int64> EnumerateAsync<T>( IAsyncEnumerable<T> enumerable )
 122      //   => new ValueTask<Int64>( 0 );
 123
 124      //public ValueTask<Int64> EnumerateAsync<T>( IAsyncEnumerable<T> enumerable, Action<T> action )
 125      //   => new ValueTask<Int64>( 0 );
 126
 127      //public ValueTask<Int64> EnumerateAsync<T>( IAsyncEnumerable<T> enumerable, Func<T, Task> asyncAction )
 128      //   => new ValueTask<Int64>( 0 );
 129
 130      public Task<T> FirstAsync<T>( IAsyncEnumerable<T> enumerable )
 1131         => throw AsyncProviderUtilities.EmptySequenceException();
 132
 133      public Task<T> FirstOrDefaultAsync<T>( IAsyncEnumerable<T> enumerable )
 134         =>
 135#if NET40
 136         TaskEx
 137#else
 1138         Task
 1139#endif
 1140         .FromResult( default( T ) );
 141
 142      public IAsyncEnumerable<U> OfType<T, U>( IAsyncEnumerable<T> enumerable )
 2143         => AsyncProviderUtilities.IsOfType(
 2144            typeof( T )
 2145#if !NET40
 2146         .GetTypeInfo()
 2147#endif
 2148         , typeof( U )
 2149#if !NET40
 2150         .GetTypeInfo()
 2151#endif
 2152         ) ?
 2153            (IAsyncEnumerable<U>) enumerable :
 2154            EmptyAsync<U>.Enumerable;
 155
 156      public IAsyncEnumerable<U> Select<T, U>( IAsyncEnumerable<T> enumerable, Func<T, U> selector )
 1157         => EmptyAsync<U>.Enumerable;
 158
 159      public IAsyncEnumerable<U> Select<T, U>( IAsyncEnumerable<T> enumerable, Func<T, ValueTask<U>> asyncSelector )
 1160         => EmptyAsync<U>.Enumerable;
 161
 162      public IAsyncEnumerable<U> SelectMany<T, U>( IAsyncEnumerable<T> enumerable, Func<T, IEnumerable<U>> selector )
 1163         => EmptyAsync<U>.Enumerable;
 164
 165      public IAsyncEnumerable<U> SelectMany<T, U>( IAsyncEnumerable<T> enumerable, Func<T, IAsyncEnumerable<U>> asyncSel
 1166         => EmptyAsync<U>.Enumerable;
 167
 168      public IAsyncEnumerable<U> SelectMany<T, U>( IAsyncEnumerable<T> enumerable, Func<T, Task<IEnumerable<U>>> selecto
 1169         => EmptyAsync<U>.Enumerable;
 170
 171      public IAsyncEnumerable<U> SelectMany<T, U>( IAsyncEnumerable<T> enumerable, Func<T, Task<IAsyncEnumerable<U>>> as
 1172         => EmptyAsync<U>.Enumerable;
 173
 174      public IAsyncEnumerable<T> Skip<T>( IAsyncEnumerable<T> enumerable, Int32 amount )
 1175         => enumerable;
 176
 177      public IAsyncEnumerable<T> Skip<T>( IAsyncEnumerable<T> enumerable, Int64 amount )
 1178         => enumerable;
 179
 180      public IAsyncEnumerable<T> SkipWhile<T>( IAsyncEnumerable<T> enumerable, Func<T, Boolean> predicate )
 1181         => enumerable;
 182
 183      public IAsyncEnumerable<T> SkipWhile<T>( IAsyncEnumerable<T> enumerable, Func<T, ValueTask<Boolean>> asyncPredicat
 1184         => enumerable;
 185
 186      public IAsyncEnumerable<T> Take<T>( IAsyncEnumerable<T> enumerable, Int32 amount )
 1187         => enumerable;
 188
 189      public IAsyncEnumerable<T> Take<T>( IAsyncEnumerable<T> enumerable, Int64 amount )
 1190         => enumerable;
 191
 192      public IAsyncEnumerable<T> TakeWhile<T>( IAsyncEnumerable<T> enumerable, Func<T, Boolean> predicate )
 2193         => enumerable;
 194
 195      public IAsyncEnumerable<T> TakeWhile<T>( IAsyncEnumerable<T> enumerable, Func<T, Task<Boolean>> asyncPredicate )
 1196         => enumerable;
 197
 198      public IAsyncEnumerable<T> Where<T>( IAsyncEnumerable<T> enumerable, Func<T, Boolean> predicate )
 1199         => enumerable;
 200
 201      public IAsyncEnumerable<T> Where<T>( IAsyncEnumerable<T> enumerable, Func<T, Task<Boolean>> asyncPredicate )
 1202         => enumerable;
 203   }
 204}

Methods/Properties

Instance()
.ctor()
AggregateAsync(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`3<T,T,T>)
AggregateAsync(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`3<T,T,System.Threading.Tasks.ValueTask`1<T>>)
AggregateAsync(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`3<TResult,T,TResult>,TResult)
AggregateAsync(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`3<TResult,T,System.Threading.Tasks.ValueTask`1<TResult>>,TResult)
AllAsync(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Boolean>)
AllAsync(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Threading.Tasks.ValueTask`1<System.Boolean>>)
AnyAsync(System.Collections.Generic.IAsyncEnumerable`1<T>)
AnyAsync(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Boolean>)
AnyAsync(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Threading.Tasks.ValueTask`1<System.Boolean>>)
FirstAsync(System.Collections.Generic.IAsyncEnumerable`1<T>)
FirstOrDefaultAsync(System.Collections.Generic.IAsyncEnumerable`1<T>)
OfType(System.Collections.Generic.IAsyncEnumerable`1<T>)
Select(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,U>)
Select(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Threading.Tasks.ValueTask`1<U>>)
SelectMany(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Collections.Generic.IEnumerable`1<U>>)
SelectMany(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Collections.Generic.IAsyncEnumerable`1<U>>)
SelectMany(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Threading.Tasks.Task`1<System.Collections.Generic.IEnumerable`1<U>>>)
SelectMany(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Threading.Tasks.Task`1<System.Collections.Generic.IAsyncEnumerable`1<U>>>)
Skip(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Int32)
Skip(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Int64)
SkipWhile(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Boolean>)
SkipWhile(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Threading.Tasks.ValueTask`1<System.Boolean>>)
Take(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Int32)
Take(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Int64)
TakeWhile(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Boolean>)
TakeWhile(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Threading.Tasks.Task`1<System.Boolean>>)
Where(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Boolean>)
Where(System.Collections.Generic.IAsyncEnumerable`1<T>,System.Func`2<T,System.Threading.Tasks.Task`1<System.Boolean>>)