forked from NetFabric/LinqBenchmarks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathListInt32SkipTakeWhere.cs
134 lines (124 loc) · 3.6 KB
/
ListInt32SkipTakeWhere.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using BenchmarkDotNet.Attributes;
using com.tinyield;
using JM.LinqFaster;
using NetFabric.Hyperlinq;
using StructLinq;
using System.Collections.Generic;
using System.Linq;
namespace LinqBenchmarks.List.Int32
{
public class ListInt32SkipTakeWhere: Int32ListSkipTakeBenchmarkBase
{
[Benchmark(Baseline = true)]
public int ForLoop()
{
var sum = 0;
var end = Skip + Count;
for (var index = Skip; index < end; index++)
{
var item = source[index];
if (item.IsEven())
sum += item;
}
return sum;
}
[Benchmark]
public int ForeachLoop()
{
using var enumerator = ((IEnumerable<int>)source).GetEnumerator();
for (var index = 0; index < Skip; index++)
_ = enumerator.MoveNext();
var sum = 0;
for (var index = 0; index < Count; index++)
{
var item = enumerator.Current;
if (item.IsEven())
sum += item;
}
return sum;
}
[Benchmark]
public int Linq()
{
var sum = 0;
foreach (var item in System.Linq.Enumerable.Skip(source, Skip).Take(Count).Where(item => item.IsEven()))
sum += item;
return sum;
}
[Benchmark]
public int LinqFaster()
{
var items = source.SkipF(Skip).TakeF(Count).WhereF(item => item.IsEven());
var sum = 0;
for (var index = 0; index < items.Count; index++)
sum += items[index];
return sum;
}
[Benchmark]
public int LinqAF()
{
var sum = 0;
foreach (var item in global::LinqAF.ListExtensionMethods.Skip(source, Skip).Take(Count).Where(item => item.IsEven()))
sum += item;
return sum;
}
[Benchmark]
public int StructLinq()
{
var sum = 0;
foreach (var item in source
.ToStructEnumerable()
.Skip(Skip)
.Take(Count)
.Where(item => item.IsEven()))
sum += item;
return sum;
}
[Benchmark]
public int StructLinq_IFunction()
{
var sum = 0;
var predicate = new Int32IsEven();
foreach (var item in source
.ToStructEnumerable()
.Skip(Skip, x=> x)
.Take(Count, x => x)
.Where(ref predicate, x => x))
sum += item;
return sum;
}
[Benchmark]
public int Hyperlinq()
{
var sum = 0;
foreach (var item in source.AsValueEnumerable()
.Skip(Skip)
.Take(Count)
.Where(item => item.IsEven()))
sum += item;
return sum;
}
[Benchmark]
public int Hyperlinq_IFunction()
{
var sum = 0;
foreach (var item in source.AsValueEnumerable()
.Skip(Skip)
.Take(Count)
.Where<Int32IsEven>())
sum += item;
return sum;
}
[Benchmark]
public int Tinyield()
{
var sum = 0;
Query.FromEnumerable(source)
.Skip(Skip)
.Limit(Count)
.Filter(i => i.IsEven())
.Traverse(item => sum += item);
return sum;
}
}
}