Skip to content

test(aot): cover Trie<TValue> in the Native AOT smoke test - #317

Merged
marius-bughiu merged 2 commits into
mainfrom
test/trie-aot-smoke-coverage
Jul 25, 2026
Merged

test(aot): cover Trie<TValue> in the Native AOT smoke test#317
marius-bughiu merged 2 commits into
mainfrom
test/trie-aot-smoke-coverage

Conversation

@marius-bughiu

Copy link
Copy Markdown
Owner

Trie<TValue> (added in #286, issue #285) was the only collection with no block in src/Celerity.AotSmokeTest/Program.cs — every sibling (Deque, DisjointSet, IndexedPriorityQueue, LruCache, SparseSet, SmallDictionary, FenwickTree, …) has one, so nothing proved the trie's prefix operations survive a Native AOT publish.

grep -c "Trie" src/Celerity.AotSmokeTest/Program.cs returned 0 before this change.

Why the trie is worth pinning here

It is the one collection that walks a key character by character instead of hashing it, and the only one whose surface mixes an allocation-free struct enumerator with compiler-generated iterators (GetByPrefix / GetKeysWithPrefix / Keys / Values). Both traversal shapes now get compiled and executed by the AOT job, not just the struct one.

What the block exercises

  • Bulk-load IEnumerable<KeyValuePair<,>> ctor, the indexer, Add / TryAdd (duplicate leaves the value), TryGetValue, ContainsKey — including the empty string as a valid key held on the root, and an interior node ("ca") that is not a key.
  • ContainsPrefix, and GetByPrefix / GetKeysWithPrefix: ascending ordinal ordering, the O(prefix + matches) contract (it descends to the prefix node and walks only that subtree — asserted behaviourally: "car" yields exactly car, care, cart and a missing prefix yields nothing).
  • TryGetLongestPrefix across all three shapes: an interior match ("cartoon""cart"), an exact match, and the fallback to the stored empty-string key.
  • Remove(key, out value) with the bottom-up prune, verifying siblings and the shorter prefix survive, plus the absent-key return.
  • Ordered enumeration through the struct enumerator (ascending ordinal), the boxed IEnumerable<KeyValuePair<,>> path, and IReadOnlyDictionary<string, TValue?> conformance (interface indexer — implemented explicitly, so only reachable through the interface — ContainsKey, TryGetValue, Keys, Values).
  • A second, reference-type TValue instantiation (Trie<string>) built to 500 keys, so the AOT publish compiles another generic instantiation plus the child-array growth path, then Clear.

Verification

DOTNET_ROLL_FORWARD=Major dotnet run --project src/Celerity.AotSmokeTest/Celerity.AotSmokeTest.csproj -f net8.0 -c Release
Celerity AOT smoke test: all checks passed.

(exit code 0; the CI AOT job runs the same program after a PublishAot=true publish.)

Test-only hardening — no public API change, no production code touched. The CHANGELOG gets a single bullet, matching the precedent set by the differential-fuzz-targets entry; there is no open issue for this gap, so the entry carries no Closes link.

🤖 Generated with Claude Code

Trie was the only collection with no block in the AOT smoke test, so nothing
proved its prefix operations survive a Native AOT publish. It is also the one
collection whose surface mixes an allocation-free struct enumerator with
compiler-generated iterators (GetByPrefix / GetKeysWithPrefix / Keys / Values),
so both traversal shapes now get compiled and executed.

The block exercises the indexer / Add / TryAdd / TryGetValue, the empty-string
key on the root, GetByPrefix ordering and its subtree-only walk,
GetKeysWithPrefix, ContainsPrefix, TryGetLongestPrefix (interior / exact /
empty-key fallback), Remove with bottom-up pruning, ordered enumeration, and
the IReadOnlyDictionary<string, TValue?> surface, plus a reference-type
TValue instantiation at scale and Clear.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 25, 2026 19:52
@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown

Coverage

Metric Value
Line 98.55% (7011/7114)
Branch 97.06% (2943/3032)
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/FenwickTree.cs 96.12% 94.74%
src/Celerity/Collections/IndexedPriorityQueue.cs 96.23% 90.91%

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

Adds Native AOT smoke-test coverage for Trie<TValue> so its prefix/iteration APIs are exercised under PublishAot=true, aligning it with the existing AOT checks for other collections.

Changes:

  • Add a Trie<TValue> exercise block to the Native AOT smoke-test program covering construction, lookups, prefix queries, longest-prefix match, removal/pruning, and enumeration.
  • Add a CHANGELOG entry noting the new AOT smoke-test coverage for Trie<TValue>.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
src/Celerity.AotSmokeTest/Program.cs Adds a new smoke-test block that executes Trie<TValue> APIs to ensure they run under Native AOT publish.
CHANGELOG.md Adds an [Unreleased] bullet documenting the new AOT smoke-test coverage for the trie.

Comment thread CHANGELOG.md Outdated
…e change

The bullet carried implementation detail (struct enumerator vs compiler-
generated iterators) that CLAUDE.md keeps out of the changelog. The rationale
lives in the PR body; the entry now states only what changed and that it is
test-only.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 25, 2026 21:24

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

Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

CHANGELOG.md:9

  • The changelog bullet says the trie's surface is "proven" to run under Native AOT. A smoke test exercises representative operations, but it’s not a proof of the entire surface; this wording can read stronger than what the change guarantees. Consider using more precise language like “now exercises” / “now covers” under Native AOT.
- **Native AOT smoke-test coverage for `Trie<TValue>`** — the trie was the one collection the AOT smoke test did not exercise, so its surface is now proven to run under a Native AOT publish. Test-only hardening; no public API change.

@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown

Benchmarks

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

Highlights

Benchmark This PR StdDev main Δ
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 100000) 6.81 ms 89.63 μs 2.87 ms +137.1% ⚠️
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 1000) 4.56 ms 78.04 μs 5.60 ms -18.5% ✅
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 100000) 1.82 s 44.53 ms 2.09 s -12.7% ✅
EnumMapBenchmark.Dictionary_Remove 3.84 μs 549.4 ns 3.19 μs +20.6% ⚠️
HashCachingSetBenchmark.HashSet_Add(ItemCount: 1000) 12.42 μs 27.2 ns 14.17 μs -12.3% ✅
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 2.54 ms 51.91 μs 3.00 ms -15.6% ✅
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 100000) 1.55 s 74.17 ms 1.88 s -17.4% ✅
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 8) 1.37 μs 229.7 ns 996.3 ns +37.8% ⚠️
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 100000) 1.35 ms 45.75 μs 1.67 ms -19.3% ✅
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.70 ms 16.48 μs 1.93 ms -11.8% ✅
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 1000) 6.12 μs 21.9 ns 7.90 μs -22.6% ✅
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 1000) 4.98 μs 6.3 ns 5.56 μs -10.3% ✅
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 100000) 6.62 ms 58.94 μs 2.72 ms +143.7% ⚠️
Collections (420)
Benchmark This PR StdDev main Δ
TrieBenchmark.Dictionary_Add(ItemCount: 1000) 37.90 μs 7.38 μs 32.63 μs +16.1%
TrieBenchmark.Trie_Add(ItemCount: 1000) 565.62 μs 18.40 μs 588.40 μs -3.9%
LongSetBenchmark.HashSet_Add(ItemCount: 1000) 12.91 μs 95.8 ns 13.17 μs -2.0%
LongSetBenchmark.LongSet_Add(ItemCount: 1000) 9.19 μs 198.6 ns 9.07 μs +1.4%
TrieBenchmark.Dictionary_Add(ItemCount: 100000) 5.16 ms 1.66 ms 4.87 ms +6.1%
TrieBenchmark.Trie_Add(ItemCount: 100000) 25.16 ms 404.31 μs 24.71 ms +1.8%
LongSetBenchmark.HashSet_Add(ItemCount: 100000) 4.44 ms 169.33 μs 4.42 ms +0.3%
LongSetBenchmark.LongSet_Add(ItemCount: 100000) 6.02 ms 46.08 μs 6.02 ms +0.0%
LongSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.79 μs 50.8 ns 4.85 μs -1.3%
LongSetBenchmark.LongSet_Contains(ItemCount: 1000) 2.01 μs 10.2 ns 2.00 μs +0.4%
LongSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.63 ms 10.93 μs 1.61 ms +1.1%
LongSetBenchmark.LongSet_Contains(ItemCount: 100000) 637.65 μs 1.25 μs 637.28 μs +0.1%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.64 μs 409.1 ns 14.49 μs +1.1%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 1000) 11.35 μs 258.6 ns 11.18 μs +1.5%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.92 ms 23.28 μs 4.94 ms -0.4%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 100000) 6.74 ms 112.81 μs 6.82 ms -1.1%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.88 μs 23.9 ns 4.89 μs -0.2%
TrieBenchmark.Dictionary_Lookup(ItemCount: 1000) 13.36 μs 514.0 ns 13.29 μs +0.5%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 1000) 2.27 μs 6.5 ns 2.27 μs +0.0%
TrieBenchmark.Trie_Lookup(ItemCount: 1000) 40.15 μs 268.5 ns 40.58 μs -1.1%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.57 ms 2.13 μs 1.58 ms -0.2%
TrieBenchmark.Dictionary_Lookup(ItemCount: 100000) 2.68 ms 5.47 μs 2.68 ms -0.1%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 100000) 689.25 μs 962.3 ns 697.25 μs -1.1%
TrieBenchmark.Trie_Lookup(ItemCount: 100000) 8.57 ms 111.35 μs 8.39 ms +2.1%
TrieBenchmark.Dictionary_PrefixMatch(ItemCount: 1000) 73.61 μs 109.6 ns 73.58 μs +0.0%
TrieBenchmark.Trie_PrefixMatch(ItemCount: 1000) 53.33 μs 614.3 ns 53.16 μs +0.3%
TrieBenchmark.Dictionary_PrefixMatch(ItemCount: 100000) 7.40 ms 10.50 μs 7.40 ms -0.0%
TrieBenchmark.Trie_PrefixMatch(ItemCount: 100000) 6.73 ms 670.18 μs 6.85 ms -1.8%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 82.84 μs 7.56 μs 90.24 μs -8.2%
LongSetBenchmark.HashSet_Remove(ItemCount: 1000) 82.88 μs 4.31 μs 77.16 μs +7.4%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 1000) 88.93 μs 4.87 μs 91.01 μs -2.3%
LongSetBenchmark.LongSet_Remove(ItemCount: 1000) 97.98 μs 9.39 μs 86.81 μs +12.9%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.00 ms 29.46 μs 1.99 ms +0.5%
LongSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.97 ms 12.37 μs 1.96 ms +0.3%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 100000) 6.81 ms 89.63 μs 2.87 ms +137.1% ⚠️
LongSetBenchmark.LongSet_Remove(ItemCount: 100000) 1.50 ms 193.14 μs 1.42 ms +5.8%
SmallSetBenchmark.HashSet_Add(ItemCount: 8) 174.2 ns 1.1 ns 180.4 ns -3.5%
SmallSetBenchmark.SmallSet_Add(ItemCount: 8) 47.5 ns 0.4 ns 48.9 ns -2.9%
SmallSetBenchmark.HashSet_Add(ItemCount: 64) 778.6 ns 5.3 ns 813.4 ns -4.3%
SmallSetBenchmark.SmallSet_Add(ItemCount: 64) 1.97 μs 293.6 ns 1.95 μs +0.9%
SwissSetBenchmark.HashSet_Add(ItemCount: 1000) 13.70 μs 125.1 ns 13.73 μs -0.3%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 1000) 13.74 μs 50.9 ns 13.73 μs +0.1%
SwissSetBenchmark.SwissSet_Add(ItemCount: 1000) 27.14 μs 17.8 ns 27.18 μs -0.2%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 1000) 83.32 μs 526.8 ns 82.20 μs +1.4%
SwissSetBenchmark.HashSet_Add(ItemCount: 100000) 4.95 ms 148.41 μs 4.91 ms +0.8%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 100000) 3.37 ms 113.73 μs 3.35 ms +0.6%
SwissSetBenchmark.SwissSet_Add(ItemCount: 100000) 4.63 ms 22.65 μs 4.68 ms -0.9%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 100000) 13.71 ms 26.99 μs 13.72 ms -0.0%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 1000) 164.08 μs 444.7 ns 167.52 μs -2.1%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 1000) 4.56 ms 78.04 μs 5.60 ms -18.5% ✅
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 100000) 29.57 ms 464.36 μs 30.60 ms -3.4%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 100000) 1.82 s 44.53 ms 2.09 s -12.7% ✅
SmallSetBenchmark.HashSet_Contains(ItemCount: 8) 37.2 ns 0.0 ns 37.3 ns -0.2%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 8) 19.1 ns 0.2 ns 19.1 ns +0.4%
SmallSetBenchmark.HashSet_Contains(ItemCount: 64) 300.1 ns 0.7 ns 299.7 ns +0.1%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 64) 1.10 μs 9.8 ns 1.09 μs +1.1%
SwissSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 5.1 ns 4.73 μs -0.1%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 1000) 2.77 μs 2.7 ns 2.77 μs -0.1%
SwissSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.64 ms 72.87 μs 1.58 ms +4.0%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 100000) 624.19 μs 27.09 μs 664.26 μs -6.0%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 5.0 ns 4.55 μs -0.1%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 1000) 2.37 μs 4.1 ns 2.37 μs -0.0%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.95 ms 21.81 μs 1.98 ms -1.4%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 100000) 361.53 μs 4.89 μs 363.64 μs -0.6%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.27 μs 99.3 ns 14.73 μs -3.1%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 1000) 31.69 μs 1.16 μs 31.83 μs -0.4%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 1000) 12.50 μs 38.1 ns 12.38 μs +1.0%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 1000) 39.48 μs 301.0 ns 40.25 μs -1.9%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.30 ms 108.14 μs 4.32 ms -0.4%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 100000) 12.92 ms 241.63 μs 13.11 ms -1.5%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 100000) 4.87 ms 24.88 μs 4.88 ms -0.2%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 100000) 17.55 ms 120.61 μs 17.63 ms -0.5%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.73 μs 9.8 ns 4.71 μs +0.5%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.99 μs 69.1 ns 5.16 μs -3.4%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 1000) 7.33 μs 11.0 ns 7.33 μs -0.0%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 2.16 μs 4.6 ns 2.15 μs +0.2%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 1000) 2.26 μs 4.7 ns 2.28 μs -0.7%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 1000) 88.63 μs 2.93 μs 87.42 μs +1.4%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.62 ms 5.63 μs 1.58 ms +2.7%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.77 ms 10.41 μs 1.78 ms -0.9%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 100000) 2.02 ms 20.33 μs 2.05 ms -1.5%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 857.40 μs 153.73 μs 702.55 μs +22.0%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 100000) 729.21 μs 2.74 μs 745.07 μs -2.1%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 100000) 7.50 ms 53.30 μs 7.62 ms -1.6%
SmallSetBenchmark.HashSet_Remove(ItemCount: 8) 451.6 ns 250.9 ns 445.8 ns +1.3%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 8) 1.18 μs 67.3 ns 1.42 μs -16.9%
SmallSetBenchmark.HashSet_Remove(ItemCount: 64) 1.44 μs 245.0 ns 1.39 μs +3.8%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 64) 26.28 μs 4.23 μs 28.04 μs -6.3%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 82.82 μs 8.17 μs 90.03 μs -8.0%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 1000) 33.50 μs 5.82 μs 34.60 μs -3.2%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 1000) 143.37 μs 8.52 μs 152.15 μs -5.8%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 1000) 139.86 μs 7.91 μs 151.44 μs -7.7%
SwissSetBenchmark.HashSet_Remove(ItemCount: 1000) 29.66 μs 4.87 μs 30.26 μs -2.0%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 1000) 70.37 μs 6.78 μs 74.25 μs -5.2%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.10 ms 28.03 μs 2.12 ms -1.0%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 2.88 ms 227.58 μs 3.40 ms -15.3%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 100000) 1.62 ms 58.56 μs 1.65 ms -1.4%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 2.42 ms 120.83 μs 2.55 ms -5.2%
SwissSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.75 ms 26.40 μs 1.76 ms -0.8%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 100000) 1.12 ms 65.36 μs 1.13 ms -0.7%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 1000) 32.2 ns 0.4 ns 32.4 ns -0.4%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 1000) 1.30 μs 7.9 ns 1.31 μs -0.7%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 100000) 32.7 ns 0.3 ns 32.0 ns +2.4%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 100000) 1.25 μs 15.4 ns 1.23 μs +1.9%
EnumMapBenchmark.Dictionary_Add 701.3 ns 13.6 ns 686.5 ns +2.1%
EnumMapBenchmark.EnumMap_Add 162.0 ns 1.9 ns 160.6 ns +0.9%
BloomFilterBenchmark.HashSet_Add(ItemCount: 1000) 14.53 μs 990.4 ns 13.60 μs +6.9%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 1000) 13.77 μs 171.9 ns 13.91 μs -1.0%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 1000) 14.67 μs 176.2 ns 14.51 μs +1.1%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 1000) 18.16 μs 152.7 ns 18.25 μs -0.5%
BloomFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.63 ms 90.82 μs 4.75 ms -2.6%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 100000) 4.63 ms 467.54 μs 4.38 ms +5.8%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 100000) 1.10 ms 5.23 μs 1.11 ms -0.4%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 100000) 6.40 ms 76.78 μs 6.40 ms -0.0%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 26.7 ns 4.74 μs +0.0%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 5.9 ns 4.72 μs +0.1%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 1000) 13.11 μs 10.1 ns 13.12 μs -0.1%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 1000) 2.46 μs 3.3 ns 2.55 μs -3.5%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.60 ms 24.04 μs 1.59 ms +0.8%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.60 ms 12.27 μs 1.60 ms -0.3%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 100000) 870.30 μs 825.8 ns 868.88 μs +0.2%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 100000) 749.13 μs 2.33 μs 748.10 μs +0.1%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 5.9 ns 4.54 μs +0.1%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.45 μs 97.7 ns 4.54 μs -2.0%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 1000) 3.53 μs 10.5 ns 3.53 μs -0.1%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 1000) 2.72 μs 4.8 ns 2.71 μs +0.0%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.95 ms 15.26 μs 1.97 ms -1.3%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.97 ms 11.13 μs 1.96 ms +0.7%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 100000) 1.49 ms 346.4 ns 1.49 ms +0.0%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 100000) 1.19 ms 2.56 μs 1.19 ms -0.1%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 1000) 10.24 μs 127.6 ns 10.31 μs -0.7%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 1000) 6.09 μs 274.4 ns 6.13 μs -0.7%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 100000) 1.50 ms 24.93 μs 1.49 ms +0.6%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 100000) 705.03 μs 4.07 μs 720.19 μs -2.1%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 1000) 153.45 μs 4.14 μs 147.73 μs +3.9%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 1000) 251.65 μs 1.39 μs 252.86 μs -0.5%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 100000) 33.66 ms 567.80 μs 34.56 ms -2.6%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 100000) 54.92 ms 344.93 μs 55.48 ms -1.0%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 1000) 5.15 μs 131.1 ns 5.14 μs +0.2%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 1000) 31.10 μs 878.3 ns 30.34 μs +2.5%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 100000) 1.09 ms 15.52 μs 1.07 ms +1.7%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 100000) 6.26 ms 161.16 μs 6.37 ms -1.8%
EnumMapBenchmark.Dictionary_Enumerate 50.5 ns 0.0 ns 50.6 ns -0.1%
EnumMapBenchmark.EnumMap_Enumerate 39.5 ns 0.2 ns 39.7 ns -0.5%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 17.01 μs 481.9 ns 15.97 μs +6.6%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 1000) 18.85 μs 271.0 ns 18.73 μs +0.6%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.89 ms 89.45 μs 4.86 ms +0.5%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 100000) 8.45 ms 182.15 μs 8.44 ms +0.2%
EnumMapBenchmark.Dictionary_Lookup 118.0 ns 0.4 ns 117.8 ns +0.2%
EnumMapBenchmark.EnumMap_Lookup 64.4 ns 0.4 ns 64.0 ns +0.6%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.68 μs 4.3 ns 4.68 μs -0.0%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.77 μs 23.4 ns 4.77 μs -0.0%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 1000) 1.61 μs 5.1 ns 1.62 μs -0.9%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 1000) 2.63 μs 15.5 ns 2.61 μs +0.8%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 100000) 664.11 μs 14.40 μs 672.14 μs -1.2%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.63 ms 7.54 μs 1.63 ms +0.3%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 100000) 191.88 μs 482.0 ns 190.99 μs +0.5%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 100000) 837.93 μs 4.98 μs 841.12 μs -0.4%
EnumMapBenchmark.Dictionary_Remove 3.84 μs 549.4 ns 3.19 μs +20.6% ⚠️
EnumMapBenchmark.EnumMap_Remove 1.94 μs 462.4 ns 1.96 μs -1.3%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 1000) 51.88 μs 3.45 μs 55.19 μs -6.0%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 82.68 μs 6.69 μs 83.41 μs -0.9%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 1000) 105.28 μs 12.42 μs 94.87 μs +11.0%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 1000) 130.36 μs 4.10 μs 134.65 μs -3.2%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 1000) 28.86 μs 3.43 μs 31.16 μs -7.4%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 1000) 129.21 μs 8.47 μs 127.35 μs +1.5%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 100000) 541.10 μs 15.45 μs 541.37 μs -0.0%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.09 ms 18.05 μs 2.09 ms -0.2%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 100000) 1.49 ms 11.11 μs 1.50 ms -0.5%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 100000) 2.04 ms 260.65 μs 1.97 ms +3.4%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.75 ms 21.50 μs 1.77 ms -1.1%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 100000) 1.53 ms 146.27 μs 1.52 ms +0.8%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 1000) 12.42 μs 27.2 ns 14.17 μs -12.3% ✅
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 1000) 11.01 μs 76.0 ns 12.01 μs -8.3%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 100000) 5.09 ms 38.07 μs 5.13 ms -0.7%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 100000) 5.71 ms 97.29 μs 5.80 ms -1.5%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 1000) 172.31 μs 544.2 ns 182.06 μs -5.4%
XorFilterBenchmark.HashSet_Build(ItemCount: 1000) 8.69 μs 37.5 ns 8.74 μs -0.5%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 2.54 ms 51.91 μs 3.00 ms -15.6% ✅
XorFilterBenchmark.XorFilter_Build(ItemCount: 1000) 45.30 μs 286.5 ns 44.53 μs +1.7%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 100000) 29.69 ms 154.55 μs 31.28 ms -5.1%
XorFilterBenchmark.HashSet_Build(ItemCount: 100000) 2.09 ms 28.48 μs 2.12 ms -1.8%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 100000) 1.55 s 74.17 ms 1.88 s -17.4% ✅
XorFilterBenchmark.XorFilter_Build(ItemCount: 100000) 13.58 ms 110.15 μs 13.67 ms -0.6%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 1000) 7.10 μs 4.3 ns 7.08 μs +0.3%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.75 μs 8.6 ns 4.73 μs +0.4%
XorFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.76 μs 17.0 ns 4.75 μs +0.2%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 1000) 78.93 μs 37.4 ns 78.98 μs -0.1%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 1000) 2.63 μs 10.7 ns 2.64 μs -0.3%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 1000) 7.55 μs 7.6 ns 7.55 μs +0.1%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 100000) 1.79 ms 80.98 μs 1.92 ms -7.2%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.47 ms 45.38 μs 1.52 ms -3.4%
XorFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.51 ms 1.94 μs 1.57 ms -3.8%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 100000) 8.35 ms 154.05 μs 9.06 ms -7.9%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 100000) 739.67 μs 6.34 μs 742.97 μs -0.4%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 100000) 801.48 μs 509.8 ns 801.96 μs -0.1%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.57 μs 11.3 ns 4.57 μs +0.2%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.56 μs 5.0 ns 4.57 μs -0.0%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 1000) 2.79 μs 2.9 ns 2.79 μs +0.1%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 1000) 7.55 μs 3.3 ns 7.55 μs -0.0%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 2.01 ms 6.49 μs 1.98 ms +1.7%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 2.00 ms 6.83 μs 1.97 ms +1.2%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 100000) 1.26 ms 2.34 μs 1.26 ms -0.2%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 100000) 804.66 μs 660.2 ns 805.16 μs -0.1%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 8) 187.5 ns 9.1 ns 192.1 ns -2.4%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 8) 79.1 ns 1.3 ns 79.3 ns -0.3%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 64) 869.9 ns 14.5 ns 885.9 ns -1.8%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 64) 1.04 μs 21.3 ns 1.06 μs -1.7%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.61 μs 94.5 ns 15.37 μs -4.9%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 1000) 30.36 μs 58.9 ns 30.41 μs -0.2%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.03 ms 69.93 μs 5.07 ms -0.8%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 100000) 3.91 ms 24.03 μs 3.99 ms -2.1%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 8) 37.8 ns 0.7 ns 38.5 ns -1.7%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 8) 22.2 ns 0.3 ns 23.1 ns -4.1%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 64) 296.1 ns 0.9 ns 311.5 ns -5.0%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 64) 964.3 ns 11.0 ns 962.7 ns +0.2%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.71 μs 118.6 ns 4.85 μs -2.8%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 1000) 2.94 μs 33.1 ns 3.11 μs -5.5%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 6.54 μs 1.68 ms -4.8%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 100000) 676.15 μs 4.43 μs 680.10 μs -0.6%
FenwickTreeBenchmark.Array_Mixed(ItemCount: 1000) 202.84 μs 141.9 ns 203.03 μs -0.1%
FenwickTreeBenchmark.FenwickTree_Mixed(ItemCount: 1000) 11.41 μs 177.8 ns 11.11 μs +2.7%
FenwickTreeBenchmark.Array_Mixed(ItemCount: 100000) 184.33 ms 683.90 μs 184.34 ms -0.0%
FenwickTreeBenchmark.FenwickTree_Mixed(ItemCount: 100000) 633.17 μs 12.33 μs 631.08 μs +0.3%
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 1000) 249.17 μs 308.1 ns 249.16 μs +0.0%
FenwickTreeBenchmark.FenwickTree_RangeSum(ItemCount: 1000) 6.85 μs 8.1 ns 6.85 μs -0.0%
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 100000) 178.90 ms 808.07 μs 179.15 ms -0.1%
FenwickTreeBenchmark.FenwickTree_RangeSum(ItemCount: 100000) 216.24 μs 8.21 μs 217.31 μs -0.5%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 8) 1.31 μs 202.0 ns 1.28 μs +2.1%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 8) 1.37 μs 229.7 ns 996.3 ns +37.8% ⚠️
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 64) 4.07 μs 98.6 ns 4.50 μs -9.5%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 64) 23.42 μs 3.58 μs 25.08 μs -6.6%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 80.48 μs 8.86 μs 80.44 μs +0.1%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 1000) 75.11 μs 2.48 μs 75.75 μs -0.8%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 1000) 32.16 μs 3.35 μs 28.35 μs +13.4%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 1000) 111.17 μs 7.49 μs 112.31 μs -1.0%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.99 ms 21.07 μs 2.16 ms -7.7%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 100000) 1.35 ms 45.75 μs 1.67 ms -19.3% ✅
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.70 ms 16.48 μs 1.93 ms -11.8% ✅
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 100000) 1.81 ms 182.41 μs 1.85 ms -2.1%
EnumSetBenchmark.HashSet_Add 579.4 ns 4.2 ns 606.6 ns -4.5%
EnumSetBenchmark.EnumSet_Add 85.4 ns 0.5 ns 85.5 ns -0.2%
CeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 12.50 μs 109.7 ns 12.46 μs +0.3%
SparseSetBenchmark.HashSet_Add(ItemCount: 1000) 6.70 μs 35.6 ns 6.63 μs +1.0%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 1000) 9.14 μs 116.5 ns 14.07 μs -35.1%
SparseSetBenchmark.SparseSet_Add(ItemCount: 1000) 6.51 μs 88.6 ns 6.41 μs +1.6%
CeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 5.20 ms 84.46 μs 5.30 ms -1.9%
SparseSetBenchmark.HashSet_Add(ItemCount: 100000) 1.70 ms 34.98 μs 1.71 ms -0.7%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 100000) 3.50 ms 52.81 μs 3.47 ms +0.9%
SparseSetBenchmark.SparseSet_Add(ItemCount: 100000) 1.52 ms 76.23 μs 1.46 ms +4.4%
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 1000) 6.12 μs 21.9 ns 7.90 μs -22.6% ✅
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 1000) 4.98 μs 6.3 ns 5.56 μs -10.3% ✅
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 100000) 1.24 ms 40.70 μs 1.29 ms -4.3%
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 100000) 672.61 μs 1.48 μs 679.40 μs -1.0%
EnumSetBenchmark.HashSet_Contains 170.4 ns 0.2 ns 170.5 ns -0.1%
EnumSetBenchmark.EnumSet_Contains 51.5 ns 0.0 ns 51.4 ns +0.3%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.71 μs 5.9 ns 4.71 μs +0.0%
SparseSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.62 μs 7.3 ns 4.64 μs -0.4%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 1000) 1.91 μs 18.0 ns 1.92 μs -0.1%
SparseSetBenchmark.SparseSet_Contains(ItemCount: 1000) 1.43 μs 1.0 ns 1.43 μs +0.1%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.54 ms 33.12 μs 1.59 ms -3.1%
SparseSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.32 ms 41.46 μs 1.28 ms +2.9%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 100000) 550.63 μs 3.32 μs 553.73 μs -0.6%
SparseSetBenchmark.SparseSet_Contains(ItemCount: 100000) 262.58 μs 699.8 ns 262.48 μs +0.0%
LruCacheBenchmark.Dictionary_Get(ItemCount: 1000) 24.47 μs 342.0 ns 24.37 μs +0.4%
LruCacheBenchmark.LruCache_Get(ItemCount: 1000) 7.37 μs 109.0 ns 7.40 μs -0.4%
LruCacheBenchmark.Dictionary_Get(ItemCount: 100000) 24.69 μs 343.2 ns 25.13 μs -1.7%
LruCacheBenchmark.LruCache_Get(ItemCount: 100000) 7.73 μs 93.1 ns 7.49 μs +3.2%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 1000) 4.59 μs 4.3 ns 4.62 μs -0.7%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 1000) 3.61 μs 1.4 ns 3.62 μs -0.2%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 100000) 536.28 μs 2.37 μs 534.71 μs +0.3%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 100000) 1.55 ms 2.62 μs 1.55 ms +0.1%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.08 μs 38.3 ns 13.12 μs -0.3%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 1000) 10.02 μs 45.4 ns 10.10 μs -0.8%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.00 ms 56.19 μs 5.00 ms +0.0%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 100000) 6.91 ms 380.25 μs 6.96 ms -0.8%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.73 μs 100.4 ns 4.83 μs -2.1%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 1000) 2.85 μs 3.4 ns 2.90 μs -1.7%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.54 ms 55.20 μs 1.61 ms -4.0%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 100000) 1.06 ms 248.17 μs 853.41 μs +24.4%
LruCacheBenchmark.Dictionary_Put(ItemCount: 1000) 88.96 μs 2.24 μs 86.05 μs +3.4%
LruCacheBenchmark.LruCache_Put(ItemCount: 1000) 471.05 μs 18.34 μs 485.75 μs -3.0%
LruCacheBenchmark.Dictionary_Put(ItemCount: 100000) 7.61 ms 48.07 μs 7.17 ms +6.1%
LruCacheBenchmark.LruCache_Put(ItemCount: 100000) 6.44 ms 19.67 μs 6.50 ms -1.0%
EnumSetBenchmark.HashSet_Remove 2.31 μs 150.7 ns 2.87 μs -19.6%
EnumSetBenchmark.EnumSet_Remove 1.03 μs 90.5 ns 1.16 μs -11.3%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 31.09 μs 2.21 μs 29.27 μs +6.2%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 79.62 μs 7.97 μs 76.93 μs +3.5%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 1000) 145.16 μs 3.05 μs 143.94 μs +0.9%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 1000) 108.10 μs 6.93 μs 114.69 μs -5.7%
SparseSetBenchmark.HashSet_Remove(ItemCount: 1000) 26.85 μs 2.97 μs 24.42 μs +9.9%
SparseSetBenchmark.SparseSet_Remove(ItemCount: 1000) 22.52 μs 2.44 μs 22.57 μs -0.2%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.67 ms 12.62 μs 1.68 ms -0.5%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.99 ms 23.03 μs 2.00 ms -0.4%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 100000) 1.41 ms 55.40 μs 1.43 ms -1.4%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 100000) 1.89 ms 32.76 μs 1.91 ms -0.8%
SparseSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.46 ms 14.70 μs 1.48 ms -0.9%
SparseSetBenchmark.SparseSet_Remove(ItemCount: 100000) 647.60 μs 12.56 μs 644.71 μs +0.4%
EnumSetBenchmark.HashSet_Union 403.4 ns 3.0 ns 405.6 ns -0.5%
EnumSetBenchmark.EnumSet_Union 22.5 ns 0.4 ns 23.5 ns -4.6%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 1000) 12.93 μs 145.5 ns 13.44 μs -3.8%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 1000) 13.29 μs 176.5 ns 12.73 μs +4.4%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 13.45 μs 208.8 ns 13.20 μs +1.9%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 1000) 7.34 μs 86.4 ns 7.30 μs +0.5%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 1000) 27.50 μs 76.6 ns 27.47 μs +0.1%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 1000) 8.99 μs 103.1 ns 8.94 μs +0.6%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.73 ms 66.12 μs 4.69 ms +0.8%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 100000) 4.84 ms 54.38 μs 4.89 ms -1.0%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 4.76 ms 157.08 μs 4.83 ms -1.5%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 100000) 2.09 ms 10.50 μs 2.10 ms -0.2%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 100000) 575.57 μs 909.0 ns 575.23 μs +0.1%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 100000) 2.85 ms 24.07 μs 2.89 ms -1.4%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.73 μs 21.5 ns 4.73 μs +0.1%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 5.8 ns 4.75 μs -0.3%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 1000) 4.91 μs 3.4 ns 4.91 μs -0.0%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 1000) 1.93 μs 22.7 ns 1.93 μs +0.1%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.62 ms 57.81 μs 1.58 ms +2.5%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.50 ms 61.86 μs 1.57 ms -4.1%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 100000) 1.75 ms 6.16 μs 1.76 ms -0.4%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 100000) 569.83 μs 931.4 ns 572.35 μs -0.4%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 5.5 ns 4.54 μs -0.0%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 1000) 8.37 μs 5.4 ns 8.37 μs +0.0%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.93 ms 5.79 μs 1.92 ms +0.5%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 100000) 927.82 μs 1.05 μs 929.47 μs -0.2%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 1000) 1.37 μs 0.7 ns 1.37 μs +0.1%
DequeBenchmark.Deque_Enumerate(ItemCount: 1000) 942.0 ns 0.8 ns 941.6 ns +0.0%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 100000) 135.36 μs 153.2 ns 135.37 μs -0.0%
DequeBenchmark.Deque_Enumerate(ItemCount: 100000) 93.79 μs 89.0 ns 93.79 μs +0.0%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 1000) 0.0 ns 0.0 ns 0.0 ns -71.5%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 1000) 23.46 μs 16.4 ns 23.45 μs +0.0%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 100000) 0.0 ns 0.0 ns 0.0 ns -8.8%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 100000) 22.98 μs 6.2 ns 22.97 μs +0.0%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.48 μs 136.0 ns 15.89 μs -8.9%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 1000) 8.38 μs 278.0 ns 8.41 μs -0.3%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.06 ms 95.84 μs 5.08 ms -0.3%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 100000) 2.98 ms 4.21 μs 2.99 ms -0.4%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.71 μs 20.2 ns 4.72 μs -0.3%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 1000) 2.38 μs 25.1 ns 2.37 μs +0.4%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.61 ms 8.10 μs 1.55 ms +3.6%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 100000) 696.99 μs 1.88 μs 725.25 μs -3.9%
DequeBenchmark.LinkedList_PushFront(ItemCount: 1000) 41.50 μs 5.79 μs 42.85 μs -3.1%
DequeBenchmark.Deque_PushFront(ItemCount: 1000) 22.68 μs 4.61 μs 21.97 μs +3.3%
DequeBenchmark.LinkedList_PushFront(ItemCount: 100000) 1.87 ms 59.58 μs 1.84 ms +1.7%
DequeBenchmark.Deque_PushFront(ItemCount: 100000) 649.87 μs 32.88 μs 718.56 μs -9.6%
DequeBenchmark.LinkedList_Queue(ItemCount: 1000) 56.40 μs 6.48 μs 53.95 μs +4.5%
DequeBenchmark.Deque_Queue(ItemCount: 1000) 35.96 μs 4.54 μs 37.78 μs -4.8%
DequeBenchmark.LinkedList_Queue(ItemCount: 100000) 4.30 ms 49.70 μs 4.24 ms +1.5%
DequeBenchmark.Deque_Queue(ItemCount: 100000) 431.26 μs 63.96 μs 483.04 μs -10.7%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 83.76 μs 9.17 μs 87.11 μs -3.9%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 30.66 μs 3.10 μs 33.03 μs -7.2%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 1000) 149.41 μs 5.12 μs 152.94 μs -2.3%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 1000) 143.99 μs 9.02 μs 138.77 μs +3.8%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 1000) 13.43 μs 111.2 ns 13.38 μs +0.4%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 1000) 12.97 μs 29.9 ns 12.92 μs +0.3%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.06 ms 34.77 μs 2.06 ms +0.1%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.72 ms 15.88 μs 1.72 ms -0.2%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 100000) 1.57 ms 20.19 μs 1.63 ms -3.7%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 100000) 1.28 ms 55.54 μs 1.28 ms +0.3%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 100000) 3.88 ms 45.62 μs 3.81 ms +1.9%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 100000) 3.98 ms 9.49 μs 4.00 ms -0.5%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 1000) 10.56 μs 29.6 ns 10.52 μs +0.3%
IntSetBenchmark.HashSet_Add(ItemCount: 1000) 13.08 μs 249.0 ns 12.64 μs +3.5%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 1000) 10.39 μs 135.5 ns 10.24 μs +1.4%
IntSetBenchmark.IntSet_Add(ItemCount: 1000) 9.47 μs 574.4 ns 8.71 μs +8.7%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 100000) 1.43 ms 4.58 μs 1.43 ms -0.1%
IntSetBenchmark.HashSet_Add(ItemCount: 100000) 4.99 ms 138.11 μs 5.03 ms -0.8%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 100000) 929.16 μs 858.4 ns 929.58 μs -0.0%
IntSetBenchmark.IntSet_Add(ItemCount: 100000) 3.18 ms 33.70 μs 3.17 ms +0.3%
BitSetBenchmark.BitArray_And(ItemCount: 1024) 56.7 ns 0.7 ns 54.2 ns +4.5%
BitSetBenchmark.BitSet_And(ItemCount: 1024) 1.25 μs 3.6 ns 1.24 μs +0.2%
BitSetBenchmark.BitArray_And(ItemCount: 1000000) 43.70 μs 512.1 ns 43.68 μs +0.0%
BitSetBenchmark.BitSet_And(ItemCount: 1000000) 4.47 ms 4.40 μs 4.47 ms +0.0%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 1000) 18.92 μs 404.0 ns 18.58 μs +1.8%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 1000) 16.70 μs 194.2 ns 16.76 μs -0.4%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 100000) 4.31 ms 122.34 μs 4.40 ms -2.1%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 100000) 3.10 ms 34.94 μs 3.17 ms -2.3%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 1000) 9.42 μs 260.8 ns 9.74 μs -3.2%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 1000) 12.12 μs 35.9 ns 12.20 μs -0.7%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 100000) 260.18 μs 6.75 μs 255.08 μs +2.0%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 100000) 318.45 μs 13.83 μs 342.20 μs -6.9%
IntSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.73 μs 5.2 ns 4.73 μs -0.0%
IntSetBenchmark.IntSet_Contains(ItemCount: 1000) 1.80 μs 9.8 ns 1.80 μs -0.0%
IntSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.56 ms 2.85 μs 1.55 ms +1.0%
IntSetBenchmark.IntSet_Contains(ItemCount: 100000) 573.20 μs 1.80 μs 572.21 μs +0.2%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 1000) 4.37 μs 1.8 ns 4.37 μs -0.0%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 1000) 10.06 μs 14.4 ns 10.07 μs -0.2%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 100000) 490.30 μs 1.05 μs 489.64 μs +0.1%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 100000) 2.01 ms 38.76 μs 2.04 ms -1.8%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.78 μs 216.6 ns 13.53 μs +1.9%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 1000) 11.64 μs 212.1 ns 11.64 μs +0.0%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.18 ms 99.75 μs 4.12 ms +1.4%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 100000) 4.87 ms 52.37 μs 4.81 ms +1.1%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.84 μs 127.7 ns 4.73 μs +2.4%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 1000) 2.14 μs 5.3 ns 2.14 μs +0.1%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.59 ms 5.08 μs 1.58 ms +0.6%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 100000) 683.00 μs 3.93 μs 667.86 μs +2.3%
BitSetBenchmark.BitArray_Or(ItemCount: 1024) 52.9 ns 0.4 ns 55.1 ns -4.0%
BitSetBenchmark.BitSet_Or(ItemCount: 1024) 1.24 μs 5.0 ns 1.24 μs -0.2%
BitSetBenchmark.BitArray_Or(ItemCount: 1000000) 43.86 μs 505.7 ns 43.80 μs +0.1%
BitSetBenchmark.BitSet_Or(ItemCount: 1000000) 4.47 ms 3.38 μs 4.47 ms -0.0%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1024) 1.24 μs 2.5 ns 1.24 μs +0.1%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1024) 7.0 ns 0.0 ns 7.1 ns -0.3%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1000000) 4.82 ms 3.76 μs 4.83 ms -0.1%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1000000) 4.94 μs 9.1 ns 4.93 μs +0.1%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 87.40 μs 8.12 μs 80.81 μs +8.2%
IntSetBenchmark.HashSet_Remove(ItemCount: 1000) 29.99 μs 4.68 μs 28.40 μs +5.6%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 1000) 91.40 μs 6.05 μs 95.42 μs -4.2%
IntSetBenchmark.IntSet_Remove(ItemCount: 1000) 85.19 μs 9.54 μs 88.97 μs -4.2%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.04 ms 8.39 μs 2.05 ms -0.4%
IntSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.72 ms 15.29 μs 1.70 ms +1.2%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 100000) 6.62 ms 58.94 μs 2.72 ms +143.7% ⚠️
IntSetBenchmark.IntSet_Remove(ItemCount: 100000) 1.33 ms 15.15 μs 1.32 ms +0.8%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 1000) 98.56 μs 1.23 μs 98.48 μs +0.1%
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 1000) 26.73 μs 290.8 ns 27.10 μs -1.4%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 100000) 45.13 ms 2.03 ms 42.91 ms +5.2%
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 100000) 8.18 ms 52.82 μs 8.19 ms -0.1%
BitSetBenchmark.BitArray_Xor(ItemCount: 1024) 56.8 ns 0.8 ns 53.1 ns +6.9%
BitSetBenchmark.BitSet_Xor(ItemCount: 1024) 1.25 μs 4.6 ns 1.24 μs +0.7%
BitSetBenchmark.BitArray_Xor(ItemCount: 1000000) 43.95 μs 653.7 ns 44.02 μs -0.2%
BitSetBenchmark.BitSet_Xor(ItemCount: 1000000) 4.48 ms 1.98 μs 4.47 ms +0.1%
Hashers (100)
Benchmark This PR StdDev main Δ
StringHasherBenchmark.Bcl_GetHashCode(Shape: ShortAscii) 15.40 μs 15.3 ns 15.38 μs +0.1%
StringHasherBenchmark.EqualityComparer_Default(Shape: ShortAscii) 15.37 μs 25.6 ns 15.38 μs -0.1%
StringHasherBenchmark.Djb2(Shape: ShortAscii) 22.01 μs 16.7 ns 22.03 μs -0.1%
StringHasherBenchmark.Djb2A(Shape: ShortAscii) 22.02 μs 28.4 ns 22.04 μs -0.1%
StringHasherBenchmark.Sdbm(Shape: ShortAscii) 32.83 μs 27.3 ns 32.82 μs +0.0%
StringHasherBenchmark.Elf(Shape: ShortAscii) 43.89 μs 224.3 ns 43.96 μs -0.2%
StringHasherBenchmark.Crc32(Shape: ShortAscii) 49.92 μs 73.0 ns 49.90 μs +0.0%
StringHasherBenchmark.Adler32(Shape: ShortAscii) 96.20 μs 84.5 ns 96.23 μs -0.0%
StringHasherBenchmark.FnV1(Shape: ShortAscii) 25.35 μs 18.3 ns 25.34 μs +0.0%
StringHasherBenchmark.FnV1_64(Shape: ShortAscii) 25.48 μs 34.9 ns 25.47 μs +0.0%
StringHasherBenchmark.FnV1A(Shape: ShortAscii) 10.64 μs 28.3 ns 10.68 μs -0.4%
StringHasherBenchmark.FnV1A_Full(Shape: ShortAscii) 22.85 μs 31.2 ns 22.85 μs -0.0%
StringHasherBenchmark.FnV1A_64(Shape: ShortAscii) 25.72 μs 36.2 ns 25.70 μs +0.1%
StringHasherBenchmark.JenkinsOaat(Shape: ShortAscii) 39.28 μs 28.6 ns 39.28 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: ShortAscii) 15.17 μs 36.0 ns 15.23 μs -0.4%
StringHasherBenchmark.Murmur3(Shape: ShortAscii) 17.42 μs 119.0 ns 17.31 μs +0.6%
StringHasherBenchmark.XxHash32(Shape: ShortAscii) 16.91 μs 11.2 ns 16.90 μs +0.0%
StringHasherBenchmark.XxHash64(Shape: ShortAscii) 18.12 μs 24.1 ns 18.03 μs +0.5%
StringHasherBenchmark.XxHash3(Shape: ShortAscii) 14.88 μs 69.3 ns 14.84 μs +0.2%
StringHasherBenchmark.CityHash64(Shape: ShortAscii) 15.22 μs 5.6 ns 15.22 μs +0.1%
StringHasherBenchmark.MetroHash64(Shape: ShortAscii) 15.00 μs 10.4 ns 15.01 μs -0.1%
StringHasherBenchmark.SipHash13(Shape: ShortAscii) 27.37 μs 38.4 ns 27.38 μs -0.0%
StringHasherBenchmark.SipHash24(Shape: ShortAscii) 38.48 μs 21.7 ns 38.48 μs -0.0%
StringHasherBenchmark.HalfSipHash24(Shape: ShortAscii) 50.01 μs 65.7 ns 50.04 μs -0.1%
StringHasherBenchmark.HighwayHash64(Shape: ShortAscii) 480.34 μs 779.1 ns 479.07 μs +0.3%
StringHasherBenchmark.Bcl_GetHashCode(Shape: LongAscii) 96.96 μs 56.6 ns 96.91 μs +0.1%
StringHasherBenchmark.EqualityComparer_Default(Shape: LongAscii) 96.61 μs 98.4 ns 96.54 μs +0.1%
StringHasherBenchmark.Djb2(Shape: LongAscii) 229.33 μs 77.5 ns 229.30 μs +0.0%
StringHasherBenchmark.Djb2A(Shape: LongAscii) 229.31 μs 104.5 ns 229.31 μs +0.0%
StringHasherBenchmark.Sdbm(Shape: LongAscii) 308.03 μs 95.9 ns 308.08 μs -0.0%
StringHasherBenchmark.Elf(Shape: LongAscii) 577.84 μs 503.7 ns 577.35 μs +0.1%
StringHasherBenchmark.Crc32(Shape: LongAscii) 590.43 μs 344.2 ns 589.46 μs +0.2%
StringHasherBenchmark.Adler32(Shape: LongAscii) 789.25 μs 1.14 μs 789.07 μs +0.0%
StringHasherBenchmark.FnV1(Shape: LongAscii) 289.41 μs 68.1 ns 289.64 μs -0.1%
StringHasherBenchmark.FnV1_64(Shape: LongAscii) 284.44 μs 155.6 ns 284.60 μs -0.1%
StringHasherBenchmark.FnV1A(Shape: LongAscii) 122.35 μs 118.2 ns 122.42 μs -0.1%
StringHasherBenchmark.FnV1A_Full(Shape: LongAscii) 281.70 μs 130.1 ns 281.71 μs -0.0%
StringHasherBenchmark.FnV1A_64(Shape: LongAscii) 286.85 μs 143.3 ns 286.93 μs -0.0%
StringHasherBenchmark.JenkinsOaat(Shape: LongAscii) 378.59 μs 144.7 ns 379.26 μs -0.2%
StringHasherBenchmark.Murmur2(Shape: LongAscii) 101.98 μs 83.8 ns 101.95 μs +0.0%
StringHasherBenchmark.Murmur3(Shape: LongAscii) 112.97 μs 62.4 ns 113.12 μs -0.1%
StringHasherBenchmark.XxHash32(Shape: LongAscii) 73.22 μs 46.8 ns 73.23 μs -0.0%
StringHasherBenchmark.XxHash64(Shape: LongAscii) 90.69 μs 1.00 μs 91.31 μs -0.7%
StringHasherBenchmark.XxHash3(Shape: LongAscii) 70.02 μs 186.4 ns 70.22 μs -0.3%
StringHasherBenchmark.CityHash64(Shape: LongAscii) 123.18 μs 1.30 μs 122.69 μs +0.4%
StringHasherBenchmark.MetroHash64(Shape: LongAscii) 78.11 μs 2.53 μs 78.37 μs -0.3%
StringHasherBenchmark.SipHash13(Shape: LongAscii) 114.73 μs 189.4 ns 114.60 μs +0.1%
StringHasherBenchmark.SipHash24(Shape: LongAscii) 160.94 μs 502.1 ns 161.32 μs -0.2%
StringHasherBenchmark.HalfSipHash24(Shape: LongAscii) 247.53 μs 210.7 ns 247.52 μs +0.0%
StringHasherBenchmark.HighwayHash64(Shape: LongAscii) 830.18 μs 10.89 μs 831.79 μs -0.2%
StringHasherBenchmark.Bcl_GetHashCode(Shape: NonAscii) 22.88 μs 10.3 ns 22.90 μs -0.1%
StringHasherBenchmark.EqualityComparer_Default(Shape: NonAscii) 22.84 μs 15.9 ns 22.85 μs -0.1%
StringHasherBenchmark.Djb2(Shape: NonAscii) 43.43 μs 47.6 ns 43.40 μs +0.1%
StringHasherBenchmark.Djb2A(Shape: NonAscii) 43.41 μs 34.9 ns 43.48 μs -0.2%
StringHasherBenchmark.Sdbm(Shape: NonAscii) 61.64 μs 90.9 ns 61.59 μs +0.1%
StringHasherBenchmark.Elf(Shape: NonAscii) 99.69 μs 227.1 ns 99.68 μs +0.0%
StringHasherBenchmark.Crc32(Shape: NonAscii) 102.65 μs 59.8 ns 102.65 μs +0.0%
StringHasherBenchmark.Adler32(Shape: NonAscii) 175.57 μs 162.6 ns 175.37 μs +0.1%
StringHasherBenchmark.FnV1(Shape: NonAscii) 47.63 μs 27.3 ns 47.61 μs +0.0%
StringHasherBenchmark.FnV1_64(Shape: NonAscii) 50.01 μs 43.5 ns 50.02 μs -0.0%
StringHasherBenchmark.FnV1A(Shape: NonAscii) 21.64 μs 39.7 ns 21.71 μs -0.3%
StringHasherBenchmark.FnV1A_Full(Shape: NonAscii) 45.09 μs 57.1 ns 45.07 μs +0.0%
StringHasherBenchmark.FnV1A_64(Shape: NonAscii) 49.64 μs 51.4 ns 49.61 μs +0.1%
StringHasherBenchmark.JenkinsOaat(Shape: NonAscii) 73.16 μs 47.6 ns 73.15 μs +0.0%
StringHasherBenchmark.Murmur2(Shape: NonAscii) 27.25 μs 159.0 ns 27.30 μs -0.2%
StringHasherBenchmark.Murmur3(Shape: NonAscii) 31.87 μs 100.8 ns 31.93 μs -0.2%
StringHasherBenchmark.XxHash32(Shape: NonAscii) 23.92 μs 18.1 ns 23.91 μs +0.0%
StringHasherBenchmark.XxHash64(Shape: NonAscii) 29.13 μs 19.8 ns 29.15 μs -0.1%
StringHasherBenchmark.XxHash3(Shape: NonAscii) 22.88 μs 21.6 ns 23.13 μs -1.1%
StringHasherBenchmark.CityHash64(Shape: NonAscii) 22.05 μs 28.5 ns 22.06 μs -0.0%
StringHasherBenchmark.MetroHash64(Shape: NonAscii) 25.63 μs 19.6 ns 25.63 μs +0.0%
StringHasherBenchmark.SipHash13(Shape: NonAscii) 36.95 μs 125.0 ns 36.95 μs -0.0%
StringHasherBenchmark.SipHash24(Shape: NonAscii) 51.75 μs 686.5 ns 51.43 μs +0.6%
StringHasherBenchmark.HalfSipHash24(Shape: NonAscii) 73.18 μs 447.9 ns 73.16 μs +0.0%
StringHasherBenchmark.HighwayHash64(Shape: NonAscii) 516.27 μs 1.93 μs 513.64 μs +0.5%
IntegerHasherBenchmark.Guid_Bcl 1.27 μs 2.5 ns 1.27 μs +0.2%
IntegerHasherBenchmark.Guid_EqualityComparer 3.27 μs 223.6 ns 3.47 μs -5.8%
IntegerHasherBenchmark.Guid_Celerity 8.03 μs 6.8 ns 8.03 μs +0.0%
IntegerHasherBenchmark.Int32_Bcl 686.2 ns 2.0 ns 685.2 ns +0.1%
IntegerHasherBenchmark.Int32_EqualityComparer 698.7 ns 0.6 ns 698.8 ns -0.0%
IntegerHasherBenchmark.Int32_Identity 669.8 ns 14.2 ns 683.6 ns -2.0%
IntegerHasherBenchmark.Int32_WangNaive 1.25 μs 0.6 ns 1.25 μs +0.0%
IntegerHasherBenchmark.Int32_Wang 3.02 μs 0.7 ns 3.02 μs -0.1%
IntegerHasherBenchmark.Int32_Murmur3 2.64 μs 1.5 ns 2.64 μs -0.0%
IntegerHasherBenchmark.Int64_Bcl 1.27 μs 1.2 ns 1.27 μs +0.1%
IntegerHasherBenchmark.Int64_EqualityComparer 1.25 μs 0.9 ns 1.25 μs +0.1%
IntegerHasherBenchmark.Int64_Identity 683.2 ns 0.5 ns 677.8 ns +0.8%
IntegerHasherBenchmark.Int64_WangNaive 1.87 μs 4.9 ns 1.87 μs +0.1%
IntegerHasherBenchmark.Int64_Wang 4.16 μs 4.1 ns 4.16 μs +0.0%
IntegerHasherBenchmark.Int64_Murmur3 2.37 μs 1.9 ns 2.37 μs +0.1%
IntegerHasherBenchmark.UInt32_Bcl 685.2 ns 0.8 ns 686.1 ns -0.1%
IntegerHasherBenchmark.UInt32_EqualityComparer 698.7 ns 1.1 ns 698.9 ns -0.0%
IntegerHasherBenchmark.UInt32_Default 1.25 μs 0.5 ns 1.25 μs -0.0%
IntegerHasherBenchmark.UInt32_Wang 3.02 μs 2.3 ns 3.03 μs -0.1%
IntegerHasherBenchmark.UInt32_Murmur3 2.64 μs 1.0 ns 2.65 μs -0.0%
IntegerHasherBenchmark.UInt64_Bcl 1.27 μs 1.1 ns 1.34 μs -5.3%
IntegerHasherBenchmark.UInt64_EqualityComparer 1.25 μs 0.6 ns 1.25 μs -0.0%
IntegerHasherBenchmark.UInt64_Default 2.37 μs 1.6 ns 2.37 μs -0.0%
IntegerHasherBenchmark.UInt64_Wang 4.16 μs 2.2 ns 4.16 μs -0.0%
IntegerHasherBenchmark.UInt64_WangNaive 1.87 μs 1.0 ns 1.87 μs -0.0%

Same-runner A/B (sharded 8-way): main (c7bddf9) 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 c7bddf9 into main Jul 25, 2026
16 checks passed
@marius-bughiu
marius-bughiu deleted the test/trie-aot-smoke-coverage branch July 25, 2026 22:02
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