Skip to content

docs(DisjointSet): fix parameterless-ctor capacity claim - #292

Merged
marius-bughiu merged 1 commit into
mainfrom
chore/code-review/disjointset-default-ctor-doc
Jul 23, 2026
Merged

docs(DisjointSet): fix parameterless-ctor capacity claim#292
marius-bughiu merged 1 commit into
mainfrom
chore/code-review/disjointset-default-ctor-doc

Conversation

@marius-bughiu

Copy link
Copy Markdown
Owner

What

The parameterless DisjointSet() constructor's XML summary claimed it initializes the set "with a small default capacity." Reworded to state it pre-allocates nothing and that the first Add allocates the backing arrays.

Why

DisjointSet() forwards : this(0), and the capacity constructor treats 0 specially — it assigns Array.Empty<T>()/Array.Empty<int>() to all three backing arrays, so Capacity returns 0. The DefaultCapacity of 4 only takes effect on the first Grow(). The old wording implied storage was pre-sized at construction, which is inaccurate. The new wording mirrors the sibling Deque() constructor doc, which already documents this "allocate on first use" behavior correctly.

Doc-only change; no behavioral impact.

Test plan

  • dotnet build — succeeds, 0 warnings / 0 errors
  • Doc-only change; no runtime behavior affected, existing tests unaffected

The parameterless constructor forwards `capacity: 0`, which allocates
empty backing arrays (Capacity == 0) — the DefaultCapacity of 4 only
applies on the first Grow(). The doc claimed "a small default capacity,"
which is inaccurate. Reword to match the sibling Deque() doc: no
pre-allocated capacity, first Add allocates.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 23, 2026 00:15
@marius-bughiu marius-bughiu added the automated:code-review PR or issue opened by celerity---code-review sweep label Jul 23, 2026
@github-actions

Copy link
Copy Markdown

Coverage

Metric Value
Line 98.55% (6571/6668)
Branch 96.98% (2758/2844)
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/IndexedPriorityQueue.cs 96.23% 90.91%
src/Celerity/Collections/CuckooFilter.cs 96.6% 89.42%

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

Updates the XML documentation for DisjointSet<T>’s parameterless constructor to accurately describe its “allocate on first use” behavior, aligning the docs with the implementation and similar collection docs in this codebase.

Changes:

  • Reworded DisjointSet() constructor <summary> to state it starts with no pre-allocated capacity.
  • Clarified that the first Add call allocates the backing arrays.

@github-actions

Copy link
Copy Markdown

Benchmarks

2 regressions ⚠️ vs main, 4 improvements ✅ (rows past ±10% beyond noise).

Highlights

