Skip to content

Commit 0e6df22

Browse files
committed
integrated benchmark
1 parent 0fe8fc2 commit 0e6df22

File tree

5 files changed

+15
-11
lines changed

5 files changed

+15
-11
lines changed

src/Extensions/ReadOnlySpan/Linq/Where.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ public static partial class ReadOnlySpanExtensions
1515
/// <exception cref="ArgumentNullException"><paramref name="predicate"/> is null.</exception>
1616
public static IEnumerable<T> Where<T>(this ReadOnlySpan<T> source, Predicate<T> predicate)
1717
{
18-
ReadOnlySpan<T>.Enumerator e = source.GetEnumerator();
18+
List<T> list = new List<T>();
1919

20-
while(e.MoveNext())
20+
foreach (T current in source)
2121
{
22-
T current = e.Current;
23-
24-
if(predicate(current))
22+
if(predicate(current))
2523
{
26-
yield return current;
24+
list.Add(current);
2725
}
2826
}
27+
28+
return list;
2929
}
3030

3131
/// <summary>
@@ -38,15 +38,19 @@ public static IEnumerable<T> Where<T>(this ReadOnlySpan<T> source, Predicate<T>
3838
/// <exception cref="ArgumentNullException"><paramref name="predicate"/> is null.</exception>
3939
public static IEnumerable<T> Where<T>(this ReadOnlySpan<T> source, Func<T, int, bool> predicate)
4040
{
41+
List<T> list = new List<T>();
42+
4143
for(int i = 0; i < source.Length; i++)
4244
{
4345
T current = source[i];
4446

4547
if(predicate(current, i))
4648
{
47-
yield return current;
49+
list.Add(current);
4850
}
4951
}
52+
53+
return list;
5054
}
5155
}
5256
}

tests/Performance/Tests/ReadOnlySpan/Split/ReadOnlySpan_Split_Count_Benchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public int Split_CutLastElements_ReadOnlySpan(ReadOnlySpan<char> value, char del
3939
{
4040
int length = 0;
4141

42-
foreach(ReadOnlySpan<char> part in value.Split(delimiter, count, CountExceedingBehaviour.CutLastElements))
42+
foreach(ReadOnlySpan<char> part in value.Split(delimiter, count, CountExceedingBehaviour.CutRemainingElements))
4343
{
4444
length += part.Length;
4545
}

tests/Performance/Tests/ReadOnlySpan/Split/ReadOnlySpan_Split_Count_StringSplitOptions_Benchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public int Split_Count_StringSplitOptions_CountExceedingBehaviour_CutLastElement
3939
{
4040
int length = 0;
4141

42-
foreach(ReadOnlySpan<char> part in value.Split(delimiter, count, options, CountExceedingBehaviour.CutLastElements))
42+
foreach(ReadOnlySpan<char> part in value.Split(delimiter, count, options, CountExceedingBehaviour.CutRemainingElements))
4343
{
4444
length += part.Length;
4545
}

tests/Performance/Tests/ReadOnlySpan/SplitSequence/ReadOnlySpan_SplitSequence_Count_Benchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public int Split_CutLastElements_ReadOnlySpan(ReadOnlySpan<char> value, ReadOnly
3939
{
4040
int length = 0;
4141

42-
foreach(ReadOnlySpan<char> part in value.Split(delimiter, count, CountExceedingBehaviour.CutLastElements))
42+
foreach(ReadOnlySpan<char> part in value.Split(delimiter, count, CountExceedingBehaviour.CutRemainingElements))
4343
{
4444
length += part.Length;
4545
}

tests/Performance/Tests/ReadOnlySpan/SplitSequence/ReadOnlySpan_SplitSequence_Count_StringSplitOptions_Benchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public int Split_Count_StringSplitOptions_CountExceedingBehaviour_CutLastElement
3939
{
4040
int length = 0;
4141

42-
foreach(ReadOnlySpan<char> part in value.Split(delimiter, count, options, CountExceedingBehaviour.CutLastElements))
42+
foreach(ReadOnlySpan<char> part in value.Split(delimiter, count, options, CountExceedingBehaviour.CutRemainingElements))
4343
{
4444
length += part.Length;
4545
}

0 commit comments

Comments
 (0)