Skip to content

Commit ffbd19c

Browse files
committed
Add all early exits to benchmarks
1 parent 0718550 commit ffbd19c

1 file changed

Lines changed: 73 additions & 10 deletions

File tree

‎Src/FastData.InternalShared/Helpers/TestVectorHelper.cs‎

Lines changed: 73 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -182,16 +182,39 @@ public static IEnumerable<ITestData> GetEarlyExitBenchmarkData(int warmupSampleC
182182
Enumerable.Range(501, benchmarkSize).ToArray(),
183183
GeneratorFunction.None, "ValueGreaterThan");
184184

185+
yield return CreateEarlyExitData([new ValueNotEqualEarlyExit<int>(500)],
186+
Enumerable.Repeat(500, benchmarkSize).ToArray(),
187+
Enumerable.Range(0, benchmarkSize).Select(x => x >= 500 ? x + 1 : x).ToArray(),
188+
GeneratorFunction.None, "ValueNotEqual");
189+
185190
yield return CreateEarlyExitData([new ValueInRangeEarlyExit<int>(400, 600)],
186191
Enumerable.Range(0, benchmarkSize).Select(x => x % 401).ToArray(),
187192
Enumerable.Range(0, benchmarkSize).Select(x => 401 + (x % 199)).ToArray(),
188193
GeneratorFunction.None, "ValueInRange");
189194

195+
ValueLessThanEarlyExit<int> valueLowerBound = new ValueLessThanEarlyExit<int>(400);
196+
ValueGreaterThanEarlyExit<int> valueUpperBound = new ValueGreaterThanEarlyExit<int>(600);
197+
yield return CreateEarlyExitData([new ValueOutOfRangeEarlyExit<int>(400, 600, valueLowerBound.KeyspaceSize, valueUpperBound.KeyspaceSize)],
198+
Enumerable.Range(0, benchmarkSize).Select(x => 400 + (x % 201)).ToArray(),
199+
Enumerable.Range(0, benchmarkSize).Select(x => x % 2 == 0 ? x % 400 : 601 + x).ToArray(),
200+
GeneratorFunction.None, "ValueOutOfRange");
201+
190202
yield return CreateEarlyExitData([new ValueBitMaskEarlyExit(0x00FF00ul)],
191203
Enumerable.Range(0, benchmarkSize).Select(x => x % 256).ToArray(),
192204
Enumerable.Range(0, benchmarkSize).Select(x => 256 + x).ToArray(),
193205
GeneratorFunction.None, "ValueBitMask");
194206

207+
const ulong missingEvenOffsets = 0x5555555555555555ul;
208+
yield return CreateEarlyExitData([new ValueBitSetEarlyExit<int>(500, 563, missingEvenOffsets)],
209+
Enumerable.Range(0, benchmarkSize).Select(x => 501 + ((x % 32) * 2)).ToArray(),
210+
Enumerable.Range(0, benchmarkSize).Select(x => 500 + ((x % 32) * 2)).ToArray(),
211+
GeneratorFunction.None, "ValueBitSet");
212+
213+
yield return CreateEarlyExitData([new ValueLowByteBitmapEarlyExit(0x00000000FFFFFFFFul, 0, 0, 0)],
214+
Enumerable.Range(0, benchmarkSize).Select(x => x % 32).ToArray(),
215+
Enumerable.Range(0, benchmarkSize).Select(x => 32 + (x % 224)).ToArray(),
216+
GeneratorFunction.None, "ValueLowByteBitmap");
217+
195218
// --- Individual string exits ---
196219

197220
int stringSize = Math.Min(benchmarkSize, 200);
@@ -207,6 +230,21 @@ public static IEnumerable<ITestData> GetEarlyExitBenchmarkData(int warmupSampleC
207230
Enumerable.Range(1, stringSize).Select(x => new string('b', x + 10)).ToArray(),
208231
GeneratorFunction.Length, "LengthGreaterThan");
209232

233+
yield return CreateEarlyExitData([new LengthNotEqualEarlyExit(8)],
234+
Enumerable.Repeat(new string('a', 8), stringSize).ToArray(),
235+
Enumerable.Range(0, stringSize).Select(x => new string('b', (x % 7) + 1)).ToArray(),
236+
GeneratorFunction.Length, "LengthNotEqual");
237+
238+
yield return CreateEarlyExitData([new LengthInRangeEarlyExit(5, 10)],
239+
Enumerable.Range(0, stringSize).Select(x => new string('a', x % 2 == 0 ? 5 : 10)).ToArray(),
240+
Enumerable.Range(0, stringSize).Select(x => new string('b', 6 + (x % 4))).ToArray(),
241+
GeneratorFunction.Length, "LengthInRange");
242+
243+
yield return CreateEarlyExitData([new LengthOutOfRangeEarlyExit(5, 15)],
244+
Enumerable.Range(0, stringSize).Select(x => new string('a', 5 + (x % 11))).ToArray(),
245+
Enumerable.Range(0, stringSize).Select(x => new string('b', x % 2 == 0 ? 4 : 16)).ToArray(),
246+
GeneratorFunction.Length, "LengthOutOfRange");
247+
210248
ulong lengthBitmap = (1ul << 2) | (1ul << 4) | (1ul << 6) | (1ul << 8);
211249
yield return CreateEarlyExitData([new LengthBitmapEarlyExit(lengthBitmap)],
212250
Enumerable.Range(0, stringSize).Select(x => new string('a', new[] { 3, 5, 7, 9 }[x % 4])).ToArray(),
@@ -220,17 +258,42 @@ public static IEnumerable<ITestData> GetEarlyExitBenchmarkData(int warmupSampleC
220258
Enumerable.Range(0, stringSize).Select(x => (char)('g' + (x % 20)) + "test").ToArray(),
221259
GeneratorFunction.UnitAt | GeneratorFunction.Length, "UnitAtBitmap");
222260

223-
// --- Combined exits ---
261+
yield return CreateEarlyExitData([new UnitAtLessThanEarlyExit('m')],
262+
Enumerable.Range(0, stringSize).Select(x => (char)('m' + (x % 14)) + "test").ToArray(),
263+
Enumerable.Range(0, stringSize).Select(x => (char)('a' + (x % 12)) + "test").ToArray(),
264+
GeneratorFunction.UnitAt, "UnitAtLessThan");
265+
266+
yield return CreateEarlyExitData([new UnitAtGreaterThanEarlyExit('m')],
267+
Enumerable.Range(0, stringSize).Select(x => (char)('a' + (x % 13)) + "test").ToArray(),
268+
Enumerable.Range(0, stringSize).Select(x => (char)('n' + (x % 13)) + "test").ToArray(),
269+
GeneratorFunction.UnitAt, "UnitAtGreaterThan");
270+
271+
yield return CreateEarlyExitData([new UnitAtNotEqualEarlyExit('m', false)],
272+
Enumerable.Repeat("mtest", stringSize).ToArray(),
273+
Enumerable.Range(0, stringSize).Select(x => (char)('a' + (x % 12)) + "test").ToArray(),
274+
GeneratorFunction.UnitAt, "UnitAtNotEqual");
275+
276+
yield return CreateEarlyExitData([new UnitAtInRangeEarlyExit('d', 'm')],
277+
Enumerable.Range(0, stringSize).Select(x => (x % 2 == 0 ? 'd' : 'm') + "test").ToArray(),
278+
Enumerable.Range(0, stringSize).Select(x => (char)('e' + (x % 8)) + "test").ToArray(),
279+
GeneratorFunction.UnitAt, "UnitAtInRange");
280+
281+
yield return CreateEarlyExitData([new UnitAtOutOfRangeEarlyExit('d', 'm')],
282+
Enumerable.Range(0, stringSize).Select(x => (char)('d' + (x % 10)) + "test").ToArray(),
283+
Enumerable.Range(0, stringSize).Select(x => (x % 2 == 0 ? 'c' : 'n') + "test").ToArray(),
284+
GeneratorFunction.UnitAt, "UnitAtOutOfRange");
285+
286+
yield return CreateEarlyExitData([new EqualsAtEarlyExit("pre", 0, false)],
287+
Enumerable.Range(0, stringSize).Select(x => $"pre{x}").ToArray(),
288+
Enumerable.Range(0, stringSize).Select(x => $"other{x}").ToArray(),
289+
GeneratorFunction.EqualsAt, "EqualsAt");
290+
291+
yield return CreateEarlyExitData([new IsAsciiOnlyEarlyExit()],
292+
Enumerable.Range(0, stringSize).Select(x => $"ascii-{x}").ToArray(),
293+
Enumerable.Range(0, stringSize).Select(x => $"non-ascii-\u00e9-{x}").ToArray(),
294+
GeneratorFunction.IsAsciiOnly, "IsAsciiOnly");
224295

225-
yield return CreateEarlyExitData([new ValueLessThanEarlyExit<int>(100), new ValueGreaterThanEarlyExit<int>(900)],
226-
Enumerable.Range(100, 801).Take(benchmarkSize).ToArray(),
227-
Enumerable.Range(0, benchmarkSize).Select(x => x < benchmarkSize / 2 ? x % 100 : 901 + (x % 100)).ToArray(),
228-
GeneratorFunction.None, "ValueLessThan_ValueGreaterThan");
229-
230-
yield return CreateEarlyExitData([new LengthLessThanEarlyExit(5), new LengthGreaterThanEarlyExit(15)],
231-
Enumerable.Range(0, stringSize).Select(x => new string('a', (x % 11) + 5)).ToArray(),
232-
Enumerable.Range(0, stringSize).Select(x => x % 2 == 0 ? new string('b', (x % 4) + 1) : new string('b', (x % 10) + 16)).ToArray(),
233-
GeneratorFunction.Length, "LengthLessThan_LengthGreaterThan");
296+
// --- Combined exits ---
234297

235298
yield return CreateEarlyExitData([new LengthLessThanEarlyExit(3), new UnitAtBitmapEarlyExit(0ul, charBitmapHigh, false)],
236299
Enumerable.Range(0, stringSize).Select(x => (char)('a' + (x % 6)) + new string('x', (x % 10) + 2)).ToArray(),

0 commit comments

Comments
 (0)