Benchmark This PR StdDev main Δ
DequeBenchmark.Deque_PushFront(ItemCount: 100000) 509.46 μs 8.74 μs 622.24 μs -18.1% ✅
DequeBenchmark.LinkedList_Queue(ItemCount: 1000) 44.26 μs 2.15 μs 38.81 μs +14.1% ⚠️
BitSetBenchmark.BitArray_Or(ItemCount: 1024) 94.4 ns 1.7 ns 113.5 ns -16.8% ✅
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 12.77 μs 124.3 ns 14.12 μs -9.5% ✅
EnumSetBenchmark.HashSet_Remove 1.74 μs 78.1 ns 3.62 μs -52.0% ✅
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 100000) 7.90 ms 117.49 μs 1.31 ms +503.8% ⚠️
Collections (384)
Benchmark This PR StdDev main Δ
TopKSketchBenchmark.Dictionary_Add(ItemCount: 1000) 13.88 μs 135.2 ns 12.75 μs +8.8%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 1000) 82.57 μs 481.5 ns 82.35 μs +0.3%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 100000) 3.41 ms 125.70 μs 3.25 ms +5.0%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 100000) 13.72 ms 24.69 μs 13.68 ms +0.3%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 1000) 33.4 ns 1.8 ns 30.3 ns +10.0%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 1000) 1.30 μs 17.5 ns 1.21 μs +7.6%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 100000) 31.3 ns 1.5 ns 29.8 ns +4.7%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 100000) 1.24 μs 40.2 ns 1.21 μs +2.3%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 1000) 8.15 μs 15.8 ns 8.14 μs +0.2%
LongSetBenchmark.HashSet_Add(ItemCount: 1000) 10.63 μs 265.1 ns 10.38 μs +2.5%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 1000) 10.21 μs 301.4 ns 10.15 μs +0.5%
LongSetBenchmark.LongSet_Add(ItemCount: 1000) 7.90 μs 148.5 ns 7.56 μs +4.5%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 100000) 1.14 ms 10.24 μs 1.12 ms +1.4%
LongSetBenchmark.HashSet_Add(ItemCount: 100000) 4.12 ms 131.43 μs 4.00 ms +3.1%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 100000) 885.95 μs 4.76 μs 889.17 μs -0.4%
LongSetBenchmark.LongSet_Add(ItemCount: 100000) 5.36 ms 52.90 μs 5.31 ms +1.0%
LongSetBenchmark.HashSet_Contains(ItemCount: 1000) 3.95 μs 4.0 ns 3.94 μs +0.2%
LongSetBenchmark.LongSet_Contains(ItemCount: 1000) 1.61 μs 1.7 ns 1.61 μs -0.0%
LongSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.22 ms 1.98 μs 1.22 ms +0.1%
LongSetBenchmark.LongSet_Contains(ItemCount: 100000) 451.43 μs 9.37 μs 454.58 μs -0.7%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 1000) 7.68 μs 28.2 ns 7.64 μs +0.5%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 1000) 4.25 μs 32.7 ns 4.18 μs +1.7%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 100000) 1.04 ms 13.33 μs 1.04 ms +0.3%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 100000) 517.20 μs 14.05 μs 510.68 μs +1.3%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 1000) 1.26 μs 22.2 ns 1.29 μs -1.7%
DequeBenchmark.Deque_Enumerate(ItemCount: 1000) 824.6 ns 0.3 ns 824.4 ns +0.0%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 100000) 117.99 μs 78.2 ns 118.18 μs -0.2%
DequeBenchmark.Deque_Enumerate(ItemCount: 100000) 81.98 μs 65.7 ns 81.95 μs +0.0%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 1000) 3.61 μs 2.8 ns 3.63 μs -0.7%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 1000) 6.31 μs 10.9 ns 6.31 μs -0.0%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 100000) 411.98 μs 377.7 ns 411.97 μs +0.0%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 100000) 1.77 ms 46.10 μs 1.76 ms +0.1%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 10.95 μs 228.6 ns 10.96 μs -0.1%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 1000) 8.36 μs 172.4 ns 7.98 μs +4.8%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.13 ms 89.26 μs 4.07 ms +1.5%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 100000) 5.89 ms 182.59 μs 5.64 ms +4.4%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 1000) 3.82 μs 206.5 ns 3.59 μs +6.4%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 3.66 μs 3.1 ns 3.66 μs +0.0%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 1000) 1.47 μs 1.5 ns 1.48 μs -0.2%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 1000) 2.20 μs 2.2 ns 2.22 μs -1.0%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 100000) 434.08 μs 556.1 ns 434.44 μs -0.1%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.24 ms 2.87 μs 1.24 ms -0.1%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 100000) 164.40 μs 109.2 ns 164.20 μs +0.1%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 100000) 672.66 μs 11.04 μs 673.54 μs -0.1%
DequeBenchmark.LinkedList_PushFront(ItemCount: 1000) 30.39 μs 3.46 μs 30.34 μs +0.2%
DequeBenchmark.Deque_PushFront(ItemCount: 1000) 16.33 μs 1.78 μs 15.08 μs +8.2%
DequeBenchmark.LinkedList_PushFront(ItemCount: 100000) 1.39 ms 10.43 μs 1.39 ms +0.5%
DequeBenchmark.Deque_PushFront(ItemCount: 100000) 509.46 μs 8.74 μs 622.24 μs -18.1% ✅
DequeBenchmark.LinkedList_Queue(ItemCount: 1000) 44.26 μs 2.15 μs 38.81 μs +14.1% ⚠️
DequeBenchmark.Deque_Queue(ItemCount: 1000) 23.29 μs 2.23 μs 25.57 μs -8.9%
DequeBenchmark.LinkedList_Queue(ItemCount: 100000) 3.80 ms 46.17 μs 3.83 ms -0.5%
DequeBenchmark.Deque_Queue(ItemCount: 100000) 353.44 μs 12.93 μs 353.90 μs -0.1%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 1000) 38.29 μs 4.43 μs 40.24 μs -4.8%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 61.75 μs 4.63 μs 62.90 μs -1.8%
LongSetBenchmark.HashSet_Remove(ItemCount: 1000) 58.92 μs 5.84 μs 56.13 μs +5.0%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 1000) 75.97 μs 1.54 μs 78.50 μs -3.2%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 1000) 88.93 μs 6.97 μs 93.55 μs -4.9%
LongSetBenchmark.LongSet_Remove(ItemCount: 1000) 58.42 μs 3.84 μs 62.31 μs -6.2%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 100000) 441.77 μs 11.47 μs 435.85 μs +1.4%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.63 ms 70.28 μs 1.63 ms -0.5%
LongSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.53 ms 15.62 μs 1.52 ms +0.2%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 100000) 1.26 ms 8.66 μs 1.26 ms +0.4%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 100000) 1.64 ms 207.74 μs 1.58 ms +3.5%
LongSetBenchmark.LongSet_Remove(ItemCount: 100000) 1.23 ms 21.28 μs 1.22 ms +0.9%
IntSetBenchmark.HashSet_Add(ItemCount: 1000) 14.11 μs 148.9 ns 13.55 μs +4.1%
SwissSetBenchmark.HashSet_Add(ItemCount: 1000) 13.55 μs 195.1 ns 13.91 μs -2.6%
IntSetBenchmark.IntSet_Add(ItemCount: 1000) 9.71 μs 36.2 ns 9.65 μs +0.6%
SwissSetBenchmark.SwissSet_Add(ItemCount: 1000) 26.25 μs 110.6 ns 26.22 μs +0.1%
IntSetBenchmark.HashSet_Add(ItemCount: 100000) 5.24 ms 84.07 μs 5.27 ms -0.4%
SwissSetBenchmark.HashSet_Add(ItemCount: 100000) 5.07 ms 74.81 μs 5.01 ms +1.2%
IntSetBenchmark.IntSet_Add(ItemCount: 100000) 3.61 ms 65.08 μs 3.62 ms -0.5%
SwissSetBenchmark.SwissSet_Add(ItemCount: 100000) 4.56 ms 33.59 μs 4.53 ms +0.7%
BitSetBenchmark.BitArray_And(ItemCount: 1024) 95.8 ns 0.4 ns 90.8 ns +5.5%
BitSetBenchmark.BitSet_And(ItemCount: 1024) 1.23 μs 1.4 ns 1.23 μs -0.1%
BitSetBenchmark.BitArray_And(ItemCount: 1000000) 45.79 μs 278.3 ns 46.36 μs -1.2%
BitSetBenchmark.BitSet_And(ItemCount: 1000000) 5.04 ms 11.38 μs 5.05 ms -0.1%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 1000) 172.83 μs 734.7 ns 174.09 μs -0.7%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 2.45 ms 57.05 μs 2.48 ms -1.0%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 100000) 30.26 ms 203.13 μs 30.34 ms -0.3%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 100000) 1.79 s 98.41 ms 1.65 s +8.4%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 1000) 7.09 μs 8.1 ns 7.09 μs +0.1%
IntSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.70 μs 3.2 ns 4.71 μs -0.2%
SwissSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.73 μs 10.0 ns 4.74 μs -0.1%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 1000) 78.99 μs 138.8 ns 79.06 μs -0.1%
IntSetBenchmark.IntSet_Contains(ItemCount: 1000) 1.92 μs 25.5 ns 1.92 μs -0.1%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 1000) 2.74 μs 1.7 ns 2.74 μs +0.2%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 100000) 1.85 ms 16.09 μs 1.92 ms -3.5%
IntSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.52 ms 2.80 μs 1.52 ms -0.3%
SwissSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.52 ms 4.42 μs 1.52 ms -0.0%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 100000) 8.96 ms 342.41 μs 8.67 ms +3.3%
IntSetBenchmark.IntSet_Contains(ItemCount: 100000) 504.91 μs 9.36 μs 503.83 μs +0.2%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 100000) 485.74 μs 6.08 μs 476.97 μs +1.8%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.56 μs 3.1 ns 4.57 μs -0.0%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 1000) 2.51 μs 1.9 ns 2.51 μs +0.1%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 2.00 ms 13.61 μs 2.05 ms -2.5%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 100000) 315.65 μs 1.25 μs 316.63 μs -0.3%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 1000) 78.21 μs 268.2 ns 80.94 μs -3.4%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 1000) 178.49 μs 744.8 ns 178.94 μs -0.3%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 100000) 37.67 ms 687.59 μs 36.78 ms +2.4%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 100000) 54.78 ms 319.06 μs 54.66 ms +0.2%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 1000) 5.17 μs 28.9 ns 5.21 μs -0.7%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 1000) 28.78 μs 253.2 ns 28.62 μs +0.5%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 100000) 1.18 ms 13.77 μs 1.18 ms -0.4%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 100000) 6.24 ms 138.80 μs 6.46 ms -3.4%
LruCacheBenchmark.Dictionary_Get(ItemCount: 1000) 24.12 μs 321.4 ns 24.61 μs -2.0%
LruCacheBenchmark.LruCache_Get(ItemCount: 1000) 7.62 μs 339.2 ns 7.44 μs +2.4%
LruCacheBenchmark.Dictionary_Get(ItemCount: 100000) 25.03 μs 377.6 ns 24.96 μs +0.3%
LruCacheBenchmark.LruCache_Get(ItemCount: 100000) 7.56 μs 85.6 ns 7.77 μs -2.7%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 1000) 4.76 μs 178.1 ns 4.62 μs +3.1%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 1000) 3.61 μs 1.2 ns 3.62 μs -0.1%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 100000) 537.07 μs 3.62 μs 538.51 μs -0.3%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 100000) 1.56 ms 1.38 μs 1.55 ms +0.3%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 1000) 29.56 μs 281.4 ns 29.74 μs -0.6%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 1000) 41.18 μs 510.5 ns 41.75 μs -1.4%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 100000) 14.35 ms 807.12 μs 14.28 ms +0.5%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 100000) 19.97 ms 397.59 μs 20.22 ms -1.3%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 1000) 5.16 μs 76.7 ns 5.09 μs +1.4%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 1000) 2.45 μs 3.2 ns 2.45 μs +0.0%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.82 ms 7.38 μs 1.76 ms +3.5%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 100000) 737.85 μs 12.79 μs 710.56 μs +3.8%
BitSetBenchmark.BitArray_Or(ItemCount: 1024) 94.4 ns 1.7 ns 113.5 ns -16.8% ✅
BitSetBenchmark.BitSet_Or(ItemCount: 1024) 1.23 μs 2.9 ns 1.23 μs +0.1%
BitSetBenchmark.BitArray_Or(ItemCount: 1000000) 45.54 μs 444.0 ns 46.04 μs -1.1%
BitSetBenchmark.BitSet_Or(ItemCount: 1000000) 5.04 ms 11.94 μs 5.05 ms -0.2%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1024) 1.29 μs 60.3 ns 1.27 μs +1.5%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1024) 6.9 ns 0.0 ns 6.9 ns -0.1%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1000000) 5.48 ms 2.03 μs 5.48 ms -0.0%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1000000) 5.55 μs 5.4 ns 5.55 μs +0.0%
LruCacheBenchmark.Dictionary_Put(ItemCount: 1000) 93.84 μs 3.86 μs 89.82 μs +4.5%
LruCacheBenchmark.LruCache_Put(ItemCount: 1000) 484.65 μs 18.67 μs 483.01 μs +0.3%
LruCacheBenchmark.Dictionary_Put(ItemCount: 100000) 7.78 ms 69.23 μs 7.98 ms -2.5%
LruCacheBenchmark.LruCache_Put(ItemCount: 100000) 6.41 ms 42.16 μs 6.47 ms -0.9%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 1000) 28.23 μs 507.9 ns 28.45 μs -0.8%
IntSetBenchmark.HashSet_Remove(ItemCount: 1000) 28.82 μs 3.51 μs 28.26 μs +2.0%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 1000) 154.00 μs 7.50 μs 146.24 μs +5.3%
IntSetBenchmark.IntSet_Remove(ItemCount: 1000) 84.52 μs 7.47 μs 82.86 μs +2.0%
SwissSetBenchmark.HashSet_Remove(ItemCount: 1000) 26.38 μs 1.76 μs 28.89 μs -8.7%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 1000) 65.82 μs 3.88 μs 68.79 μs -4.3%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 3.41 ms 265.97 μs 3.03 ms +12.7%
IntSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.66 ms 20.09 μs 1.76 ms -5.3%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 3.07 ms 133.46 μs 2.91 ms +5.7%
IntSetBenchmark.IntSet_Remove(ItemCount: 100000) 1.45 ms 15.01 μs 1.54 ms -6.1%
SwissSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.72 ms 14.51 μs 1.81 ms -5.0%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 100000) 992.41 μs 241.19 μs 899.29 μs +10.4%
BitSetBenchmark.BitArray_Xor(ItemCount: 1024) 95.1 ns 0.6 ns 97.5 ns -2.5%
BitSetBenchmark.BitSet_Xor(ItemCount: 1024) 1.23 μs 2.5 ns 1.23 μs +0.1%
BitSetBenchmark.BitArray_Xor(ItemCount: 1000000) 46.43 μs 639.6 ns 46.98 μs -1.2%
BitSetBenchmark.BitSet_Xor(ItemCount: 1000000) 5.04 ms 6.35 μs 5.04 ms -0.0%
SmallSetBenchmark.HashSet_Add(ItemCount: 8) 159.5 ns 1.0 ns 159.5 ns +0.0%
SmallSetBenchmark.SmallSet_Add(ItemCount: 8) 44.6 ns 0.4 ns 44.1 ns +1.2%
SmallSetBenchmark.HashSet_Add(ItemCount: 64) 744.2 ns 8.8 ns 730.7 ns +1.9%
SmallSetBenchmark.SmallSet_Add(ItemCount: 64) 1.66 μs 6.0 ns 1.66 μs -0.1%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 1000) 12.16 μs 164.2 ns 11.93 μs +1.9%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 1000) 16.57 μs 73.9 ns 16.83 μs -1.5%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 100000) 4.23 ms 455.47 μs 4.25 ms -0.4%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 100000) 6.17 ms 62.16 μs 6.12 ms +0.8%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 1000) 18.51 μs 323.6 ns 18.21 μs +1.7%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 1000) 16.33 μs 155.7 ns 16.39 μs -0.3%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 100000) 4.29 ms 81.69 μs 4.31 ms -0.5%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 100000) 3.21 ms 140.22 μs 3.20 ms +0.4%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 1000) 9.16 μs 5.2 ns 9.43 μs -2.8%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 1000) 12.20 μs 13.7 ns 12.16 μs +0.4%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 100000) 257.52 μs 4.66 μs 254.38 μs +1.2%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 100000) 337.56 μs 2.42 μs 339.56 μs -0.6%
SmallSetBenchmark.HashSet_Contains(ItemCount: 8) 37.1 ns 0.1 ns 37.1 ns +0.1%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 8) 19.0 ns 0.1 ns 18.9 ns +0.3%
SmallSetBenchmark.HashSet_Contains(ItemCount: 64) 299.3 ns 0.1 ns 299.4 ns -0.0%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 64) 1.10 μs 9.0 ns 1.09 μs +0.6%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 8.7 ns 4.72 μs +0.1%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 1000) 2.42 μs 2.7 ns 2.42 μs +0.1%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.55 ms 10.01 μs 1.57 ms -1.0%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 100000) 727.21 μs 5.58 μs 736.40 μs -1.2%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.55 μs 16.5 ns 4.55 μs +0.1%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 1000) 2.72 μs 2.8 ns 2.72 μs +0.0%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.93 ms 6.40 μs 1.93 ms -0.1%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 100000) 1.17 ms 2.59 μs 1.18 ms -0.2%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 8) 162.5 ns 1.8 ns 160.7 ns +1.1%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 8) 87.5 ns 1.1 ns 85.4 ns +2.5%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 64) 753.4 ns 6.0 ns 766.9 ns -1.8%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 64) 1.05 μs 5.7 ns 1.06 μs -1.4%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.03 μs 162.7 ns 12.83 μs +1.6%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 12.77 μs 124.3 ns 14.12 μs -9.5% ✅
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 1000) 11.59 μs 83.2 ns 11.71 μs -1.0%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 1000) 8.04 μs 31.5 ns 8.61 μs -6.6%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.12 ms 63.01 μs 4.09 ms +0.6%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.96 ms 86.54 μs 4.95 ms +0.2%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 100000) 4.80 ms 46.28 μs 4.72 ms +1.8%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 100000) 2.92 ms 44.79 μs 2.98 ms -2.0%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 8) 36.8 ns 0.1 ns 36.9 ns -0.2%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 8) 26.1 ns 4.1 ns 44.8 ns -41.7%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 64) 297.0 ns 0.4 ns 296.4 ns +0.2%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 64) 1.10 μs 10.2 ns 1.10 μs -0.3%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.69 μs 20.4 ns 4.74 μs -1.0%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.75 μs 52.2 ns 4.73 μs +0.5%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 2.16 μs 8.7 ns 2.15 μs +0.2%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 1000) 2.37 μs 16.3 ns 2.36 μs +0.6%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.59 ms 5.52 μs 1.60 ms -0.2%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 6.53 μs 1.60 ms -0.3%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 689.21 μs 3.91 μs 689.39 μs -0.0%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 100000) 698.12 μs 7.93 μs 693.54 μs +0.7%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 8) 1.37 μs 201.2 ns 1.28 μs +6.8%
SmallSetBenchmark.HashSet_Remove(ItemCount: 8) 434.1 ns 37.6 ns 436.9 ns -0.6%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 8) 1.24 μs 127.9 ns 1.30 μs -4.4%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 8) 1.24 μs 81.4 ns 1.15 μs +7.7%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 64) 4.84 μs 163.5 ns 5.31 μs -8.8%
SmallSetBenchmark.HashSet_Remove(ItemCount: 64) 1.68 μs 366.8 ns 1.68 μs +0.1%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 64) 22.03 μs 750.6 ns 21.75 μs +1.3%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 64) 21.07 μs 608.0 ns 21.40 μs -1.5%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 84.99 μs 9.93 μs 81.24 μs +4.6%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 85.88 μs 6.67 μs 84.72 μs +1.4%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 1000) 145.32 μs 3.13 μs 147.71 μs -1.6%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 1000) 139.64 μs 4.98 μs 148.24 μs -5.8%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 1000) 32.60 μs 2.64 μs 28.42 μs +14.7%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 1000) 133.49 μs 5.36 μs 124.79 μs +7.0%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.04 ms 11.20 μs 2.06 ms -0.8%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.09 ms 50.61 μs 2.03 ms +3.1%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 100000) 1.54 ms 17.83 μs 1.58 ms -2.3%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 100000) 1.59 ms 41.38 μs 1.57 ms +1.2%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.71 ms 12.01 μs 1.70 ms +0.5%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 100000) 1.35 ms 41.49 μs 1.36 ms -0.4%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 1000) 97.18 μs 2.80 μs 94.17 μs +3.2%
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 1000) 26.50 μs 99.5 ns 26.73 μs -0.9%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 100000) 41.05 ms 690.44 μs 41.71 ms -1.6%
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 100000) 8.08 ms 36.27 μs 8.16 ms -0.9%
EnumSetBenchmark.HashSet_Add 441.0 ns 6.7 ns 435.5 ns +1.3%
EnumSetBenchmark.EnumSet_Add 103.6 ns 0.7 ns 101.1 ns +2.5%
BloomFilterBenchmark.HashSet_Add(ItemCount: 1000) 8.85 μs 31.0 ns 8.79 μs +0.7%
CeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 8.83 μs 42.6 ns 8.79 μs +0.4%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 1000) 8.84 μs 86.4 ns 8.89 μs -0.6%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 1000) 10.46 μs 17.6 ns 10.44 μs +0.2%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 1000) 6.99 μs 45.4 ns 6.98 μs +0.2%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 1000) 8.13 μs 61.6 ns 8.44 μs -3.7%
BloomFilterBenchmark.HashSet_Add(ItemCount: 100000) 3.48 ms 84.53 μs 3.47 ms +0.2%
CeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 4.03 ms 207.94 μs 3.99 ms +1.1%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 100000) 3.33 ms 169.77 μs 3.39 ms -1.7%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 100000) 800.31 μs 1.58 μs 813.16 μs -1.6%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 100000) 2.99 ms 19.40 μs 2.98 ms +0.6%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 100000) 4.53 ms 172.95 μs 4.68 ms -3.1%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 1000) 125.28 μs 1.04 μs 126.64 μs -1.1%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 1000) 3.78 ms 7.02 μs 3.79 ms -0.2%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 100000) 21.94 ms 129.14 μs 22.35 ms -1.9%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 100000) 1.51 s 61.16 ms 1.44 s +5.4%
EnumSetBenchmark.HashSet_Contains 108.7 ns 0.2 ns 108.4 ns +0.3%
EnumSetBenchmark.EnumSet_Contains 34.9 ns 0.1 ns 34.9 ns +0.0%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 1000) 2.94 μs 3.7 ns 2.94 μs +0.0%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 2.98 μs 4.0 ns 2.97 μs +0.1%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 1000) 2.94 μs 4.0 ns 2.96 μs -0.7%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 1000) 8.73 μs 3.5 ns 8.75 μs -0.2%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 1000) 1.40 μs 2.2 ns 1.40 μs -0.0%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 1000) 1.85 μs 9.0 ns 1.85 μs -0.2%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.21 ms 2.95 μs 1.21 ms -0.5%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.21 ms 10.91 μs 1.21 ms +0.2%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.18 ms 10.48 μs 1.18 ms -0.1%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 100000) 673.62 μs 388.9 ns 673.48 μs +0.0%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 100000) 479.48 μs 1.38 μs 481.18 μs -0.4%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 100000) 658.94 μs 18.48 μs 667.70 μs -1.3%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 2.99 μs 6.1 ns 2.99 μs +0.1%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 2.98 μs 9.0 ns 2.97 μs +0.1%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 1000) 3.14 μs 96.7 ns 3.13 μs +0.1%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 1000) 2.61 μs 201.1 ns 2.59 μs +0.7%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.55 ms 7.73 μs 1.55 ms -0.1%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.59 ms 19.94 μs 1.58 ms +0.7%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 100000) 1.45 ms 3.09 μs 1.45 ms -0.3%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 100000) 1.06 ms 8.11 μs 1.06 ms +0.2%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 9.56 μs 18.3 ns 9.61 μs -0.5%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 9.57 μs 24.5 ns 9.63 μs -0.7%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 1000) 6.63 μs 53.9 ns 6.60 μs +0.5%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 1000) 12.43 μs 89.7 ns 12.58 μs -1.2%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 3.46 ms 85.43 μs 3.47 ms -0.3%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 3.85 ms 143.28 μs 3.78 ms +1.8%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 100000) 4.44 ms 158.40 μs 4.48 ms -0.9%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 100000) 7.33 ms 92.89 μs 7.24 ms +1.3%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 1000) 5.19 μs 39.0 ns 5.23 μs -0.7%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 3.03 μs 7.1 ns 3.02 μs +0.0%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 2.96 μs 45.5 ns 2.96 μs +0.3%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 1000) 75.76 μs 303.3 ns 75.85 μs -0.1%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 1000) 1.65 μs 3.2 ns 1.65 μs +0.0%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 1000) 2.05 μs 26.9 ns 2.08 μs -1.4%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 100000) 2.03 ms 8.84 μs 2.03 ms -0.1%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.24 ms 10.04 μs 1.25 ms -0.4%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.25 ms 3.01 μs 1.25 ms +0.0%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 100000) 7.22 ms 62.18 μs 7.12 ms +1.4%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 100000) 590.86 μs 1.41 μs 579.94 μs +1.9%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 100000) 791.12 μs 2.40 μs 789.50 μs +0.2%
EnumSetBenchmark.HashSet_Remove 1.74 μs 78.1 ns 3.62 μs -52.0% ✅
EnumSetBenchmark.EnumSet_Remove 1.73 μs 846.4 ns 1.24 μs +40.1%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 27.69 μs 6.53 μs 22.10 μs +25.3%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 56.78 μs 6.30 μs 68.24 μs -16.8%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 58.57 μs 6.68 μs 64.21 μs -8.8%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 1000) 108.63 μs 7.55 μs 116.93 μs -7.1%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 1000) 62.51 μs 6.93 μs 67.77 μs -7.8%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 1000) 106.95 μs 6.39 μs 106.12 μs +0.8%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 1000) 28.03 μs 7.88 μs 26.05 μs +7.6%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 1000) 84.29 μs 10.27 μs 78.90 μs +6.8%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.40 ms 13.36 μs 1.42 ms -1.3%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.58 ms 21.42 μs 1.59 ms -0.6%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.57 ms 34.28 μs 1.58 ms -0.4%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 100000) 1.25 ms 50.88 μs 1.23 ms +1.2%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 100000) 3.89 ms 41.06 μs 3.93 ms -1.1%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 100000) 1.55 ms 51.33 μs 1.54 ms +0.9%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.40 ms 11.81 μs 1.40 ms -0.1%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 100000) 1.36 ms 52.59 μs 1.40 ms -2.5%
EnumSetBenchmark.HashSet_Union 308.9 ns 1.1 ns 304.0 ns +1.6%
EnumSetBenchmark.EnumSet_Union 19.2 ns 0.1 ns 19.9 ns -3.5%
EnumMapBenchmark.Dictionary_Add 622.4 ns 1.7 ns 614.1 ns +1.4%
EnumMapBenchmark.EnumMap_Add 109.8 ns 1.0 ns 109.2 ns +0.6%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 1000) 12.43 μs 32.2 ns 12.39 μs +0.3%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 1000) 12.42 μs 60.2 ns 12.39 μs +0.2%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 12.37 μs 32.4 ns 12.33 μs +0.3%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 1000) 7.91 μs 21.8 ns 7.90 μs +0.1%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 1000) 29.79 μs 78.8 ns 29.89 μs -0.3%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 1000) 9.67 μs 114.9 ns 9.54 μs +1.4%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.86 ms 80.72 μs 4.82 ms +0.8%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 100000) 4.99 ms 62.38 μs 5.00 ms -0.3%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 5.02 ms 46.58 μs 5.05 ms -0.5%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 100000) 2.31 ms 3.74 μs 2.31 ms +0.0%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 100000) 509.18 μs 23.25 μs 526.67 μs -3.3%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 100000) 3.17 ms 10.92 μs 3.18 ms -0.5%
XorFilterBenchmark.HashSet_Build(ItemCount: 1000) 8.15 μs 16.8 ns 8.19 μs -0.5%
XorFilterBenchmark.XorFilter_Build(ItemCount: 1000) 40.98 μs 392.7 ns 42.03 μs -2.5%
XorFilterBenchmark.HashSet_Build(ItemCount: 100000) 2.07 ms 26.62 μs 2.07 ms -0.1%
XorFilterBenchmark.XorFilter_Build(ItemCount: 100000) 13.40 ms 71.76 μs 13.45 ms -0.4%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.75 μs 6.0 ns 4.75 μs -0.1%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.73 μs 21.4 ns 4.76 μs -0.7%
XorFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.75 μs 3.6 ns 4.75 μs +0.0%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 1000) 5.56 μs 11.1 ns 5.56 μs +0.1%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 1000) 2.05 μs 17.9 ns 2.05 μs -0.0%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 1000) 7.57 μs 5.8 ns 7.55 μs +0.3%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.51 ms 6.31 μs 1.54 ms -1.8%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.50 ms 2.73 μs 1.50 ms +0.0%
XorFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.52 ms 2.66 μs 1.51 ms +0.9%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 100000) 1.97 ms 723.3 ns 1.97 ms -0.0%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 100000) 502.91 μs 26.11 μs 532.28 μs -5.5%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 100000) 802.03 μs 270.6 ns 802.27 μs -0.0%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.57 μs 6.0 ns 4.57 μs -0.1%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.59 μs 29.1 ns 4.57 μs +0.6%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 1000) 9.63 μs 6.1 ns 9.63 μs +0.0%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 1000) 7.56 μs 4.9 ns 7.55 μs +0.1%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.99 ms 8.12 μs 2.00 ms -0.3%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 2.00 ms 4.25 μs 2.00 ms +0.2%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 100000) 985.68 μs 476.0 ns 985.87 μs -0.0%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 100000) 805.30 μs 410.9 ns 805.21 μs +0.0%
EnumMapBenchmark.Dictionary_Enumerate 43.1 ns 0.1 ns 43.1 ns -0.1%
EnumMapBenchmark.EnumMap_Enumerate 37.3 ns 0.5 ns 38.0 ns -1.8%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 1000) 0.0 ns 0.0 ns 0.0 ns +112.0%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 1000) 26.47 μs 184.7 ns 26.46 μs +0.0%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 100000) 0.0 ns 0.0 ns 0.0 ns -10.0%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 100000) 27.87 μs 304.4 ns 27.95 μs -0.3%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.72 μs 62.4 ns 14.74 μs -0.1%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.06 μs 18.6 ns 13.02 μs +0.3%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 1000) 8.47 μs 46.0 ns 8.56 μs -1.1%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 1000) 29.30 μs 119.1 ns 29.47 μs -0.6%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.22 ms 54.43 μs 5.16 ms +1.2%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.86 ms 191.62 μs 4.94 ms -1.8%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 100000) 7.51 ms 53.60 μs 7.54 ms -0.4%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 100000) 3.84 ms 48.48 μs 3.88 ms -0.9%
EnumMapBenchmark.Dictionary_Lookup 135.7 ns 0.1 ns 135.8 ns -0.1%
EnumMapBenchmark.EnumMap_Lookup 69.7 ns 0.0 ns 69.7 ns -0.0%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 5.04 μs 35.6 ns 5.05 μs -0.1%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.72 μs 115.9 ns 4.84 μs -2.5%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 1000) 2.28 μs 9.2 ns 2.28 μs -0.1%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 1000) 7.82 μs 4.97 μs 2.91 μs +168.8%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.57 ms 1.46 μs 1.59 ms -1.5%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 5.24 μs 1.60 ms +0.2%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 100000) 697.14 μs 2.42 μs 680.79 μs +2.4%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 100000) 665.31 μs 3.47 μs 690.41 μs -3.6%
EnumMapBenchmark.Dictionary_Remove 3.17 μs 589.9 ns 2.92 μs +8.7%
EnumMapBenchmark.EnumMap_Remove 1.24 μs 70.0 ns 1.39 μs -10.5%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 80.04 μs 7.66 μs 79.62 μs +0.5%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 29.20 μs 3.44 μs 26.14 μs +11.7%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 80.69 μs 7.98 μs 79.13 μs +2.0%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 1000) 82.71 μs 8.44 μs 83.06 μs -0.4%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 1000) 146.19 μs 7.67 μs 149.29 μs -2.1%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 1000) 71.71 μs 2.40 μs 73.18 μs -2.0%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 1000) 13.49 μs 66.5 ns 13.46 μs +0.2%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 1000) 14.24 μs 19.8 ns 14.27 μs -0.2%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.00 ms 35.78 μs 2.00 ms -0.1%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.67 ms 17.75 μs 1.69 ms -0.9%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.99 ms 17.43 μs 2.02 ms -1.2%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 100000) 2.53 ms 1.68 ms 1.80 ms +40.6%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 100000) 1.37 ms 68.53 μs 1.36 ms +1.1%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 100000) 7.90 ms 117.49 μs 1.31 ms +503.8% ⚠️
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 100000) 3.73 ms 38.30 μs 3.73 ms +0.0%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 100000) 4.51 ms 5.05 μs 4.51 ms +0.0%
Hashers (100)
Benchmark This PR StdDev main Δ
StringHasherBenchmark.Bcl_GetHashCode(Shape: ShortAscii) 15.40 μs 22.1 ns 15.39 μs +0.1%
StringHasherBenchmark.EqualityComparer_Default(Shape: ShortAscii) 15.39 μs 20.4 ns 15.36 μs +0.1%
StringHasherBenchmark.Djb2(Shape: ShortAscii) 22.03 μs 27.5 ns 22.05 μs -0.1%
StringHasherBenchmark.Djb2A(Shape: ShortAscii) 22.06 μs 50.8 ns 22.03 μs +0.1%
StringHasherBenchmark.Sdbm(Shape: ShortAscii) 32.83 μs 28.9 ns 32.83 μs -0.0%
StringHasherBenchmark.Elf(Shape: ShortAscii) 43.95 μs 109.3 ns 43.86 μs +0.2%
StringHasherBenchmark.Crc32(Shape: ShortAscii) 49.92 μs 92.7 ns 49.84 μs +0.2%
StringHasherBenchmark.Adler32(Shape: ShortAscii) 96.19 μs 88.1 ns 96.21 μs -0.0%
StringHasherBenchmark.FnV1(Shape: ShortAscii) 25.35 μs 18.5 ns 25.34 μs +0.0%
StringHasherBenchmark.FnV1_64(Shape: ShortAscii) 25.48 μs 56.6 ns 25.48 μs -0.0%
StringHasherBenchmark.FnV1A(Shape: ShortAscii) 10.69 μs 65.7 ns 10.63 μs +0.6%
StringHasherBenchmark.FnV1A_Full(Shape: ShortAscii) 22.86 μs 38.3 ns 22.85 μs +0.0%
StringHasherBenchmark.FnV1A_64(Shape: ShortAscii) 25.73 μs 51.1 ns 25.70 μs +0.1%
StringHasherBenchmark.JenkinsOaat(Shape: ShortAscii) 39.26 μs 30.5 ns 39.26 μs +0.0%
StringHasherBenchmark.Murmur2(Shape: ShortAscii) 15.19 μs 48.4 ns 15.18 μs +0.1%
StringHasherBenchmark.Murmur3(Shape: ShortAscii) 17.31 μs 34.6 ns 17.29 μs +0.1%
StringHasherBenchmark.XxHash32(Shape: ShortAscii) 16.90 μs 13.0 ns 16.91 μs -0.0%
StringHasherBenchmark.XxHash64(Shape: ShortAscii) 18.09 μs 7.8 ns 18.09 μs +0.0%
StringHasherBenchmark.XxHash3(Shape: ShortAscii) 14.84 μs 46.0 ns 14.83 μs +0.1%
StringHasherBenchmark.CityHash64(Shape: ShortAscii) 15.22 μs 11.6 ns 15.22 μs +0.1%
StringHasherBenchmark.MetroHash64(Shape: ShortAscii) 15.00 μs 12.0 ns 15.00 μs -0.0%
StringHasherBenchmark.SipHash13(Shape: ShortAscii) 27.37 μs 32.9 ns 27.34 μs +0.1%
StringHasherBenchmark.SipHash24(Shape: ShortAscii) 38.47 μs 34.3 ns 38.46 μs +0.0%
StringHasherBenchmark.HalfSipHash24(Shape: ShortAscii) 49.96 μs 56.9 ns 49.98 μs -0.1%
StringHasherBenchmark.HighwayHash64(Shape: ShortAscii) 479.85 μs 316.2 ns 479.60 μs +0.1%
StringHasherBenchmark.Bcl_GetHashCode(Shape: LongAscii) 96.91 μs 117.4 ns 96.85 μs +0.1%
StringHasherBenchmark.EqualityComparer_Default(Shape: LongAscii) 96.53 μs 78.9 ns 96.61 μs -0.1%
StringHasherBenchmark.Djb2(Shape: LongAscii) 229.29 μs 169.6 ns 229.23 μs +0.0%
StringHasherBenchmark.Djb2A(Shape: LongAscii) 229.21 μs 75.9 ns 229.26 μs -0.0%
StringHasherBenchmark.Sdbm(Shape: LongAscii) 307.87 μs 58.4 ns 307.93 μs -0.0%
StringHasherBenchmark.Elf(Shape: LongAscii) 577.22 μs 308.9 ns 577.32 μs -0.0%
StringHasherBenchmark.Crc32(Shape: LongAscii) 589.31 μs 227.4 ns 589.52 μs -0.0%
StringHasherBenchmark.Adler32(Shape: LongAscii) 788.78 μs 409.7 ns 788.02 μs +0.1%
StringHasherBenchmark.FnV1(Shape: LongAscii) 289.51 μs 148.5 ns 289.61 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: LongAscii) 284.38 μs 201.6 ns 284.33 μs +0.0%
StringHasherBenchmark.FnV1A(Shape: LongAscii) 122.23 μs 56.3 ns 122.25 μs -0.0%
StringHasherBenchmark.FnV1A_Full(Shape: LongAscii) 281.56 μs 175.7 ns 281.63 μs -0.0%
StringHasherBenchmark.FnV1A_64(Shape: LongAscii) 286.63 μs 46.1 ns 286.82 μs -0.1%
StringHasherBenchmark.JenkinsOaat(Shape: LongAscii) 378.30 μs 167.5 ns 378.45 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: LongAscii) 101.91 μs 108.3 ns 101.91 μs +0.0%
StringHasherBenchmark.Murmur3(Shape: LongAscii) 113.01 μs 167.4 ns 112.92 μs +0.1%
StringHasherBenchmark.XxHash32(Shape: LongAscii) 73.20 μs 63.5 ns 73.19 μs +0.0%
StringHasherBenchmark.XxHash64(Shape: LongAscii) 90.31 μs 981.3 ns 90.80 μs -0.5%
StringHasherBenchmark.XxHash3(Shape: LongAscii) 70.29 μs 63.0 ns 70.07 μs +0.3%
StringHasherBenchmark.CityHash64(Shape: LongAscii) 121.82 μs 662.1 ns 124.18 μs -1.9%
StringHasherBenchmark.MetroHash64(Shape: LongAscii) 77.47 μs 2.51 μs 77.52 μs -0.1%
StringHasherBenchmark.SipHash13(Shape: LongAscii) 114.46 μs 99.3 ns 114.58 μs -0.1%
StringHasherBenchmark.SipHash24(Shape: LongAscii) 160.85 μs 712.6 ns 161.02 μs -0.1%
StringHasherBenchmark.HalfSipHash24(Shape: LongAscii) 247.64 μs 340.6 ns 247.47 μs +0.1%
StringHasherBenchmark.HighwayHash64(Shape: LongAscii) 838.56 μs 1.08 μs 846.47 μs -0.9%
StringHasherBenchmark.Bcl_GetHashCode(Shape: NonAscii) 22.89 μs 22.8 ns 22.87 μs +0.1%
StringHasherBenchmark.EqualityComparer_Default(Shape: NonAscii) 22.83 μs 17.5 ns 22.82 μs +0.0%
StringHasherBenchmark.Djb2(Shape: NonAscii) 43.41 μs 42.8 ns 43.42 μs -0.0%
StringHasherBenchmark.Djb2A(Shape: NonAscii) 43.43 μs 69.1 ns 43.39 μs +0.1%
StringHasherBenchmark.Sdbm(Shape: NonAscii) 61.56 μs 39.9 ns 61.56 μs +0.0%
StringHasherBenchmark.Elf(Shape: NonAscii) 99.57 μs 147.8 ns 99.60 μs -0.0%
StringHasherBenchmark.Crc32(Shape: NonAscii) 102.59 μs 82.8 ns 102.60 μs -0.0%
StringHasherBenchmark.Adler32(Shape: NonAscii) 175.45 μs 184.3 ns 175.27 μs +0.1%
StringHasherBenchmark.FnV1(Shape: NonAscii) 47.62 μs 33.0 ns 47.63 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: NonAscii) 50.00 μs 59.8 ns 50.05 μs -0.1%
StringHasherBenchmark.FnV1A(Shape: NonAscii) 21.64 μs 39.8 ns 21.64 μs -0.0%
StringHasherBenchmark.FnV1A_Full(Shape: NonAscii) 45.06 μs 53.4 ns 45.05 μs +0.0%
StringHasherBenchmark.FnV1A_64(Shape: NonAscii) 49.59 μs 76.8 ns 49.60 μs -0.0%
StringHasherBenchmark.JenkinsOaat(Shape: NonAscii) 73.09 μs 59.3 ns 73.10 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: NonAscii) 27.32 μs 138.2 ns 27.26 μs +0.2%
StringHasherBenchmark.Murmur3(Shape: NonAscii) 31.79 μs 64.5 ns 31.91 μs -0.4%
StringHasherBenchmark.XxHash32(Shape: NonAscii) 23.89 μs 12.1 ns 23.91 μs -0.1%
StringHasherBenchmark.XxHash64(Shape: NonAscii) 29.12 μs 31.2 ns 29.12 μs +0.0%
StringHasherBenchmark.XxHash3(Shape: NonAscii) 22.87 μs 29.0 ns 22.87 μs -0.0%
StringHasherBenchmark.CityHash64(Shape: NonAscii) 22.04 μs 33.5 ns 22.02 μs +0.1%
StringHasherBenchmark.MetroHash64(Shape: NonAscii) 25.66 μs 57.7 ns 25.62 μs +0.2%
StringHasherBenchmark.SipHash13(Shape: NonAscii) 36.93 μs 117.0 ns 36.96 μs -0.1%
StringHasherBenchmark.SipHash24(Shape: NonAscii) 51.41 μs 582.1 ns 51.45 μs -0.1%
StringHasherBenchmark.HalfSipHash24(Shape: NonAscii) 73.05 μs 615.5 ns 73.01 μs +0.0%
StringHasherBenchmark.HighwayHash64(Shape: NonAscii) 511.21 μs 1.18 μs 516.08 μs -0.9%
IntegerHasherBenchmark.Guid_Bcl 1.16 μs 7.4 ns 1.16 μs -0.5%
IntegerHasherBenchmark.Guid_EqualityComparer 2.73 μs 1.2 ns 2.70 μs +1.2%
IntegerHasherBenchmark.Guid_Celerity 7.06 μs 4.4 ns 7.05 μs +0.1%
IntegerHasherBenchmark.Int32_Bcl 598.1 ns 0.6 ns 597.9 ns +0.0%
IntegerHasherBenchmark.Int32_EqualityComparer 588.5 ns 0.4 ns 588.6 ns -0.0%
IntegerHasherBenchmark.Int32_Identity 590.8 ns 1.1 ns 590.3 ns +0.1%
IntegerHasherBenchmark.Int32_WangNaive 1.10 μs 0.7 ns 1.10 μs -0.0%
IntegerHasherBenchmark.Int32_Wang 2.64 μs 0.8 ns 2.64 μs -0.0%
IntegerHasherBenchmark.Int32_Murmur3 2.37 μs 0.9 ns 2.37 μs +0.0%
IntegerHasherBenchmark.Int64_Bcl 1.21 μs 1.1 ns 1.21 μs +0.0%
IntegerHasherBenchmark.Int64_EqualityComparer 1.10 μs 0.6 ns 1.10 μs -0.1%
IntegerHasherBenchmark.Int64_Identity 594.7 ns 4.7 ns 590.7 ns +0.7%
IntegerHasherBenchmark.Int64_WangNaive 1.63 μs 0.3 ns 1.63 μs -0.0%
IntegerHasherBenchmark.Int64_Wang 3.65 μs 1.4 ns 3.65 μs +0.0%
IntegerHasherBenchmark.Int64_Murmur3 2.08 μs 1.0 ns 2.08 μs +0.0%
IntegerHasherBenchmark.UInt32_Bcl 597.8 ns 0.4 ns 598.0 ns -0.0%
IntegerHasherBenchmark.UInt32_EqualityComparer 588.3 ns 0.2 ns 588.4 ns -0.0%
IntegerHasherBenchmark.UInt32_Default 1.10 μs 0.6 ns 1.10 μs -0.1%
IntegerHasherBenchmark.UInt32_Wang 2.64 μs 1.1 ns 2.64 μs -0.0%
IntegerHasherBenchmark.UInt32_Murmur3 2.37 μs 0.6 ns 2.37 μs +0.0%
IntegerHasherBenchmark.UInt64_Bcl 1.21 μs 0.3 ns 1.21 μs -0.0%
IntegerHasherBenchmark.UInt64_EqualityComparer 1.10 μs 0.6 ns 1.10 μs -0.1%
IntegerHasherBenchmark.UInt64_Default 2.08 μs 1.0 ns 2.08 μs +0.0%
IntegerHasherBenchmark.UInt64_Wang 3.65 μs 2.0 ns 3.64 μs +0.0%
IntegerHasherBenchmark.UInt64_WangNaive 1.63 μs 0.5 ns 1.63 μs +0.0%

Same-runner A/B (sharded 6-way): main (9fd8d26) 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 efad802 into main Jul 23, 2026
15 checks passed
@marius-bughiu
marius-bughiu deleted the chore/code-review/disjointset-default-ctor-doc branch July 24, 2026 22:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automated:code-review PR or issue opened by celerity---code-review sweep

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants