mirror of
https://github.com/oliverbooth/X10D
synced 2024-11-26 12:58:49 +00:00
Add [ReadOnly]Span<T>.Count(Predicate<T>)
This commit is contained in:
parent
1428618ca9
commit
23e07b65b8
@ -15,7 +15,9 @@
|
||||
- X10D: Added `IEnumerable<T>.DisposeAll()`
|
||||
- X10D: Added `IEnumerable<T>.DisposeAllAsync()`
|
||||
- X10D: Added `char.IsEmoji`
|
||||
- X10D: Added `ReadOnlySpan<T>.Count(Predicate<T>)`
|
||||
- X10D: Added `Rune.IsEmoji`
|
||||
- X10D: Added `Span<T>.Count(Predicate<T>)`
|
||||
- X10D: Added `string.IsEmoji`
|
||||
- X10D: Added `Vector2.WithX()`
|
||||
- X10D: Added `Vector2.WithY()`
|
||||
|
@ -55,4 +55,28 @@ public class ReadOnlySpanTests
|
||||
return span.Any(null!);
|
||||
});
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Count_ShouldReturn0_GivenEmptySpan()
|
||||
{
|
||||
var span = new ReadOnlySpan<int>();
|
||||
Assert.AreEqual(0, span.Count(i => i % 2 == 0));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Count_ShouldReturn5_ForEvenNumbers_GivenNumbers1To10()
|
||||
{
|
||||
var span = new ReadOnlySpan<int>(new[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
|
||||
Assert.AreEqual(5, span.Count(i => i % 2 == 0));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Count_ShouldThrow_GivenNullPredicate()
|
||||
{
|
||||
Assert.ThrowsException<ArgumentNullException>(() =>
|
||||
{
|
||||
var span = new ReadOnlySpan<int>();
|
||||
return span.Count(null!);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -55,4 +55,28 @@ public class SpanTests
|
||||
return span.Any(null!);
|
||||
});
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Count_ShouldReturn0_GivenEmptySpan()
|
||||
{
|
||||
var span = new Span<int>();
|
||||
Assert.AreEqual(0, span.Count(i => i % 2 == 0));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Count_ShouldReturn5_ForEvenNumbers_GivenNumbers1To10()
|
||||
{
|
||||
var span = new Span<int>(new[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
|
||||
Assert.AreEqual(5, span.Count(i => i % 2 == 0));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Count_ShouldThrow_GivenNullPredicate()
|
||||
{
|
||||
Assert.ThrowsException<ArgumentNullException>(() =>
|
||||
{
|
||||
var span = new Span<int>();
|
||||
return span.Count(null!);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -84,4 +84,43 @@ public static class ReadOnlySpanExtensions
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a number that represents how many elements in the specified sequence satisfy a condition.
|
||||
/// </summary>
|
||||
/// <param name="source">A <see cref="ReadOnlySpan{T}" /> that contains elements to be tested and counted.</param>
|
||||
/// <param name="predicate">A function to test each element for a condition.</param>
|
||||
/// <typeparam name="TSource">The type of the elements in <paramref name="source" />.</typeparam>
|
||||
/// <returns>
|
||||
/// A number that represents how many elements in the sequence satisfy the condition in the predicate function.
|
||||
/// </returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="predicate" /> is <see langword="null" />.</exception>
|
||||
public static int Count<TSource>(this ReadOnlySpan<TSource> source, Predicate<TSource> predicate)
|
||||
{
|
||||
#if NET6_0_OR_GREATER
|
||||
ArgumentNullException.ThrowIfNull(predicate);
|
||||
#else
|
||||
if (predicate is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(predicate));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (source.IsEmpty)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
var count = 0;
|
||||
|
||||
foreach (TSource item in source)
|
||||
{
|
||||
if (predicate(item))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
@ -84,4 +84,43 @@ public static class SpanExtensions
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a number that represents how many elements in the specified sequence satisfy a condition.
|
||||
/// </summary>
|
||||
/// <param name="source">A <see cref="Span{T}" /> that contains elements to be tested and counted.</param>
|
||||
/// <param name="predicate">A function to test each element for a condition.</param>
|
||||
/// <typeparam name="TSource">The type of the elements in <paramref name="source" />.</typeparam>
|
||||
/// <returns>
|
||||
/// A number that represents how many elements in the sequence satisfy the condition in the predicate function.
|
||||
/// </returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="predicate" /> is <see langword="null" />.</exception>
|
||||
public static int Count<TSource>(this Span<TSource> source, Predicate<TSource> predicate)
|
||||
{
|
||||
#if NET6_0_OR_GREATER
|
||||
ArgumentNullException.ThrowIfNull(predicate);
|
||||
#else
|
||||
if (predicate is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(predicate));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (source.IsEmpty)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
var count = 0;
|
||||
|
||||
foreach (TSource item in source)
|
||||
{
|
||||
if (predicate(item))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user