Skip to content

fix(DisjointSetBenchmark): rename ElementCount param to ItemCount so its dashboard card renders - #284

Merged
marius-bughiu merged 1 commit into
mainfrom
claude/sad-dubinsky-02cb3e
Jul 21, 2026
Merged

fix(DisjointSetBenchmark): rename ElementCount param to ItemCount so its dashboard card renders#284
marius-bughiu merged 1 commit into
mainfrom
claude/sad-dubinsky-02cb3e

Conversation

@marius-bughiu

Copy link
Copy Markdown
Owner

Problem

The benchmark dashboard JS in web/dev/bench/index.html and web/dev/bench/detail.html parses BenchmarkDotNet names with:

/^(\w+)Benchmark\.(\w+?)_(\w+)\(ItemCount:\s*(\d+)\)$/

which requires the literal ItemCount: in the parameter suffix. DisjointSetBenchmark declared its param as [Params(1000, 100_000)] public int ElementCount;, so it emitted (ElementCount: N). parseName returned null for every DisjointSet arm and the DisjointSet dashboard card rendered no data. Every other core benchmark (CeleritySet, Deque, LruCache, IndexedPriorityQueue, …) uses ItemCount.

Fix

Rename the [Params] property from ElementCount to ItemCount throughout DisjointSetBenchmark.cs (setup + both builders). The emitted BDN name now matches the dashboard regex, so the card will render after the next gh-pages benchmark publish on main.

No benchmark logic changes — just the parameter name. Benchmarks project builds clean in Release (0 warnings).

🤖 Generated with Claude Code

…the dashboard card renders

The benchmark dashboard (web/dev/bench/index.html and detail.html) parses BDN
benchmark names with a regex that requires the literal `ItemCount:` in the
parameter suffix. DisjointSetBenchmark emitted `(ElementCount: N)`, so
`parseName` returned null for every arm and the DisjointSet card showed no data.

Rename the `[Params]` property from `ElementCount` to `ItemCount` (matching every
other core benchmark) so the emitted name matches the regex. No benchmark logic
changes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 19, 2026 14:35
@github-actions

Copy link
Copy Markdown

Coverage

Metric Value
Line 98.62% (6367/6456)
Branch 97.17% (2678/2756)
Files below 100% line coverage
File Line Branch
src/Celerity/Collections/TopKEntry.cs 80% n/a
src/Celerity/Collections/XorFilter.cs 94.29% 90%
src/Celerity/Collections/EnumMap.cs 95.09% 92.19%
src/Celerity/Collections/CuckooFilter.cs 96.6% 89.42%
src/Celerity/Collections/HyperLogLog.cs 96.61% 93.75%

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes the benchmark dashboard’s name parsing for DisjointSetBenchmark by renaming its BenchmarkDotNet [Params] member from ElementCount to ItemCount, matching the dashboard regex used to extract the parameter suffix.

Changes:

  • Renamed the benchmark parameter field to ItemCount so emitted BDN names match (...ItemCount: N).
  • Updated all internal uses in setup and builder methods to reference ItemCount.

@github-actions

Copy link
Copy Markdown

Benchmarks

12 regressions ⚠️ vs main, 1 improvement ✅ (rows past ±10% beyond noise).

Highlights

Benchmark This PR StdDev main Δ
LongSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.67 μs 471.0 ns 4.19 μs +11.4% ⚠️
IntSetBenchmark.HashSet_Add(ItemCount: 1000) 14.16 μs 383.8 ns 12.79 μs +10.7% ⚠️
SwissSetBenchmark.HashSet_Add(ItemCount: 1000) 14.46 μs 340.4 ns 12.87 μs +12.4% ⚠️
BitSetBenchmark.BitArray_And(ItemCount: 1024) 110.3 ns 49.9 ns 55.9 ns +97.2% ⚠️
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 3.94 ms 322.77 μs 2.75 ms +43.3% ⚠️
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 1000) 33.02 μs 692.8 ns 29.56 μs +11.7% ⚠️
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 3.38 ms 257.12 μs 2.46 ms +37.1% ⚠️
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 2.80 ms 184.78 μs 2.02 ms +38.6% ⚠️
BitSetBenchmark.BitArray_Xor(ItemCount: 1024) 62.5 ns 1.0 ns 56.2 ns +11.3% ⚠️
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 64) 18.75 μs 736.6 ns 26.89 μs -30.3% ✅
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 1000) 8.47 μs 1.09 μs 7.34 μs +15.4% ⚠️
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 16.15 μs 379.2 ns 14.35 μs +12.5% ⚠️
EnumMapBenchmark.Dictionary_Remove 4.06 μs 439.9 ns 3.35 μs +21.1% ⚠️
Collections (376)
Benchmark This PR StdDev main Δ
TopKSketchBenchmark.Dictionary_Add(ItemCount: 1000) 13.42 μs 36.0 ns 13.45 μs -0.2%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 1000) 74.41 μs 66.0 ns 74.72 μs -0.4%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 100000) 3.29 ms 73.25 μs 3.26 ms +0.8%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 100000) 14.31 ms 27.06 μs 14.32 ms -0.1%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 1000) 32.9 ns 0.4 ns 32.9 ns -0.1%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 1000) 1.23 μs 7.2 ns 1.22 μs +0.1%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 100000) 34.0 ns 0.3 ns 31.7 ns +7.3%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 100000) 1.15 μs 4.0 ns 1.13 μs +1.9%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 1000) 9.53 μs 54.8 ns 9.47 μs +0.7%
LongSetBenchmark.HashSet_Add(ItemCount: 1000) 14.17 μs 289.7 ns 14.31 μs -1.0%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 1000) 10.25 μs 74.7 ns 10.19 μs +0.6%
LongSetBenchmark.LongSet_Add(ItemCount: 1000) 9.40 μs 273.4 ns 9.70 μs -3.2%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 100000) 1.30 ms 24.99 μs 1.28 ms +1.6%
LongSetBenchmark.HashSet_Add(ItemCount: 100000) 4.07 ms 59.69 μs 4.18 ms -2.7%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 100000) 833.81 μs 976.1 ns 834.60 μs -0.1%
LongSetBenchmark.LongSet_Add(ItemCount: 100000) 5.89 ms 117.56 μs 5.86 ms +0.4%
LongSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.67 μs 471.0 ns 4.19 μs +11.4% ⚠️
LongSetBenchmark.LongSet_Contains(ItemCount: 1000) 1.92 μs 3.0 ns 1.92 μs +0.1%
LongSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.55 ms 5.97 μs 1.68 ms -7.5%
LongSetBenchmark.LongSet_Contains(ItemCount: 100000) 667.46 μs 4.06 μs 671.29 μs -0.6%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 1000) 8.77 μs 14.2 ns 8.85 μs -0.9%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 1000) 5.19 μs 15.1 ns 5.15 μs +0.7%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 100000) 1.23 ms 9.44 μs 1.24 ms -0.7%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 100000) 683.26 μs 5.03 μs 684.62 μs -0.2%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 1000) 1.56 μs 2.2 ns 1.51 μs +3.3%
DequeBenchmark.Deque_Enumerate(ItemCount: 1000) 895.9 ns 0.7 ns 895.6 ns +0.0%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 100000) 225.36 μs 8.74 μs 227.33 μs -0.9%
DequeBenchmark.Deque_Enumerate(ItemCount: 100000) 88.35 μs 95.9 ns 88.35 μs +0.0%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 1000) 4.46 μs 391.2 ns 4.09 μs +8.9%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 1000) 6.98 μs 9.9 ns 6.98 μs -0.0%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 100000) 498.25 μs 15.73 μs 487.18 μs +2.3%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 100000) 2.13 ms 3.51 μs 2.12 ms +0.6%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.00 μs 322.8 ns 14.75 μs -5.1%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 1000) 10.96 μs 230.3 ns 11.59 μs -5.4%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.33 ms 113.01 μs 4.31 ms +0.2%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 100000) 6.23 ms 65.00 μs 6.34 ms -1.6%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.10 μs 69.8 ns 4.03 μs +1.5%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.13 μs 9.1 ns 4.14 μs -0.4%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 1000) 1.61 μs 2.1 ns 1.61 μs -0.0%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 1000) 2.61 μs 1.7 ns 2.61 μs -0.0%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 100000) 526.64 μs 20.59 μs 506.59 μs +4.0%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.51 ms 13.79 μs 1.52 ms -0.7%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 100000) 175.13 μs 246.0 ns 175.27 μs -0.1%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 100000) 981.48 μs 82.03 μs 928.34 μs +5.7%
DequeBenchmark.LinkedList_PushFront(ItemCount: 1000) 34.05 μs 1.59 μs 37.25 μs -8.6%
DequeBenchmark.Deque_PushFront(ItemCount: 1000) 19.59 μs 1.58 μs 19.39 μs +1.0%
DequeBenchmark.LinkedList_PushFront(ItemCount: 100000) 2.06 ms 76.61 μs 1.95 ms +5.6%
DequeBenchmark.Deque_PushFront(ItemCount: 100000) 593.26 μs 38.25 μs 592.45 μs +0.1%
DequeBenchmark.LinkedList_Queue(ItemCount: 1000) 49.19 μs 1.65 μs 52.09 μs -5.6%
DequeBenchmark.Deque_Queue(ItemCount: 1000) 28.07 μs 1.07 μs 28.54 μs -1.6%
DequeBenchmark.LinkedList_Queue(ItemCount: 100000) 4.05 ms 40.04 μs 3.97 ms +2.0%
DequeBenchmark.Deque_Queue(ItemCount: 100000) 697.77 μs 9.76 μs 696.53 μs +0.2%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 1000) 43.24 μs 4.17 μs 48.21 μs -10.3%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 72.29 μs 8.55 μs 72.43 μs -0.2%
LongSetBenchmark.HashSet_Remove(ItemCount: 1000) 69.41 μs 6.96 μs 72.28 μs -4.0%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 1000) 84.76 μs 2.37 μs 86.11 μs -1.6%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 1000) 104.67 μs 9.93 μs 101.12 μs +3.5%
LongSetBenchmark.LongSet_Remove(ItemCount: 1000) 74.07 μs 6.73 μs 70.56 μs +5.0%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 100000) 571.02 μs 13.43 μs 560.56 μs +1.9%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.91 ms 14.98 μs 1.92 ms -0.3%
LongSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.90 ms 21.15 μs 2.02 ms -6.0%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 100000) 1.43 ms 12.74 μs 1.42 ms +0.8%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 100000) 2.88 ms 2.18 ms 2.73 ms +5.4%
LongSetBenchmark.LongSet_Remove(ItemCount: 100000) 1.55 ms 66.74 μs 1.57 ms -1.1%
IntSetBenchmark.HashSet_Add(ItemCount: 1000) 14.16 μs 383.8 ns 12.79 μs +10.7% ⚠️
SwissSetBenchmark.HashSet_Add(ItemCount: 1000) 14.46 μs 340.4 ns 12.87 μs +12.4% ⚠️
IntSetBenchmark.IntSet_Add(ItemCount: 1000) 9.07 μs 109.9 ns 8.80 μs +3.1%
SwissSetBenchmark.SwissSet_Add(ItemCount: 1000) 27.25 μs 48.4 ns 27.17 μs +0.3%
IntSetBenchmark.HashSet_Add(ItemCount: 100000) 5.23 ms 122.77 μs 5.19 ms +0.7%
SwissSetBenchmark.HashSet_Add(ItemCount: 100000) 4.85 ms 57.34 μs 4.85 ms -0.0%
IntSetBenchmark.IntSet_Add(ItemCount: 100000) 3.29 ms 55.14 μs 3.29 ms -0.1%
SwissSetBenchmark.SwissSet_Add(ItemCount: 100000) 4.68 ms 35.07 μs 4.70 ms -0.5%
BitSetBenchmark.BitArray_And(ItemCount: 1024) 110.3 ns 49.9 ns 55.9 ns +97.2% ⚠️
BitSetBenchmark.BitSet_And(ItemCount: 1024) 1.25 μs 3.7 ns 1.25 μs +0.1%
BitSetBenchmark.BitArray_And(ItemCount: 1000000) 46.08 μs 406.5 ns 44.20 μs +4.2%
BitSetBenchmark.BitSet_And(ItemCount: 1000000) 4.49 ms 3.09 μs 4.48 ms +0.2%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 1000) 168.55 μs 503.5 ns 171.91 μs -2.0%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 3.94 ms 322.77 μs 2.75 ms +43.3% ⚠️
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 100000) 30.83 ms 898.37 μs 29.52 ms +4.4%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 100000) 1.49 s 61.05 ms 1.58 s -5.6%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 1000) 6.88 μs 9.3 ns 6.88 μs -0.0%
IntSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 7.6 ns 4.74 μs -0.0%
SwissSetBenchmark.HashSet_Contains(ItemCount: 1000) 5.01 μs 287.2 ns 4.73 μs +5.9%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 1000) 90.11 μs 1.13 μs 89.52 μs +0.7%
IntSetBenchmark.IntSet_Contains(ItemCount: 1000) 1.80 μs 7.9 ns 1.81 μs -0.1%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 1000) 2.79 μs 11.7 ns 2.79 μs -0.0%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 100000) 1.96 ms 17.14 μs 1.98 ms -1.1%
IntSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.59 ms 13.01 μs 1.55 ms +2.0%
SwissSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.58 ms 12.89 μs 1.55 ms +2.1%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 100000) 7.36 ms 59.40 μs 7.36 ms +0.0%
IntSetBenchmark.IntSet_Contains(ItemCount: 100000) 579.84 μs 1.07 μs 576.42 μs +0.6%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 100000) 649.17 μs 6.10 μs 646.52 μs +0.4%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.55 μs 9.9 ns 4.65 μs -2.1%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 1000) 2.37 μs 4.1 ns 2.37 μs +0.0%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.96 ms 4.84 μs 1.94 ms +0.9%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 100000) 354.58 μs 4.34 μs 344.37 μs +3.0%
LruCacheBenchmark.Dictionary_Get(ItemCount: 1000) 25.54 μs 824.2 ns 24.57 μs +4.0%
LruCacheBenchmark.LruCache_Get(ItemCount: 1000) 6.85 μs 48.9 ns 6.85 μs -0.1%
LruCacheBenchmark.Dictionary_Get(ItemCount: 100000) 25.54 μs 125.4 ns 25.95 μs -1.6%
LruCacheBenchmark.LruCache_Get(ItemCount: 100000) 7.13 μs 193.5 ns 6.95 μs +2.5%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 1000) 4.79 μs 97.1 ns 4.79 μs -0.0%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 1000) 3.49 μs 1.9 ns 3.49 μs -0.0%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 100000) 520.24 μs 724.5 ns 521.46 μs -0.2%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 100000) 1.38 ms 616.4 ns 1.38 ms -0.1%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 1000) 33.02 μs 692.8 ns 29.56 μs +11.7% ⚠️
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 1000) 40.97 μs 349.5 ns 39.70 μs +3.2%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 100000) 13.62 ms 512.86 μs 13.13 ms +3.7%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 100000) 18.25 ms 160.45 μs 18.71 ms -2.5%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.98 μs 66.3 ns 4.96 μs +0.3%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 1000) 2.26 μs 3.4 ns 2.27 μs -0.1%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.78 ms 10.94 μs 1.73 ms +2.8%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 100000) 743.39 μs 16.13 μs 708.97 μs +4.9%
BitSetBenchmark.BitArray_Or(ItemCount: 1024) 61.4 ns 0.9 ns 58.1 ns +5.5%
BitSetBenchmark.BitSet_Or(ItemCount: 1024) 1.25 μs 5.9 ns 1.25 μs -0.1%
BitSetBenchmark.BitArray_Or(ItemCount: 1000000) 44.51 μs 470.4 ns 43.98 μs +1.2%
BitSetBenchmark.BitSet_Or(ItemCount: 1000000) 4.48 ms 3.31 μs 4.48 ms +0.1%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1024) 1.24 μs 2.8 ns 1.24 μs -0.3%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1024) 7.1 ns 0.0 ns 7.0 ns +0.4%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1000000) 4.82 ms 3.30 μs 4.83 ms -0.0%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1000000) 5.11 μs 86.1 ns 5.10 μs +0.2%
LruCacheBenchmark.Dictionary_Put(ItemCount: 1000) 102.71 μs 7.76 μs 112.54 μs -8.7%
LruCacheBenchmark.LruCache_Put(ItemCount: 1000) 546.00 μs 21.61 μs 541.71 μs +0.8%
LruCacheBenchmark.Dictionary_Put(ItemCount: 100000) 6.49 ms 918.62 μs 6.70 ms -3.2%
LruCacheBenchmark.LruCache_Put(ItemCount: 100000) 5.76 ms 23.47 μs 5.81 ms -0.9%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 1000) 33.42 μs 4.90 μs 34.27 μs -2.5%
IntSetBenchmark.HashSet_Remove(ItemCount: 1000) 32.31 μs 4.56 μs 29.27 μs +10.4%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 1000) 153.64 μs 6.21 μs 143.81 μs +6.8%
IntSetBenchmark.IntSet_Remove(ItemCount: 1000) 89.65 μs 7.35 μs 86.78 μs +3.3%
SwissSetBenchmark.HashSet_Remove(ItemCount: 1000) 29.03 μs 1.51 μs 29.83 μs -2.7%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 1000) 73.85 μs 5.26 μs 68.48 μs +7.8%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 3.38 ms 257.12 μs 2.46 ms +37.1% ⚠️
IntSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.90 ms 117.23 μs 1.83 ms +4.2%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 2.80 ms 184.78 μs 2.02 ms +38.6% ⚠️
IntSetBenchmark.IntSet_Remove(ItemCount: 100000) 1.53 ms 198.75 μs 1.45 ms +5.0%
SwissSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.77 ms 28.54 μs 1.76 ms +0.3%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 100000) 1.24 ms 142.92 μs 1.26 ms -1.7%
BitSetBenchmark.BitArray_Xor(ItemCount: 1024) 62.5 ns 1.0 ns 56.2 ns +11.3% ⚠️
BitSetBenchmark.BitSet_Xor(ItemCount: 1024) 1.25 μs 6.2 ns 1.21 μs +3.5%
BitSetBenchmark.BitArray_Xor(ItemCount: 1000000) 45.16 μs 369.8 ns 44.06 μs +2.5%
BitSetBenchmark.BitSet_Xor(ItemCount: 1000000) 4.48 ms 2.59 μs 4.48 ms +0.0%
SmallSetBenchmark.HashSet_Add(ItemCount: 8) 118.3 ns 0.5 ns 117.7 ns +0.5%
SmallSetBenchmark.SmallSet_Add(ItemCount: 8) 43.1 ns 0.9 ns 43.4 ns -0.5%
SmallSetBenchmark.HashSet_Add(ItemCount: 64) 550.0 ns 3.2 ns 548.0 ns +0.3%
SmallSetBenchmark.SmallSet_Add(ItemCount: 64) 1.70 μs 15.9 ns 1.68 μs +1.1%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 1000) 8.80 μs 66.3 ns 8.87 μs -0.7%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 1000) 11.94 μs 543.9 ns 13.59 μs -12.2%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 100000) 3.42 ms 210.75 μs 3.44 ms -0.5%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 100000) 5.66 ms 174.47 μs 5.59 ms +1.3%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 1000) 15.72 μs 167.1 ns n/a 🆕 new
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 1000) 10.34 μs 57.7 ns n/a 🆕 new
DisjointSetBenchmark.Dictionary_Components(ItemCount: 100000) 3.01 ms 87.92 μs n/a 🆕 new
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 100000) 2.29 ms 67.61 μs n/a 🆕 new
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 1000) 6.12 μs 37.0 ns n/a 🆕 new
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 1000) 8.07 μs 149.8 ns n/a 🆕 new
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 100000) 153.99 μs 2.77 μs n/a 🆕 new
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 100000) 170.80 μs 27.06 μs n/a 🆕 new
SmallSetBenchmark.HashSet_Contains(ItemCount: 8) 22.5 ns 0.0 ns 22.6 ns -0.1%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 8) 21.3 ns 0.1 ns 21.4 ns -0.2%
SmallSetBenchmark.HashSet_Contains(ItemCount: 64) 189.5 ns 0.4 ns 189.4 ns +0.0%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 64) 826.4 ns 4.2 ns 824.0 ns +0.3%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 1000) 2.97 μs 25.8 ns 3.00 μs -1.0%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 1000) 1.91 μs 27.3 ns 1.78 μs +7.1%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.14 ms 56.90 μs 1.21 ms -5.2%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 100000) 657.06 μs 4.53 μs 658.77 μs -0.3%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 2.99 μs 12.2 ns 2.99 μs +0.0%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 1000) 2.25 μs 40.3 ns 2.25 μs +0.3%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.58 ms 8.95 μs 1.58 ms +0.1%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 100000) 1.11 ms 8.18 μs 1.11 ms -0.1%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 8) 120.1 ns 0.8 ns 120.8 ns -0.6%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 8) 69.0 ns 0.7 ns 67.9 ns +1.7%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 64) 578.8 ns 4.2 ns 577.0 ns +0.3%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 64) 910.5 ns 6.8 ns 909.7 ns +0.1%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 9.68 μs 41.1 ns 9.61 μs +0.7%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 9.71 μs 38.7 ns 9.73 μs -0.2%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 1000) 6.68 μs 29.0 ns 6.75 μs -1.1%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 1000) 6.22 μs 24.8 ns 6.33 μs -1.7%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 3.47 ms 90.30 μs 3.47 ms +0.0%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 3.96 ms 45.74 μs 4.01 ms -1.2%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 100000) 4.20 ms 177.47 μs 4.28 ms -1.9%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 100000) 2.79 ms 4.42 μs 2.79 ms +0.0%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 8) 22.1 ns 0.2 ns 22.1 ns -0.0%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 8) 25.4 ns 0.1 ns 25.4 ns +0.0%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 64) 189.1 ns 0.5 ns 186.6 ns +1.4%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 64) 850.6 ns 1.6 ns 850.5 ns +0.0%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 3.01 μs 17.1 ns 2.95 μs +1.9%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 2.96 μs 71.3 ns 2.94 μs +0.4%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 2.01 μs 2.8 ns 2.02 μs -0.1%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 1000) 4.71 μs 2.91 μs 1.99 μs +136.7%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.26 ms 4.24 μs 1.25 ms +0.6%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.25 ms 5.20 μs 1.25 ms -0.0%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 623.04 μs 5.23 μs 609.45 μs +2.2%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 100000) 629.31 μs 3.40 μs 611.04 μs +3.0%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 8) 848.3 ns 200.5 ns 1.58 μs -46.3%
SmallSetBenchmark.HashSet_Remove(ItemCount: 8) 296.0 ns 49.3 ns 658.1 ns -55.0%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 8) 907.6 ns 75.9 ns 1.34 μs -32.1%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 8) 1.07 μs 588.4 ns 1.61 μs -33.5%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 64) 5.77 μs 830.0 ns 3.88 μs +48.7%
SmallSetBenchmark.HashSet_Remove(ItemCount: 64) 1.41 μs 129.3 ns 1.35 μs +4.7%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 64) 18.75 μs 736.6 ns 26.89 μs -30.3% ✅
SmallSetBenchmark.SmallSet_Remove(ItemCount: 64) 18.43 μs 1.48 μs 23.60 μs -21.9%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 63.41 μs 10.29 μs 59.69 μs +6.2%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 61.10 μs 9.85 μs 58.83 μs +3.8%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 1000) 110.79 μs 7.23 μs 113.83 μs -2.7%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 1000) 119.39 μs 11.24 μs 119.69 μs -0.3%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 1000) 27.47 μs 7.46 μs 33.72 μs -18.5%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 1000) 106.59 μs 10.46 μs 109.50 μs -2.7%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.58 ms 20.89 μs 1.58 ms -0.2%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.60 ms 16.55 μs 1.58 ms +1.2%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 100000) 1.45 ms 22.97 μs 1.42 ms +2.0%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 100000) 1.43 ms 34.49 μs 1.40 ms +2.2%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.43 ms 18.95 μs 1.41 ms +0.9%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 100000) 1.30 ms 39.44 μs 1.29 ms +0.2%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 1000) 66.22 μs 724.2 ns n/a 🆕 new
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 1000) 18.38 μs 240.9 ns n/a 🆕 new
DisjointSetBenchmark.Dictionary_Union(ItemCount: 100000) 30.63 ms 786.67 μs n/a 🆕 new
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 100000) 5.94 ms 156.64 μs n/a 🆕 new
EnumSetBenchmark.HashSet_Add 575.3 ns 15.2 ns 701.3 ns -18.0%
EnumSetBenchmark.EnumSet_Add 87.0 ns 3.4 ns 86.9 ns +0.2%
BloomFilterBenchmark.HashSet_Add(ItemCount: 1000) 12.15 μs 85.7 ns 12.64 μs -3.9%
CeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 12.51 μs 230.8 ns 12.40 μs +0.9%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 1000) 12.52 μs 185.7 ns 12.12 μs +3.3%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 1000) 14.48 μs 13.2 ns 14.48 μs -0.0%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 1000) 8.91 μs 54.4 ns 8.91 μs -0.0%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 1000) 11.24 μs 263.4 ns 10.78 μs +4.2%
BloomFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.69 ms 96.46 μs 4.68 ms +0.1%
CeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 5.04 ms 101.71 μs 5.08 ms -0.8%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 100000) 4.20 ms 501.87 μs 4.13 ms +1.9%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 100000) 1.10 ms 4.89 μs 1.10 ms +0.1%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 100000) 3.17 ms 30.82 μs 3.15 ms +0.7%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 100000) 5.28 ms 68.99 μs 5.23 ms +1.0%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 1000) 160.94 μs 825.8 ns 163.39 μs -1.5%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 1000) 3.76 ms 60.88 μs 3.76 ms +0.2%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 100000) 28.96 ms 373.82 μs 29.03 ms -0.3%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 100000) 2.11 s 55.13 ms 2.12 s -0.6%
EnumSetBenchmark.HashSet_Contains 175.3 ns 0.1 ns 175.3 ns -0.0%
EnumSetBenchmark.EnumSet_Contains 45.9 ns 0.1 ns 46.1 ns -0.5%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.75 μs 39.0 ns 4.74 μs +0.1%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 3.6 ns 4.75 μs -0.4%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 4.7 ns 4.72 μs +0.0%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 1000) 13.11 μs 12.9 ns 13.11 μs +0.0%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 1000) 1.86 μs 6.0 ns 1.86 μs +0.0%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 1000) 2.43 μs 3.7 ns 2.42 μs +0.2%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.60 ms 49.34 μs 1.58 ms +1.3%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.51 ms 58.12 μs 1.56 ms -3.3%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.50 ms 47.80 μs 1.56 ms -3.8%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 100000) 868.99 μs 492.2 ns 870.58 μs -0.2%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 100000) 583.70 μs 1.07 μs 584.65 μs -0.2%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 100000) 736.93 μs 1.19 μs 740.74 μs -0.5%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 5.9 ns 4.54 μs -0.0%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 6.8 ns 4.54 μs +0.0%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 1000) 3.53 μs 13.2 ns 3.53 μs -0.1%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 1000) 2.80 μs 4.4 ns 2.81 μs -0.2%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.91 ms 21.24 μs 1.87 ms +2.2%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.91 ms 17.72 μs 1.91 ms +0.3%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 100000) 1.49 ms 1.17 μs 1.49 ms +0.0%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 100000) 1.16 ms 1.12 μs 1.16 ms -0.0%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.32 μs 288.5 ns 13.29 μs +0.2%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.22 μs 130.2 ns 14.10 μs -6.2%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 1000) 10.82 μs 286.2 ns 11.43 μs -5.4%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 1000) 17.34 μs 178.7 ns 16.84 μs +3.0%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.10 ms 71.98 μs 4.14 ms -1.0%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.67 ms 88.52 μs 4.75 ms -1.6%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 100000) 4.87 ms 61.67 μs 4.81 ms +1.1%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 100000) 7.89 ms 612.12 μs 7.85 ms +0.5%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 1000) 8.47 μs 1.09 μs 7.34 μs +15.4% ⚠️
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.73 μs 12.9 ns 4.73 μs +0.1%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.75 μs 35.4 ns 4.72 μs +0.7%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 1000) 90.01 μs 3.59 μs 85.69 μs +5.0%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 1000) 2.14 μs 4.1 ns 2.14 μs -0.0%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 1000) 2.65 μs 11.7 ns 2.63 μs +0.8%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 100000) 1.93 ms 11.56 μs 1.95 ms -0.8%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 2.85 μs 1.60 ms +0.2%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 2.25 μs 1.55 ms +3.2%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 100000) 7.45 ms 35.92 μs 7.34 ms +1.4%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 100000) 677.94 μs 1.04 μs 672.09 μs +0.9%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 100000) 844.44 μs 24.47 μs 850.54 μs -0.7%
EnumSetBenchmark.HashSet_Remove 2.81 μs 122.6 ns 3.03 μs -7.2%
EnumSetBenchmark.EnumSet_Remove 1.24 μs 281.6 ns 1.41 μs -11.9%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 30.40 μs 3.90 μs 27.80 μs +9.4%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 85.04 μs 7.67 μs 83.26 μs +2.1%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 87.97 μs 9.73 μs 84.86 μs +3.7%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 1000) 137.32 μs 4.99 μs 139.86 μs -1.8%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 1000) 104.06 μs 10.66 μs 93.63 μs +11.1%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 1000) 136.78 μs 4.37 μs 137.03 μs -0.2%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 1000) 29.19 μs 4.56 μs 30.42 μs -4.0%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 1000) 109.98 μs 7.32 μs 112.82 μs -2.5%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.70 ms 19.44 μs 1.70 ms +0.1%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.03 ms 13.35 μs 2.04 ms -0.8%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.05 ms 19.91 μs 2.04 ms +0.1%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 100000) 1.29 ms 41.51 μs 1.29 ms +0.4%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 100000) 2.54 ms 1.96 ms 1.58 ms +60.6%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 100000) 1.76 ms 119.99 μs 1.64 ms +7.2%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.71 ms 11.51 μs 1.71 ms -0.1%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 100000) 1.55 ms 14.09 μs 1.55 ms -0.0%
EnumSetBenchmark.HashSet_Union 419.3 ns 3.2 ns 413.1 ns +1.5%
EnumSetBenchmark.EnumSet_Union 21.7 ns 0.2 ns 21.8 ns -0.4%
EnumMapBenchmark.Dictionary_Add 660.7 ns 27.8 ns 681.3 ns -3.0%
EnumMapBenchmark.EnumMap_Add 165.1 ns 3.6 ns 158.6 ns +4.1%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 1000) 13.09 μs 131.1 ns 13.53 μs -3.2%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 1000) 13.44 μs 232.9 ns 13.92 μs -3.5%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 13.52 μs 221.3 ns 13.62 μs -0.8%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 1000) 7.28 μs 48.5 ns 7.35 μs -0.9%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 1000) 27.51 μs 119.6 ns 27.66 μs -0.5%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 1000) 9.07 μs 40.0 ns 8.97 μs +1.1%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.83 ms 93.68 μs 4.88 ms -1.0%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 100000) 4.96 ms 47.45 μs 5.00 ms -0.8%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 5.04 ms 244.44 μs 4.94 ms +1.9%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 100000) 2.14 ms 10.40 μs 2.12 ms +0.9%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 100000) 575.55 μs 367.2 ns 576.19 μs -0.1%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 100000) 2.90 ms 13.79 μs 2.91 ms -0.3%
XorFilterBenchmark.HashSet_Build(ItemCount: 1000) 8.54 μs 115.9 ns 8.35 μs +2.3%
XorFilterBenchmark.XorFilter_Build(ItemCount: 1000) 41.17 μs 374.4 ns 40.70 μs +1.2%
XorFilterBenchmark.HashSet_Build(ItemCount: 100000) 2.14 ms 34.46 μs 2.15 ms -0.4%
XorFilterBenchmark.XorFilter_Build(ItemCount: 100000) 13.24 ms 163.19 μs 13.15 ms +0.7%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 32.2 ns 4.76 μs -0.4%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.75 μs 22.4 ns 4.76 μs -0.3%
XorFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 9.5 ns 4.74 μs -0.4%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 1000) 4.93 μs 28.9 ns 4.92 μs +0.2%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 1000) 1.93 μs 26.6 ns 1.93 μs +0.0%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 1000) 6.78 μs 10.9 ns 6.77 μs +0.1%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.59 ms 4.05 μs 1.61 ms -1.1%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.59 ms 20.29 μs 1.61 ms -1.1%
XorFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.60 ms 14.20 μs 1.59 ms +0.7%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 100000) 1.75 ms 2.95 μs 1.76 ms -0.4%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 100000) 578.54 μs 1.73 μs 580.92 μs -0.4%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 100000) 704.60 μs 564.6 ns 704.55 μs +0.0%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.55 μs 18.2 ns 4.55 μs +0.1%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.55 μs 22.2 ns 4.54 μs +0.2%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 1000) 8.37 μs 6.4 ns 8.37 μs +0.0%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 1000) 6.77 μs 8.8 ns 6.77 μs +0.0%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.98 ms 8.46 μs 1.96 ms +0.6%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.96 ms 4.11 μs 1.97 ms -0.3%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 100000) 934.85 μs 7.25 μs 934.04 μs +0.1%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 100000) 706.11 μs 518.6 ns 706.15 μs -0.0%
EnumMapBenchmark.Dictionary_Enumerate 50.6 ns 0.1 ns 50.6 ns +0.1%
EnumMapBenchmark.EnumMap_Enumerate 41.6 ns 1.8 ns 39.6 ns +4.9%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 1000) 0.0 ns 0.0 ns 0.0 ns +338.0%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 1000) 23.45 μs 20.0 ns 23.45 μs +0.0%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 100000) 0.0 ns 0.0 ns 0.0 ns +261.7%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 100000) 22.99 μs 14.0 ns 22.99 μs -0.0%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 18.69 μs 295.1 ns 18.78 μs -0.5%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 16.15 μs 379.2 ns 14.35 μs +12.5% ⚠️
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 1000) 13.12 μs 199.4 ns 13.39 μs -2.0%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 1000) 31.25 μs 147.3 ns 30.19 μs +3.5%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.19 ms 75.13 μs 5.38 ms -3.4%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.08 ms 150.53 μs 4.80 ms +5.8%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 100000) 7.15 ms 158.02 μs 7.45 ms -4.1%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 100000) 4.09 ms 29.29 μs 4.03 ms +1.3%
EnumMapBenchmark.Dictionary_Lookup 117.8 ns 0.2 ns 117.9 ns -0.0%
EnumMapBenchmark.EnumMap_Lookup 64.2 ns 1.3 ns 63.2 ns +1.6%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.88 μs 24.3 ns 4.90 μs -0.3%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.73 μs 25.8 ns 4.73 μs +0.1%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 1000) 2.27 μs 10.5 ns 2.28 μs -0.6%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 1000) 6.37 μs 3.45 μs 2.98 μs +113.7%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.62 ms 3.12 μs 1.62 ms -0.2%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.63 ms 5.11 μs 1.63 ms +0.4%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 100000) 710.63 μs 1.02 μs 706.88 μs +0.5%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 100000) 803.02 μs 28.29 μs 793.65 μs +1.2%
EnumMapBenchmark.Dictionary_Remove 4.06 μs 439.9 ns 3.35 μs +21.1% ⚠️
EnumMapBenchmark.EnumMap_Remove 1.90 μs 395.1 ns 1.70 μs +11.3%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 89.40 μs 6.93 μs 85.25 μs +4.9%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 35.30 μs 4.41 μs 28.93 μs +22.0%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 86.72 μs 9.88 μs 88.95 μs -2.5%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 1000) 103.42 μs 8.09 μs 102.20 μs +1.2%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 1000) 142.45 μs 12.93 μs 153.52 μs -7.2%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 1000) 73.41 μs 1.73 μs 75.91 μs -3.3%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 1000) 13.68 μs 42.5 ns 13.52 μs +1.2%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 1000) 12.96 μs 19.2 ns 13.01 μs -0.4%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.08 ms 40.67 μs 2.06 ms +0.8%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.92 ms 126.68 μs 1.85 ms +3.3%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.16 ms 57.41 μs 2.37 ms -8.8%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 100000) 2.11 ms 388.30 μs 1.89 ms +11.9%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 100000) 1.50 ms 121.48 μs 1.35 ms +11.8%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 100000) 2.48 ms 390.68 μs 2.84 ms -12.8%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 100000) 3.95 ms 41.32 μs 4.00 ms -1.1%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 100000) 4.01 ms 35.04 μs 3.99 ms +0.6%
Hashers (100)
Benchmark This PR StdDev main Δ
StringHasherBenchmark.Bcl_GetHashCode(Shape: ShortAscii) 16.66 μs 17.7 ns 16.66 μs +0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: ShortAscii) 16.61 μs 11.9 ns 16.62 μs -0.0%
StringHasherBenchmark.Djb2(Shape: ShortAscii) 23.85 μs 15.6 ns 23.85 μs +0.0%
StringHasherBenchmark.Djb2A(Shape: ShortAscii) 23.86 μs 13.9 ns 23.85 μs +0.1%
StringHasherBenchmark.Sdbm(Shape: ShortAscii) 34.65 μs 20.3 ns 34.64 μs +0.0%
StringHasherBenchmark.Elf(Shape: ShortAscii) 43.14 μs 17.7 ns 43.13 μs +0.0%
StringHasherBenchmark.Crc32(Shape: ShortAscii) 54.77 μs 85.8 ns 54.74 μs +0.1%
StringHasherBenchmark.Adler32(Shape: ShortAscii) 108.61 μs 34.8 ns 108.63 μs -0.0%
StringHasherBenchmark.FnV1(Shape: ShortAscii) 28.61 μs 28.8 ns 28.59 μs +0.0%
StringHasherBenchmark.FnV1_64(Shape: ShortAscii) 28.02 μs 17.4 ns 28.02 μs +0.0%
StringHasherBenchmark.FnV1A(Shape: ShortAscii) 12.70 μs 8.1 ns 12.71 μs -0.1%
StringHasherBenchmark.FnV1A_Full(Shape: ShortAscii) 24.62 μs 11.5 ns 24.65 μs -0.1%
StringHasherBenchmark.FnV1A_64(Shape: ShortAscii) 29.54 μs 14.5 ns 29.55 μs -0.0%
StringHasherBenchmark.JenkinsOaat(Shape: ShortAscii) 41.05 μs 27.9 ns 41.05 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: ShortAscii) 15.92 μs 14.0 ns 15.92 μs -0.0%
StringHasherBenchmark.Murmur3(Shape: ShortAscii) 18.19 μs 9.0 ns 18.20 μs -0.1%
StringHasherBenchmark.XxHash32(Shape: ShortAscii) 17.42 μs 10.6 ns 17.41 μs +0.0%
StringHasherBenchmark.XxHash64(Shape: ShortAscii) 19.91 μs 21.3 ns 19.90 μs +0.1%
StringHasherBenchmark.XxHash3(Shape: ShortAscii) 18.15 μs 10.9 ns 18.09 μs +0.3%
StringHasherBenchmark.CityHash64(Shape: ShortAscii) 16.63 μs 12.5 ns 16.63 μs +0.0%
StringHasherBenchmark.MetroHash64(Shape: ShortAscii) 16.86 μs 11.2 ns 16.86 μs +0.0%
StringHasherBenchmark.SipHash13(Shape: ShortAscii) 30.71 μs 26.5 ns 30.71 μs -0.0%
StringHasherBenchmark.SipHash24(Shape: ShortAscii) 43.23 μs 25.4 ns 43.26 μs -0.1%
StringHasherBenchmark.HalfSipHash24(Shape: ShortAscii) 56.01 μs 41.4 ns 56.03 μs -0.0%
StringHasherBenchmark.HighwayHash64(Shape: ShortAscii) 448.26 μs 350.7 ns 447.51 μs +0.2%
StringHasherBenchmark.Bcl_GetHashCode(Shape: LongAscii) 108.12 μs 21.3 ns 108.15 μs -0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: LongAscii) 108.43 μs 29.7 ns 108.46 μs -0.0%
StringHasherBenchmark.Djb2(Shape: LongAscii) 247.93 μs 139.1 ns 248.00 μs -0.0%
StringHasherBenchmark.Djb2A(Shape: LongAscii) 247.89 μs 199.7 ns 247.98 μs -0.0%
StringHasherBenchmark.Sdbm(Shape: LongAscii) 342.84 μs 127.5 ns 342.88 μs -0.0%
StringHasherBenchmark.Elf(Shape: LongAscii) 625.94 μs 1.49 μs 624.80 μs +0.2%
StringHasherBenchmark.Crc32(Shape: LongAscii) 661.24 μs 288.3 ns 661.46 μs -0.0%
StringHasherBenchmark.Adler32(Shape: LongAscii) 883.02 μs 894.7 ns 882.09 μs +0.1%
StringHasherBenchmark.FnV1(Shape: LongAscii) 321.80 μs 153.5 ns 321.86 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: LongAscii) 319.72 μs 80.5 ns 319.75 μs -0.0%
StringHasherBenchmark.FnV1A(Shape: LongAscii) 133.07 μs 134.1 ns 133.04 μs +0.0%
StringHasherBenchmark.FnV1A_Full(Shape: LongAscii) 313.20 μs 173.7 ns 313.12 μs +0.0%
StringHasherBenchmark.FnV1A_64(Shape: LongAscii) 319.38 μs 263.0 ns 319.30 μs +0.0%
StringHasherBenchmark.JenkinsOaat(Shape: LongAscii) 422.41 μs 139.5 ns 422.51 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: LongAscii) 99.48 μs 3.02 μs 99.32 μs +0.2%
StringHasherBenchmark.Murmur3(Shape: LongAscii) 112.70 μs 207.2 ns 113.14 μs -0.4%
StringHasherBenchmark.XxHash32(Shape: LongAscii) 76.64 μs 117.3 ns 76.64 μs -0.0%
StringHasherBenchmark.XxHash64(Shape: LongAscii) 93.43 μs 51.7 ns 93.41 μs +0.0%
StringHasherBenchmark.XxHash3(Shape: LongAscii) 84.63 μs 54.3 ns 84.69 μs -0.1%
StringHasherBenchmark.CityHash64(Shape: LongAscii) 133.25 μs 74.7 ns 133.25 μs +0.0%
StringHasherBenchmark.MetroHash64(Shape: LongAscii) 82.24 μs 97.4 ns 82.54 μs -0.4%
StringHasherBenchmark.SipHash13(Shape: LongAscii) 116.42 μs 843.6 ns 115.62 μs +0.7%
StringHasherBenchmark.SipHash24(Shape: LongAscii) 169.62 μs 105.2 ns 169.73 μs -0.1%
StringHasherBenchmark.HalfSipHash24(Shape: LongAscii) 271.92 μs 147.6 ns 271.95 μs -0.0%
StringHasherBenchmark.HighwayHash64(Shape: LongAscii) 779.50 μs 7.03 μs 778.99 μs +0.1%
StringHasherBenchmark.Bcl_GetHashCode(Shape: NonAscii) 25.08 μs 17.7 ns 25.08 μs -0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: NonAscii) 25.03 μs 26.5 ns 25.02 μs +0.0%
StringHasherBenchmark.Djb2(Shape: NonAscii) 43.25 μs 34.7 ns 43.25 μs -0.0%
StringHasherBenchmark.Djb2A(Shape: NonAscii) 43.23 μs 10.4 ns 43.27 μs -0.1%
StringHasherBenchmark.Sdbm(Shape: NonAscii) 65.11 μs 36.8 ns 65.11 μs -0.0%
StringHasherBenchmark.Elf(Shape: NonAscii) 87.49 μs 46.8 ns 87.48 μs +0.0%
StringHasherBenchmark.Crc32(Shape: NonAscii) 111.34 μs 64.8 ns 111.30 μs +0.0%
StringHasherBenchmark.Adler32(Shape: NonAscii) 193.41 μs 71.7 ns 193.38 μs +0.0%
StringHasherBenchmark.FnV1(Shape: NonAscii) 51.06 μs 12.5 ns 51.06 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: NonAscii) 51.17 μs 34.1 ns 51.18 μs -0.0%
StringHasherBenchmark.FnV1A(Shape: NonAscii) 23.65 μs 13.3 ns 23.66 μs -0.0%
StringHasherBenchmark.FnV1A_Full(Shape: NonAscii) 46.78 μs 16.3 ns 46.85 μs -0.1%
StringHasherBenchmark.FnV1A_64(Shape: NonAscii) 51.84 μs 13.7 ns 51.84 μs +0.0%
StringHasherBenchmark.JenkinsOaat(Shape: NonAscii) 77.52 μs 22.6 ns 77.53 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: NonAscii) 24.56 μs 17.4 ns 24.56 μs +0.0%
StringHasherBenchmark.Murmur3(Shape: NonAscii) 27.66 μs 8.9 ns 27.68 μs -0.1%
StringHasherBenchmark.XxHash32(Shape: NonAscii) 24.59 μs 27.4 ns 24.58 μs +0.0%
StringHasherBenchmark.XxHash64(Shape: NonAscii) 32.35 μs 40.8 ns 32.32 μs +0.1%
StringHasherBenchmark.XxHash3(Shape: NonAscii) 28.81 μs 23.2 ns 28.82 μs -0.0%
StringHasherBenchmark.CityHash64(Shape: NonAscii) 23.71 μs 12.9 ns 23.74 μs -0.1%
StringHasherBenchmark.MetroHash64(Shape: NonAscii) 27.52 μs 18.3 ns 27.52 μs -0.0%
StringHasherBenchmark.SipHash13(Shape: NonAscii) 39.71 μs 62.1 ns 39.72 μs -0.0%
StringHasherBenchmark.SipHash24(Shape: NonAscii) 56.97 μs 24.0 ns 57.00 μs -0.1%
StringHasherBenchmark.HalfSipHash24(Shape: NonAscii) 79.24 μs 52.3 ns 79.24 μs -0.0%
StringHasherBenchmark.HighwayHash64(Shape: NonAscii) 484.43 μs 1.96 μs 483.51 μs +0.2%
IntegerHasherBenchmark.Guid_Bcl 1.62 μs 1.1 ns 1.62 μs -0.0%
IntegerHasherBenchmark.Guid_EqualityComparer 2.45 μs 10.4 ns 2.47 μs -0.8%
IntegerHasherBenchmark.Guid_Celerity 5.60 μs 139.6 ns 5.60 μs +0.1%
IntegerHasherBenchmark.Int32_Bcl 843.2 ns 0.7 ns 843.9 ns -0.1%
IntegerHasherBenchmark.Int32_EqualityComparer 871.5 ns 1.0 ns 868.7 ns +0.3%
IntegerHasherBenchmark.Int32_Identity 846.3 ns 2.4 ns 845.0 ns +0.2%
IntegerHasherBenchmark.Int32_WangNaive 1.16 μs 0.6 ns 1.16 μs -0.0%
IntegerHasherBenchmark.Int32_Wang 3.33 μs 1.1 ns 3.33 μs +0.0%
IntegerHasherBenchmark.Int32_Murmur3 2.45 μs 3.2 ns 2.45 μs +0.0%
IntegerHasherBenchmark.Int64_Bcl 1.36 μs 0.4 ns 1.36 μs -0.0%
IntegerHasherBenchmark.Int64_EqualityComparer 1.16 μs 0.9 ns 1.16 μs -0.0%
IntegerHasherBenchmark.Int64_Identity 844.7 ns 0.5 ns 844.6 ns +0.0%
IntegerHasherBenchmark.Int64_WangNaive 1.73 μs 1.0 ns 1.73 μs -0.0%
IntegerHasherBenchmark.Int64_Wang 4.52 μs 6.1 ns 4.52 μs +0.0%
IntegerHasherBenchmark.Int64_Murmur3 2.61 μs 2.4 ns 2.61 μs +0.0%
IntegerHasherBenchmark.UInt32_Bcl 843.8 ns 0.6 ns 844.7 ns -0.1%
IntegerHasherBenchmark.UInt32_EqualityComparer 871.3 ns 0.6 ns 871.7 ns -0.0%
IntegerHasherBenchmark.UInt32_Default 1.16 μs 1.2 ns 1.16 μs +0.0%
IntegerHasherBenchmark.UInt32_Wang 3.33 μs 0.9 ns 3.33 μs -0.1%
IntegerHasherBenchmark.UInt32_Murmur3 2.45 μs 2.2 ns 2.45 μs -0.0%
IntegerHasherBenchmark.UInt64_Bcl 1.36 μs 0.6 ns 1.36 μs -0.1%
IntegerHasherBenchmark.UInt64_EqualityComparer 1.16 μs 0.4 ns 1.16 μs -0.0%
IntegerHasherBenchmark.UInt64_Default 2.61 μs 0.8 ns 2.61 μs -0.1%
IntegerHasherBenchmark.UInt64_Wang 4.52 μs 1.6 ns 4.52 μs -0.0%
IntegerHasherBenchmark.UInt64_WangNaive 1.73 μs 0.6 ns 1.73 μs -0.0%

Same-runner A/B (sharded 6-way): main (febc3c6) and this PR were built and benchmarked back-to-back on the same runner per shard, so hardware variance cancels out. ⚠️ = PR mean ≥ +10% slower than main and beyond combined std-dev; ✅ = correspondingly faster.

@marius-bughiu
marius-bughiu merged commit 9fd8d26 into main Jul 21, 2026
15 checks passed
@marius-bughiu
marius-bughiu deleted the claude/sad-dubinsky-02cb3e branch July 24, 2026 22:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants