Skip to content

test(coverage): gate all six shipping packages at 100% line and branch - #321

Merged
marius-bughiu merged 6 commits into
mainfrom
claude/100-percent-coverage-6896fc
Jul 26, 2026
Merged

test(coverage): gate all six shipping packages at 100% line and branch#321
marius-bughiu merged 6 commits into
mainfrom
claude/100-percent-coverage-6896fc

Conversation

@marius-bughiu

@marius-bughiu marius-bughiu commented Jul 26, 2026

Copy link
Copy Markdown
Owner

What

Takes the suite to 100% line and 100% branch coverage across all six shipping packages, and raises the CI floor to match.

Along the way this fixes #314: coverlet's assembly filter is exact-match, so [Celerity]* compiled to ^Celerity$ and matched only the Celerity.Collections assembly. Since the 2.0.0 package split, Celerity.Hashing, Celerity.Primitives and the three showcase packages had been outside the gate entirely — any of them could have dropped to 0% with CI green.

Line Branch
Before (the one measured assembly) 98.67% 97.20%
Before (all six, once measured) 98.10% 96.75%
After (all six) 100% (9806/9806) 100% (3862/3862)

Tests: 4420 → 5013.

What was uncovered

Nothing exotic, which is the point — it was the code no one writes a test for:

  • EnsureCapacity(-1) / TrimExcess(< Count) argument guards on 16 collection types
  • explicitly-implemented ICollection<T>.Add / IsReadOnly on 8 sets (these delegate to TryAdd, so unlike the public Add they must be silent on a duplicate — that contract was untested)
  • enumerator-invalidation throws on 5 types, and Clear() on empty / on reference-type instantiations
  • both arms of (source as ICollection<T>)?.Count ?? 0 in the set constructors
  • EnumMap / EnumSet byte-, ushort- and ulong-backed enums — only the default int enum had ever been exercised, leaving the Unsafe.SizeOf<TEnum>() conversion arms dead
  • LongDictionary.TrimExcesszero hits, the whole method
  • VarInt short-buffer and malformed-decode paths; the Lemire rejection-sampling retry loops (driven by a scripted IRandomSource); GuidV7Generator.Next()
  • Bloom/HLL/Cuckoo/Xor degenerate sizing; HyperLogLog precision 5 and 6; the CuckooFilter victim slot removal path
  • FenwickTree's oversized-source rejection — reachable for free via an ICollection<T> that lies about Count, because the guard runs before any allocation
  • Trie.Enumerator's exhausted state is sticky — a foreach stops at the first false and never tests it

The six exclusions

Everything reachable got a real test. Six guards are genuinely unreachable and are hoisted into small private helpers carrying [ExcludeFromCodeCoverage(Justification = "…")] that states the proof:

Guard Why
Deque.ClampToArrayMaxLength Needs a >2³⁰-element array. Does get a real [MemoryIntensiveFact(3100)] test that allocates ~3 GiB and asserts growth saturates at Array.MaxLength rather than wrapping negative — excluded so the gate doesn't depend on whether the runner had the headroom to run it.
IndexedPriorityQueue.ClampGrowth Needs 2³⁰ live entries with distinct elements. EnsureCapacity calls Resize directly, so capacity can't be pre-inflated into it; _elements would pass the 2 GiB single-object array limit.
FrozenCelerityDictionary / FrozenCeleritySet count ceilings The count is read after materializing into a List<string>, so 2³⁰ keys needs an 8.6 GB string[]. A source that merely reports a huge ICollection.Count can't reach it — that count is only a capacity hint.
CuckooFilter.AtLeastOne / XorFilter.AtLeastOne Dead by construction: f = ceil(log2(8/p)) with p ∈ (0,1) enforced gives f ≥ 4; blockLength ≥ 10 for any source.
XorFilter.BuildOrThrow / TryBuild The peel seed schedule is independent of the element set, so no hasher can stall all MaxConstructionAttempts seeds — a constant hasher makes peeling easier, since the HashSet collapses every key to one.

These are array-size impossibilities and arithmetic dead code, not "hard to test". Each stays in the source as defence-in-depth against a future change to the surrounding validation.

Notable refactor

XorFilter.TryBuild is split into a retry driver and TryPeel. Only the driver is unreachable — an individual peel attempt genuinely does stall and reseed, and that path stays measured. Without the split, excluding the loop-exhaustion branch would have meant excluding the entire peeling algorithm.

Infrastructure

  • src/coverage.runsettings lists all six assemblies, with a comment explaining the exact-match filter so the next package split can't repeat this silently.
  • coverage.yml installs both SDKs (the showcase test projects are net10.0-only) and runs all four test projects.
  • coverage_report.py takes a repeatable --input and merges reports on (source file, line number) — necessary because the showcase projects also exercise Celerity.Collections transitively, so a line covered by any run counts as covered.
  • Floor: 95/90 → 100/100. Deliberately a hair-trigger: new code arrives with its tests, or the gate goes red. An unreachable branch gets an exclusion with a justification, not a lowered floor.
  • CONTRIBUTING.md and CLAUDE.md advertised the gate as library-wide, which wasn't true; docs/testing.md documented the narrowed scope without flagging it as a gap. All three corrected, plus a new-package checklist item.

Merged with v2.4.0

BTreeDictionary/BTreeSet (#305) and IHashProvider64<T> (#318) landed while this was open, which dropped the merged result to 99.95% line / 99.82% branch. Five more gaps closed to restore 100%:

  • RemoveFromInternal's descent to the flanking leaf (both trees, both directions). It replaces a deleted internal key with its in-order predecessor or successor, walking down with while (!cursor.IsLeaf). In a two-level tree that child is a leaf, so the loop body never ran. MinDegree == 16 means a third level needs ~1000 entries, so the new tests build 5000 and delete every one against a SortedSet/SortedDictionary oracle — a descent stopping one level early would promote the wrong key while leaving the right count, so the reconciliation is order-sensitive.
  • SeekLowerBound's while (node is not null) — only fails on a null root, i.e. EnumerateRange over an empty tree.
  • ICollection<KVP>.Contains matches on key and value; only the fully-matching case was exercised. (Worth noting for future tests: Assert.Contains(pair, collection) walks the enumerator and never calls the method under test — the results have to be bound to locals first.)
  • Hash64Source's IsNative64 ? … : nullNative is read only by Hash64, which callers invoke only when IsNative64 is true, so a 32-bit-only THasher never triggers the initializer and the false arm is unobservable. Hoisted into CreateNative() with the exclusion and the reasoning.

Verification

Verified in the exact CI configuration (core on net8.0, showcase on net10.0, merged): 5013 tests pass, gate exits 0 at 100/100. Also verified on net10.0 throughout. The Deque memory test ran (not skipped) on a 64 GB dev box.

One caveat worth stating: the four reports merge by source-file path, and SourceLink derives that path from the build's git state. CI builds all four in one job at one commit so the paths agree, but mixing reports across commits locally double-counts every file — docs/testing.md now says to clear stale results first.

Closes #314

🤖 Generated with Claude Code

Coverlet's assembly filter is exact-match, so `[Celerity]*` compiled to
^Celerity$ and matched only the Celerity.Collections assembly. Since the
2.0.0 package split, Celerity.Hashing, Celerity.Primitives and the three
showcase packages were outside the gate entirely — any of them could have
dropped to 0% with CI green.

Widen the filter to all six, run the three showcase test projects into the
same report, and backfill everything the wider scope exposed. Coverage goes
from 98.67% line / 97.20% branch (on the one measured assembly) to
100% / 100% across all six: 8902/8902 lines and 3514/3514 branches. The
floor is raised from 95/90 to 100/100 to match.

Six guards no test can reach are hoisted into small private helpers carrying
[ExcludeFromCodeCoverage] with a justification that states the proof:

  - Deque / IndexedPriorityQueue growth clamps    2^30-element arrays
  - Frozen{Dictionary,Set} count ceilings         2^30 materialized keys
  - Cuckoo/Xor sizing floors                      dead given the ctor's own
                                                  argument validation
  - XorFilter peel-retry exhaustion               the seed schedule is
                                                  key-independent, so no
                                                  hasher can stall it

The Deque clamp additionally gets a real [MemoryIntensiveFact(3100)] test
that allocates ~3 GiB to prove it saturates rather than wrapping negative;
it is excluded so the gate does not depend on the runner's headroom.

XorFilter.TryBuild is split into a retry driver and TryPeel. Only the driver
is unreachable — an individual peel attempt does stall and reseed in
practice, and that path stays measured.

coverage_report.py now accepts a repeatable --input and merges reports on
(source file, line number), since four test projects contribute and the
showcase projects also exercise Celerity.Collections transitively.

Closes #314

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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR expands and hardens the repository’s coverage infrastructure so CI enforces 100% line and 100% branch coverage across all six shipping packages, fixing the prior gap where most shipped assemblies were silently unmeasured due to coverlet’s exact-match assembly filter behavior. It also backfills missing edge-case tests and introduces a Cobertura-merge flow so multiple test projects contribute to one unified gate and report.

Changes:

  • Widen coverage scope to all six shipping assemblies and raise the CI floor to 100/100, including merging multiple Cobertura inputs into a single report.
  • Add extensive boundary/contract tests to close previously uncovered branches across collections, primitives, and showcase packages.
  • Refactor a few “unreachable guard” paths into [ExcludeFromCodeCoverage(Justification=...)] helpers to keep the 100% gate meaningful without lowering thresholds.

Reviewed changes

Copilot reviewed 29 out of 29 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
src/coverage.runsettings Updates coverlet include/exclude settings to target all shipping assemblies and document filter behavior.
src/Celerity/Collections/XorFilter.cs Splits construction into driver/peel attempt helpers and introduces exclusions for provably unreachable guards.
src/Celerity/Collections/IndexedPriorityQueue.cs Factors growth-clamp logic into an excluded helper and keeps growth semantics intact.
src/Celerity/Collections/FrozenCeleritySet.cs Moves an unreachable element-count guard into an excluded helper with justification.
src/Celerity/Collections/FrozenCelerityDictionary.cs Moves an unreachable key-count guard into an excluded helper with justification.
src/Celerity/Collections/Deque.cs Factors Array.MaxLength clamp into an excluded helper and adds related test coverage.
src/Celerity/Collections/CuckooFilter.cs Factors defensive floors into an excluded helper and reuses it for sizing expressions.
src/Celerity.Tests/Utils/VarIntBoundaryCoverageTests.cs Adds tests for VarInt mid-encode exhaustion and signed-wrapper failure arms.
src/Celerity.Tests/Primitives/RandomSourceRejectionSamplingTests.cs Adds deterministic tests for Lemire rejection-sampling retry loops.
src/Celerity.Tests/Primitives/GuidV7GeneratorCoverageTests.cs Adds tests for GuidV7Generator’s wall-clock Next() path and its monotonicity contract.
src/Celerity.Tests/Collections/SketchDegenerateParameterTests.cs Adds tests for probabilistic sketch clamps/saturation corners and formatting.
src/Celerity.Tests/Collections/SetSourceCountBranchTests.cs Tests both sides of the (source as ICollection<T>)?.Count ?? 0 sizing hint branch across sets.
src/Celerity.Tests/Collections/SetExplicitICollectionMemberTests.cs Pins explicit ICollection<T> behavior (silent Add on duplicates, IsReadOnly false).
src/Celerity.Tests/Collections/OversizedSourceAndResidualGuardTests.cs Adds tests for FenwickTree counted-source ceiling and Trie enumerator “sticky exhausted” behavior.
src/Celerity.Tests/Collections/FilterEdgeCaseCoverageTests.cs Adds tests for Cuckoo victim-cache paths and Xor construction reseed behavior.
src/Celerity.Tests/Collections/EnumSetUnderlyingTypeCoverageTests.cs Adds coverage for EnumSet conversion arms across underlying enum widths and bounds.
src/Celerity.Tests/Collections/EnumMapUnderlyingTypeCoverageTests.cs Adds coverage for EnumMap key/index conversions and strongly-typed Keys/Values enumerators.
src/Celerity.Tests/Collections/EnumeratorInvalidationAndClearCoverageTests.cs Adds coverage for Reset() invalidation paths and Clear/TrimExcess early-outs + reference clearing.
src/Celerity.Tests/Collections/DequeGrowthTests.cs Adds memory-intensive test asserting growth saturates at Array.MaxLength.
src/Celerity.Tests/Collections/CapacityArgumentValidationTests.cs Adds comprehensive EnsureCapacity/TrimExcess guard tests and fills LongDictionary.TrimExcess coverage.
src/Celerity.Sentinel.Tests/SentinelCoverageGapTests.cs Adds coverage for Sentinel first-seen filter optional paths, snapshot guards, and formatting.
src/Celerity.Ring.Tests/RingCoverageGapTests.cs Adds coverage for ring/pool corner cases: replicas, wraparound, TryGetNode success paths, last-node removal.
src/Celerity.Cardinality.Tests/CardinalityCoverageGapTests.cs Adds coverage for Cardinality surface metadata, saturation handling, mode transitions, and Clear behavior.
scripts/coverage_report.py Makes --input repeatable and merges multiple Cobertura reports at (file,line) granularity.
docs/testing.md Updates documentation to reflect six-assembly gating and multi-project report merging.
CONTRIBUTING.md Updates contributor guidance to reflect the 100/100 gate and the new-package checklist item.
CLAUDE.md Updates agent guidance to reflect the 100/100 gate and exact-match filter behavior.
CHANGELOG.md Adds an Unreleased “Fixed” entry describing the coverage-gate scope correction.
.github/workflows/coverage.yml Installs required SDKs, runs core + showcase test projects, merges reports, and enforces 100/100.

Comment thread docs/testing.md Outdated
Comment thread src/coverage.runsettings Outdated
Comment thread src/coverage.runsettings
Comment thread .github/workflows/coverage.yml Outdated
Comment thread CHANGELOG.md Outdated
Comment thread src/Celerity.Tests/Primitives/GuidV7GeneratorCoverageTests.cs Outdated
- docs/testing.md said "all three shipping assemblies" in the TL;DR — a
  leftover from before the showcase packages joined the gate.
- coverage.runsettings / coverage.yml headers credited ReportGenerator; the
  repo dropped that dependency in favour of scripts/coverage_report.py.
- The <Include> comment said "one entry each" while the config uses a single
  comma-separated list. Corrected, and documented WHY it must stay that way:
  the collector reads one child node per key, so splitting it into separate
  <Include> elements silently honours only the first. Verified against this
  suite — three separate elements produced a report containing only the
  Celerity package, i.e. exactly the bug #314 was about.
- Trimmed the CHANGELOG entry to the repo's stated convention.
- The GuidV7 wall-clock test assumed a monotonic clock; an NTP step between
  the two straddling readings would invert the range and fail a correct
  generator. Bounds are now ordered.
- Added a note to the local coverage instructions to clear stale results
  first: the four reports merge by source path, SourceLink derives that path
  from the build's git state, and mixing commits double-counts every file.

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

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 29 out of 29 changed files in this pull request and generated 1 comment.

Comment thread scripts/coverage_report.py
… work

BTreeDictionary/BTreeSet (#305) and IHashProvider64 (#318) landed on main
while this was open, taking the merged result to 99.95% line / 99.82%
branch. Backfills the five gaps they left:

- RemoveFromInternal promotes a deleted internal key's in-order predecessor
  or successor by walking down to the flanking leaf. In a two-level tree that
  child IS a leaf, so the descent loop body never ran. With MinDegree 16 a
  third level needs ~1000 entries, so the new tests build 5000 and delete
  every one against a SortedSet/SortedDictionary oracle — a descent that
  stopped a level early would promote the wrong key while still leaving the
  right count, so the reconciliation is order-sensitive.
- SeekLowerBound's `while (node is not null)` only fails on a null root, i.e.
  EnumerateRange over an empty tree.
- ICollection<KVP>.Contains matches on key AND value; only the fully-matching
  case was exercised, leaving the short-circuit arm untaken. Note the results
  are bound to locals first: Assert.Contains(pair, collection) walks the
  enumerator and never calls the method under test.
- Hash64Source's `IsNative64 ? … : null` initializer: Native is read only by
  Hash64, which callers invoke only when IsNative64 is true, so a 32-bit-only
  THasher never triggers it and the false arm is unobservable. Hoisted into
  CreateNative() carrying the exclusion and the reasoning.

Also addresses the second Copilot review: find_inputs' docstring promised an
ordering across all globs that the implementation does not provide (it
preserves pattern order, sorting within each). The order is presentational
only, since parse() merges — docstring corrected to say so.

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

Copy link
Copy Markdown

Coverage

Metric Value
Line 100% (9806/9806)
Branch 100% (3862/3862)

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 31 out of 31 changed files in this pull request and generated 1 comment.

Comment thread src/Celerity.Tests/Primitives/GuidV7GeneratorCoverageTests.cs Outdated
…unds

Ordering the bounds only covered a backward clock step BEFORE Next(). A step
after it can leave the embedded reading above both samples: if the clock
ticks a millisecond between `before` and Next(), then steps back before
`after`, the timestamp exceeds max and a correct generator fails.

A second of slack closes that without weakening what the test is for. It
exists to prove Next() reads the wall clock in the right epoch and unit, and
those failures are not close calls — a .NET-ticks or 1900 epoch is wrong by
decades, seconds-for-milliseconds by a factor of a thousand. Millisecond
exactness here only bought the ability to fail on a clock adjustment.

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

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 31 out of 31 changed files in this pull request and generated 1 comment.

Comment thread docs/testing.md
The table is presented as the complete set of source-level exclusions, but
CreateNative was added during the post-merge backfill and never listed.
Adds the row and states the completeness claim explicitly, with the grep
that checks it.

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

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 31 out of 31 changed files in this pull request and generated no new comments.

@github-actions

github-actions Bot commented Jul 26, 2026

Copy link
Copy Markdown

Benchmarks

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

Highlights

Benchmark This PR StdDev main Δ
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 100000) 6.89 ms 105.12 μs 1.60 ms +330.7% ⚠️
BTreeDictionaryBenchmark.SortedDictionary_Lookup(ItemCount: 1000) 40.01 μs 2.69 μs 35.16 μs +13.8% ⚠️
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 2.76 ms 254.68 μs 2.07 ms +33.2% ⚠️
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 2.31 ms 162.93 μs 1.90 ms +21.5% ⚠️
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 100000) 1.49 ms 10.63 μs 854.36 μs +74.2% ⚠️
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 100000) 2.78 ms 820.03 μs 1.75 ms +58.7% ⚠️
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 2.45 ms 30.45 μs 2.22 ms +10.1% ⚠️
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 8) 1.23 μs 63.3 ns 1.66 μs -26.1% ✅
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 64) 24.59 μs 4.38 μs 31.20 μs -21.2% ✅
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 1000) 11.82 μs 73.5 ns 10.14 μs +16.6% ⚠️
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 5.60 μs 3.27 μs 2.15 μs +160.2% ⚠️
DequeBenchmark.LinkedList_PushFront(ItemCount: 1000) 35.89 μs 1.59 μs 43.21 μs -17.0% ✅
DequeBenchmark.LinkedList_Queue(ItemCount: 1000) 61.38 μs 4.53 μs 54.37 μs +12.9% ⚠️
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 31.80 μs 3.40 μs 26.24 μs +21.2% ⚠️
DisjointSetBenchmark.Dictionary_Union(ItemCount: 100000) 46.19 ms 2.39 ms 60.72 ms -23.9% ✅
Collections (460)
Benchmark This PR StdDev main Δ
TrieBenchmark.Dictionary_Add(ItemCount: 1000) 32.38 μs 1.52 μs 39.86 μs -18.8%
TrieBenchmark.Trie_Add(ItemCount: 1000) 606.79 μs 17.69 μs 593.46 μs +2.2%
LongSetBenchmark.HashSet_Add(ItemCount: 1000) 12.84 μs 223.9 ns 13.08 μs -1.9%
LongSetBenchmark.LongSet_Add(ItemCount: 1000) 9.32 μs 197.6 ns 9.12 μs +2.2%
TrieBenchmark.Dictionary_Add(ItemCount: 100000) 5.08 ms 1.79 ms 4.97 ms +2.2%
TrieBenchmark.Trie_Add(ItemCount: 100000) 24.87 ms 320.00 μs 24.91 ms -0.2%
LongSetBenchmark.HashSet_Add(ItemCount: 100000) 4.59 ms 200.22 μs 4.54 ms +1.0%
LongSetBenchmark.LongSet_Add(ItemCount: 100000) 6.14 ms 72.81 μs 6.05 ms +1.4%
LongSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.85 μs 6.1 ns 4.88 μs -0.7%
LongSetBenchmark.LongSet_Contains(ItemCount: 1000) 2.01 μs 11.2 ns 2.00 μs +0.2%
LongSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.60 ms 35.30 μs 1.64 ms -2.6%
LongSetBenchmark.LongSet_Contains(ItemCount: 100000) 644.74 μs 2.36 μs 637.49 μs +1.1%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 15.13 μs 463.6 ns 14.64 μs +3.4%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 1000) 11.32 μs 175.3 ns 11.12 μs +1.8%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.03 ms 62.78 μs 5.00 ms +0.6%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 100000) 6.74 ms 91.14 μs 6.68 ms +1.0%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.94 μs 50.3 ns 4.92 μs +0.4%
TrieBenchmark.Dictionary_Lookup(ItemCount: 1000) 12.99 μs 561.7 ns 12.98 μs +0.1%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 1000) 2.27 μs 6.5 ns 2.27 μs -0.2%
TrieBenchmark.Trie_Lookup(ItemCount: 1000) 40.30 μs 304.1 ns 40.12 μs +0.5%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 3.90 μs 1.59 ms +0.8%
TrieBenchmark.Dictionary_Lookup(ItemCount: 100000) 2.68 ms 6.13 μs 2.65 ms +1.1%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 100000) 698.97 μs 3.22 μs 701.94 μs -0.4%
TrieBenchmark.Trie_Lookup(ItemCount: 100000) 8.53 ms 118.68 μs 8.61 ms -0.9%
TrieBenchmark.Dictionary_PrefixMatch(ItemCount: 1000) 73.45 μs 72.0 ns 73.54 μs -0.1%
TrieBenchmark.Trie_PrefixMatch(ItemCount: 1000) 53.65 μs 432.4 ns 53.14 μs +1.0%
TrieBenchmark.Dictionary_PrefixMatch(ItemCount: 100000) 7.41 ms 10.26 μs 7.41 ms -0.1%
TrieBenchmark.Trie_PrefixMatch(ItemCount: 100000) 7.62 ms 354.76 μs 6.76 ms +12.8%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 88.79 μs 9.82 μs 81.71 μs +8.7%
LongSetBenchmark.HashSet_Remove(ItemCount: 1000) 78.37 μs 7.55 μs 78.54 μs -0.2%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 1000) 94.50 μs 5.01 μs 90.82 μs +4.1%
LongSetBenchmark.LongSet_Remove(ItemCount: 1000) 84.49 μs 8.97 μs 82.95 μs +1.9%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.02 ms 27.18 μs 2.02 ms +0.1%
LongSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.97 ms 15.98 μs 1.97 ms +0.4%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 100000) 6.89 ms 105.12 μs 1.60 ms +330.7% ⚠️
LongSetBenchmark.LongSet_Remove(ItemCount: 100000) 1.43 ms 17.13 μs 1.45 ms -1.1%
SmallSetBenchmark.HashSet_Add(ItemCount: 8) 174.4 ns 3.2 ns 177.3 ns -1.7%
SmallSetBenchmark.SmallSet_Add(ItemCount: 8) 46.7 ns 0.5 ns 45.3 ns +3.2%
SmallSetBenchmark.HashSet_Add(ItemCount: 64) 782.4 ns 9.7 ns 752.1 ns +4.0%
SmallSetBenchmark.SmallSet_Add(ItemCount: 64) 1.67 μs 6.5 ns 1.66 μs +0.7%
BTreeDictionaryBenchmark.SortedDictionary_Add(ItemCount: 1000) 64.04 μs 3.85 μs 64.93 μs -1.4%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 1000) 13.00 μs 108.4 ns 12.40 μs +4.9%
BTreeDictionaryBenchmark.BTreeDictionary_Add(ItemCount: 1000) 54.19 μs 265.5 ns 55.60 μs -2.5%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 1000) 27.48 μs 78.7 ns 27.16 μs +1.2%
BTreeDictionaryBenchmark.SortedDictionary_Add(ItemCount: 100000) 23.95 ms 223.86 μs 23.97 ms -0.1%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 100000) 4.88 ms 42.75 μs 4.84 ms +0.8%
BTreeDictionaryBenchmark.BTreeDictionary_Add(ItemCount: 100000) 16.10 ms 51.64 μs 16.27 ms -1.0%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 100000) 575.92 μs 710.5 ns 570.33 μs +1.0%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 1000) 162.96 μs 743.9 ns 162.20 μs +0.5%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 1000) 4.56 ms 61.62 μs 4.58 ms -0.5%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 100000) 29.90 ms 242.21 μs 30.88 ms -3.2%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 100000) 1.83 s 50.10 ms 2.02 s -9.0%
SmallSetBenchmark.HashSet_Contains(ItemCount: 8) 37.1 ns 0.1 ns 37.2 ns -0.1%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 8) 19.0 ns 0.1 ns 19.0 ns +0.4%
SmallSetBenchmark.HashSet_Contains(ItemCount: 64) 299.5 ns 0.2 ns 299.3 ns +0.1%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 64) 1.10 μs 13.5 ns 1.09 μs +0.8%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 1000) 0.0 ns 0.0 ns 0.0 ns -93.6%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 1000) 23.44 μs 11.9 ns 23.49 μs -0.2%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 100000) 0.0 ns 0.0 ns 0.0 ns -0.2%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 100000) 22.98 μs 6.9 ns 22.98 μs -0.0%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 1000) 30.46 μs 250.0 ns 28.95 μs +5.2%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.08 μs 115.6 ns 14.07 μs +0.1%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 1000) 39.04 μs 242.7 ns 37.92 μs +3.0%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 1000) 30.51 μs 135.0 ns 29.52 μs +3.3%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 100000) 12.88 ms 326.52 μs 12.67 ms +1.7%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.70 ms 225.17 μs 4.48 ms +4.8%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 100000) 17.25 ms 147.55 μs 16.96 ms +1.7%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 100000) 3.94 ms 20.07 μs 3.93 ms +0.1%
BTreeDictionaryBenchmark.SortedDictionary_Lookup(ItemCount: 1000) 40.01 μs 2.69 μs 35.16 μs +13.8% ⚠️
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.97 μs 90.6 ns 4.96 μs +0.1%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 1000) 7.34 μs 20.3 ns 7.36 μs -0.2%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.83 μs 116.1 ns 4.90 μs -1.6%
BTreeDictionaryBenchmark.BTreeDictionary_Lookup(ItemCount: 1000) 25.56 μs 192.0 ns 25.42 μs +0.5%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 1000) 2.27 μs 7.1 ns 2.27 μs -0.0%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 1000) 88.67 μs 2.75 μs 88.94 μs -0.3%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 1000) 3.10 μs 115.2 ns 2.98 μs +3.9%
BTreeDictionaryBenchmark.SortedDictionary_Lookup(ItemCount: 100000) 18.56 ms 253.66 μs 18.32 ms +1.3%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.77 ms 117.60 μs 1.74 ms +1.8%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 100000) 1.96 ms 45.40 μs 1.94 ms +0.8%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.63 ms 4.95 μs 1.59 ms +2.0%
BTreeDictionaryBenchmark.BTreeDictionary_Lookup(ItemCount: 100000) 13.19 ms 191.57 μs 13.20 ms -0.1%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 100000) 720.44 μs 3.34 μs 712.84 μs +1.1%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 100000) 7.45 ms 171.82 μs 7.55 ms -1.3%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 100000) 820.86 μs 7.48 μs 802.74 μs +2.3%
BTreeDictionaryBenchmark.SortedDictionary_Mixed(ItemCount: 1000) 190.69 μs 4.90 μs 186.09 μs +2.5%
BTreeDictionaryBenchmark.BTreeDictionary_Mixed(ItemCount: 1000) 88.46 μs 1.44 μs 82.26 μs +7.5%
BTreeDictionaryBenchmark.SortedDictionary_Mixed(ItemCount: 100000) 48.99 ms 1.26 ms 50.01 ms -2.0%
BTreeDictionaryBenchmark.BTreeDictionary_Mixed(ItemCount: 100000) 26.24 ms 42.71 μs 26.37 ms -0.5%
BTreeDictionaryBenchmark.SortedDictionary_RangeScan(ItemCount: 1000) 4.52 μs 27.9 ns 4.50 μs +0.3%
BTreeDictionaryBenchmark.BTreeDictionary_RangeScan(ItemCount: 1000) 79.4 ns 2.4 ns 83.4 ns -4.8%
BTreeDictionaryBenchmark.SortedDictionary_RangeScan(ItemCount: 100000) 1.26 ms 4.61 μs 1.26 ms -0.2%
BTreeDictionaryBenchmark.BTreeDictionary_RangeScan(ItemCount: 100000) 5.80 μs 18.6 ns 5.78 μs +0.3%
SmallSetBenchmark.HashSet_Remove(ItemCount: 8) 441.0 ns 37.6 ns 417.6 ns +5.6%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 8) 1.21 μs 103.6 ns 1.54 μs -21.3%
SmallSetBenchmark.HashSet_Remove(ItemCount: 64) 1.50 μs 338.0 ns 1.74 μs -13.4%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 64) 22.45 μs 3.56 μs 27.48 μs -18.3%
BTreeDictionaryBenchmark.SortedDictionary_Remove(ItemCount: 1000) 778.31 μs 14.68 μs 802.03 μs -3.0%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 1000) 34.29 μs 4.57 μs 34.07 μs +0.6%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 84.21 μs 6.77 μs 88.45 μs -4.8%
BTreeDictionaryBenchmark.BTreeDictionary_Remove(ItemCount: 1000) 314.09 μs 14.00 μs 311.96 μs +0.7%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 1000) 156.81 μs 8.85 μs 140.32 μs +11.7%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 1000) 74.33 μs 2.63 μs 73.54 μs +1.1%
BTreeDictionaryBenchmark.SortedDictionary_Remove(ItemCount: 100000) 26.95 ms 711.89 μs 27.14 ms -0.7%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 2.76 ms 254.68 μs 2.07 ms +33.2% ⚠️
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.09 ms 19.53 μs 2.06 ms +1.5%
BTreeDictionaryBenchmark.BTreeDictionary_Remove(ItemCount: 100000) 18.40 ms 208.83 μs 18.82 ms -2.2%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 2.31 ms 162.93 μs 1.90 ms +21.5% ⚠️
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 100000) 1.74 ms 48.07 μs 1.64 ms +5.9%
EnumMapBenchmark.Dictionary_Add 619.7 ns 32.5 ns 662.4 ns -6.4%
EnumMapBenchmark.EnumMap_Add 153.3 ns 4.5 ns 163.7 ns -6.3%
BTreeSetBenchmark.SortedSet_Add(ItemCount: 1000) 41.93 μs 823.5 ns 44.41 μs -5.6%
BloomFilterBenchmark.HashSet_Add(ItemCount: 1000) 13.23 μs 600.9 ns 12.92 μs +2.4%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 1000) 10.42 μs 116.7 ns 10.67 μs -2.3%
BTreeSetBenchmark.BTreeSet_Add(ItemCount: 1000) 41.81 μs 144.9 ns 42.13 μs -0.8%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 1000) 14.36 μs 147.9 ns 14.48 μs -0.8%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 1000) 11.02 μs 233.4 ns 11.06 μs -0.3%
BTreeSetBenchmark.SortedSet_Add(ItemCount: 100000) 21.75 ms 454.43 μs 22.10 ms -1.6%
BloomFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.68 ms 96.36 μs 4.67 ms +0.2%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 100000) 1.47 ms 24.62 μs 1.50 ms -1.4%
BTreeSetBenchmark.BTreeSet_Add(ItemCount: 100000) 14.05 ms 135.42 μs 14.13 ms -0.5%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 100000) 1.10 ms 6.62 μs 1.09 ms +0.6%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 100000) 966.69 μs 3.14 μs 966.83 μs -0.0%
BTreeSetBenchmark.SortedSet_Contains(ItemCount: 1000) 16.75 μs 60.7 ns 16.71 μs +0.3%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.73 μs 6.8 ns 4.73 μs -0.1%
BTreeSetBenchmark.BTreeSet_Contains(ItemCount: 1000) 17.30 μs 178.6 ns 17.17 μs +0.8%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 1000) 12.52 μs 12.5 ns 12.53 μs -0.1%
BTreeSetBenchmark.SortedSet_Contains(ItemCount: 100000) 15.64 ms 25.54 μs 16.23 ms -3.7%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.58 ms 1.36 μs 1.57 ms +1.1%
BTreeSetBenchmark.BTreeSet_Contains(ItemCount: 100000) 12.59 ms 30.61 μs 12.82 ms -1.8%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 100000) 868.35 μs 524.3 ns 869.81 μs -0.2%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.57 μs 29.9 ns 4.54 μs +0.6%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 1000) 3.52 μs 12.4 ns 3.54 μs -0.5%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.97 ms 40.43 μs 1.88 ms +4.5%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 100000) 1.49 ms 821.0 ns 1.49 ms +0.0%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 1000) 10.13 μs 50.4 ns 10.11 μs +0.2%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 1000) 5.72 μs 169.3 ns 5.74 μs -0.4%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 100000) 1.52 ms 51.41 μs 1.48 ms +2.3%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 100000) 702.26 μs 4.89 μs 726.35 μs -3.3%
EnumMapBenchmark.Dictionary_Enumerate 50.5 ns 0.0 ns 50.3 ns +0.4%
EnumMapBenchmark.EnumMap_Enumerate 39.7 ns 0.1 ns 41.8 ns -5.1%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 1000) 4.47 μs 94.8 ns 4.39 μs +2.0%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 1000) 10.06 μs 21.3 ns 10.07 μs -0.2%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 100000) 489.53 μs 1.70 μs 491.53 μs -0.4%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 100000) 1.97 ms 4.37 μs 2.01 ms -1.9%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.12 μs 697.4 ns 13.90 μs +1.6%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 1000) 11.77 μs 544.7 ns 12.42 μs -5.2%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.76 ms 99.28 μs 4.90 ms -2.9%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 100000) 6.64 ms 314.95 μs 6.92 ms -4.0%
EnumMapBenchmark.Dictionary_Lookup 117.7 ns 0.1 ns 117.8 ns -0.1%
EnumMapBenchmark.EnumMap_Lookup 63.0 ns 0.1 ns 63.4 ns -0.8%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.68 μs 2.5 ns 4.68 μs -0.1%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.72 μs 15.4 ns 4.73 μs -0.3%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 1000) 1.61 μs 9.9 ns 1.61 μs +0.1%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 1000) 2.68 μs 4.1 ns 2.71 μs -0.9%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 100000) 627.78 μs 772.9 ns 634.67 μs -1.1%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 2.61 μs 1.60 ms +0.3%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 100000) 191.62 μs 650.0 ns 191.07 μs +0.3%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 100000) 812.83 μs 6.55 μs 811.84 μs +0.1%
BTreeSetBenchmark.SortedSet_Mixed(ItemCount: 1000) 101.45 μs 1.87 μs 99.59 μs +1.9%
BTreeSetBenchmark.BTreeSet_Mixed(ItemCount: 1000) 61.05 μs 2.11 μs 66.03 μs -7.5%
BTreeSetBenchmark.SortedSet_Mixed(ItemCount: 100000) 33.29 ms 1.15 ms 31.87 ms +4.5%
BTreeSetBenchmark.BTreeSet_Mixed(ItemCount: 100000) 24.59 ms 127.09 μs 24.33 ms +1.1%
BTreeSetBenchmark.SortedSet_RangeScan(ItemCount: 1000) 175.7 ns 3.7 ns 168.9 ns +4.0%
BTreeSetBenchmark.BTreeSet_RangeScan(ItemCount: 1000) 73.8 ns 0.2 ns 74.2 ns -0.6%
BTreeSetBenchmark.SortedSet_RangeScan(ItemCount: 100000) 9.38 μs 267.6 ns 9.28 μs +1.0%
BTreeSetBenchmark.BTreeSet_RangeScan(ItemCount: 100000) 5.20 μs 20.1 ns 5.17 μs +0.5%
EnumMapBenchmark.Dictionary_Remove 3.52 μs 433.1 ns 3.48 μs +1.2%
EnumMapBenchmark.EnumMap_Remove 1.71 μs 362.7 ns 1.68 μs +1.5%
BTreeSetBenchmark.SortedSet_Remove(ItemCount: 1000) 741.19 μs 19.52 μs 728.38 μs +1.8%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 1000) 56.76 μs 6.63 μs 52.87 μs +7.4%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 84.21 μs 8.81 μs 84.44 μs -0.3%
BTreeSetBenchmark.BTreeSet_Remove(ItemCount: 1000) 272.65 μs 10.44 μs 265.64 μs +2.6%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 1000) 99.57 μs 6.61 μs 96.87 μs +2.8%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 1000) 118.24 μs 2.34 μs 120.46 μs -1.8%
BTreeSetBenchmark.SortedSet_Remove(ItemCount: 100000) 25.27 ms 131.66 μs 25.00 ms +1.1%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 100000) 536.30 μs 13.78 μs 534.95 μs +0.3%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.10 ms 120.63 μs 2.06 ms +2.4%
BTreeSetBenchmark.BTreeSet_Remove(ItemCount: 100000) 15.36 ms 105.75 μs 15.52 ms -1.0%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 100000) 1.49 ms 10.63 μs 854.36 μs +74.2% ⚠️
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 100000) 2.78 ms 820.03 μs 1.75 ms +58.7% ⚠️
CuckooFilterBenchmark.HashSet_Add(ItemCount: 1000) 12.19 μs 179.6 ns 12.07 μs +1.0%
SwissSetBenchmark.HashSet_Add(ItemCount: 1000) 12.40 μs 101.5 ns 12.30 μs +0.8%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 1000) 13.01 μs 64.5 ns 13.04 μs -0.3%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 1000) 7.15 μs 12.4 ns 7.15 μs +0.0%
SwissSetBenchmark.SwissSet_Add(ItemCount: 1000) 26.68 μs 81.9 ns 26.62 μs +0.2%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 1000) 84.04 μs 2.04 μs 80.16 μs +4.8%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.61 ms 80.78 μs 4.64 ms -0.8%
SwissSetBenchmark.HashSet_Add(ItemCount: 100000) 4.68 ms 93.88 μs 4.70 ms -0.5%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 100000) 3.38 ms 53.95 μs 3.28 ms +2.9%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 100000) 2.08 ms 10.72 μs 2.08 ms +0.0%
SwissSetBenchmark.SwissSet_Add(ItemCount: 100000) 4.56 ms 26.59 μs 4.56 ms -0.1%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 100000) 13.74 ms 23.37 μs 13.75 ms -0.1%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 1000) 166.12 μs 960.9 ns 165.23 μs +0.5%
XorFilterBenchmark.HashSet_Build(ItemCount: 1000) 7.89 μs 56.3 ns 7.90 μs -0.1%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 2.45 ms 30.45 μs 2.22 ms +10.1% ⚠️
XorFilterBenchmark.XorFilter_Build(ItemCount: 1000) 42.02 μs 3.36 μs 38.68 μs +8.6%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 100000) 29.45 ms 192.04 μs 29.49 ms -0.1%
XorFilterBenchmark.HashSet_Build(ItemCount: 100000) 2.03 ms 16.14 μs 2.06 ms -1.4%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 100000) 1.42 s 52.70 ms 1.44 s -1.1%
XorFilterBenchmark.XorFilter_Build(ItemCount: 100000) 12.34 ms 348.58 μs 12.74 ms -3.1%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 4.6 ns 4.79 μs -1.5%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 1000) 6.85 μs 11.6 ns 6.87 μs -0.3%
SwissSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.73 μs 9.5 ns 4.73 μs -0.1%
XorFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 37.9 ns 4.72 μs +0.5%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 1000) 4.92 μs 5.6 ns 4.91 μs +0.1%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 1000) 95.12 μs 454.9 ns 89.03 μs +6.8%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 1000) 2.77 μs 7.4 ns 2.78 μs -0.3%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 1000) 6.77 μs 9.3 ns 6.78 μs -0.2%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.54 ms 44.59 μs 1.56 ms -1.4%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 100000) 1.94 ms 7.77 μs 1.94 ms -0.1%
SwissSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.54 ms 2.65 μs 1.55 ms -0.2%
XorFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.58 ms 10.88 μs 1.50 ms +4.8%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 100000) 1.76 ms 20.39 μs 1.75 ms +0.4%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 100000) 7.14 ms 164.64 μs 7.29 ms -2.1%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 100000) 639.95 μs 2.28 μs 613.92 μs +4.2%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 100000) 703.75 μs 834.1 ns 704.00 μs -0.0%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 5.0 ns 4.54 μs -0.0%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.67 μs 133.5 ns 4.54 μs +2.9%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 7.9 ns 4.58 μs -0.9%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 1000) 8.43 μs 4.1 ns 8.37 μs +0.7%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 1000) 2.36 μs 4.4 ns 2.36 μs +0.0%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 1000) 6.77 μs 3.7 ns 6.77 μs -0.1%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.92 ms 2.98 μs 1.96 ms -1.9%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.93 ms 1.45 μs 1.93 ms -0.1%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.92 ms 3.52 μs 1.93 ms -0.2%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 100000) 873.85 μs 350.7 ns 924.28 μs -5.5%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 100000) 350.53 μs 4.30 μs 345.07 μs +1.6%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 100000) 704.84 μs 345.4 ns 705.38 μs -0.1%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 8) 161.9 ns 1.2 ns 163.9 ns -1.2%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 8) 86.0 ns 0.5 ns 90.2 ns -4.7%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 64) 809.7 ns 21.3 ns 765.7 ns +5.7%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 64) 1.07 μs 5.2 ns 1.08 μs -0.7%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 8) 37.0 ns 0.1 ns 37.1 ns -0.4%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 8) 22.6 ns 0.5 ns 26.8 ns -15.5%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 64) 305.5 ns 8.7 ns 297.4 ns +2.7%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 64) 1.11 μs 13.5 ns 1.11 μs +0.1%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 8) 1.42 μs 263.7 ns 1.32 μs +7.5%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 8) 1.23 μs 63.3 ns 1.66 μs -26.1% ✅
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 64) 5.75 μs 814.1 ns 4.84 μs +18.7%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 64) 24.59 μs 4.38 μs 31.20 μs -21.2% ✅
SwissSetBenchmark.HashSet_Remove(ItemCount: 1000) 29.49 μs 3.49 μs 32.49 μs -9.2%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 1000) 71.25 μs 5.67 μs 67.05 μs +6.3%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 1000) 12.93 μs 80.6 ns 13.03 μs -0.7%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 1000) 13.04 μs 73.1 ns 12.87 μs +1.3%
SwissSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.70 ms 11.06 μs 1.70 ms +0.2%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 100000) 1.05 ms 14.26 μs 1.06 ms -0.4%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 100000) 3.73 ms 43.11 μs 3.79 ms -1.4%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 100000) 3.96 ms 11.45 μs 3.97 ms -0.4%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 1000) 30.1 ns 0.3 ns 30.4 ns -0.8%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 1000) 1.23 μs 7.6 ns 1.23 μs +0.1%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 100000) 30.6 ns 0.4 ns 32.2 ns -4.9%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 100000) 1.19 μs 11.6 ns 1.17 μs +1.6%
EnumSetBenchmark.HashSet_Add 592.3 ns 6.1 ns 615.1 ns -3.7%
EnumSetBenchmark.EnumSet_Add 87.4 ns 0.7 ns 88.8 ns -1.6%
CeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 13.97 μs 148.2 ns 13.00 μs +7.5%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 1000) 13.26 μs 415.3 ns 12.80 μs +3.6%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 1000) 9.58 μs 131.6 ns 9.46 μs +1.3%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 1000) 14.02 μs 360.6 ns 13.70 μs +2.3%
CeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 5.20 ms 70.98 μs 5.27 ms -1.5%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 100000) 5.09 ms 53.75 μs 5.15 ms -1.0%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 100000) 3.62 ms 56.02 μs 3.49 ms +3.9%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 100000) 6.80 ms 118.84 μs 6.77 ms +0.4%
BitSetBenchmark.BitArray_And(ItemCount: 1024) 92.9 ns 1.5 ns 90.5 ns +2.6%
BitSetBenchmark.BitSet_And(ItemCount: 1024) 1.23 μs 3.6 ns 1.23 μs -0.0%
BitSetBenchmark.BitArray_And(ItemCount: 1000000) 46.50 μs 364.3 ns 46.34 μs +0.3%
BitSetBenchmark.BitSet_And(ItemCount: 1000000) 5.04 ms 9.65 μs 5.04 ms +0.0%
EnumSetBenchmark.HashSet_Contains 170.9 ns 0.5 ns 171.2 ns -0.2%
EnumSetBenchmark.EnumSet_Contains 51.5 ns 0.0 ns 51.7 ns -0.3%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.71 μs 5.5 ns 4.71 μs +0.2%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 5.0 ns 4.75 μs -0.2%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 1000) 1.91 μs 14.3 ns 1.92 μs -0.6%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 1000) 2.74 μs 24.1 ns 2.73 μs +0.5%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.54 ms 27.96 μs 1.51 ms +2.1%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.53 ms 10.56 μs 1.52 ms +0.5%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 100000) 550.78 μs 3.74 μs 553.22 μs -0.4%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 100000) 789.40 μs 13.93 μs 786.22 μs +0.4%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.57 μs 6.8 ns 4.57 μs +0.1%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 1000) 2.70 μs 2.6 ns 2.71 μs -0.1%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.97 ms 5.55 μs 2.03 ms -2.9%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 100000) 1.28 ms 1.90 μs 1.29 ms -0.2%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 1000) 78.01 μs 199.0 ns 80.14 μs -2.7%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 1000) 179.30 μs 439.6 ns 179.02 μs +0.2%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 100000) 35.27 ms 705.77 μs 35.51 ms -0.7%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 100000) 54.32 ms 263.03 μs 54.12 ms +0.4%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 1000) 4.73 μs 48.9 ns 4.95 μs -4.3%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 1000) 28.45 μs 200.7 ns 28.91 μs -1.6%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 100000) 1.16 ms 14.55 μs 1.18 ms -2.0%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 100000) 6.12 ms 120.85 μs 6.21 ms -1.5%
LruCacheBenchmark.Dictionary_Get(ItemCount: 1000) 24.53 μs 451.5 ns 25.04 μs -2.0%
LruCacheBenchmark.LruCache_Get(ItemCount: 1000) 7.45 μs 12.7 ns 7.87 μs -5.3%
LruCacheBenchmark.Dictionary_Get(ItemCount: 100000) 25.06 μs 338.4 ns 24.70 μs +1.5%
LruCacheBenchmark.LruCache_Get(ItemCount: 100000) 7.51 μs 7.8 ns 7.50 μs +0.1%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 1000) 4.73 μs 135.9 ns 4.59 μs +2.9%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 1000) 3.61 μs 2.4 ns 3.62 μs -0.1%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 100000) 537.74 μs 2.85 μs 536.60 μs +0.2%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 100000) 1.56 ms 2.01 μs 1.55 ms +0.3%
BitSetBenchmark.BitArray_Or(ItemCount: 1024) 94.3 ns 4.2 ns 95.0 ns -0.8%
BitSetBenchmark.BitSet_Or(ItemCount: 1024) 1.23 μs 2.2 ns 1.23 μs +0.2%
BitSetBenchmark.BitArray_Or(ItemCount: 1000000) 46.16 μs 476.9 ns 46.30 μs -0.3%
BitSetBenchmark.BitSet_Or(ItemCount: 1000000) 5.04 ms 8.48 μs 5.03 ms +0.1%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1024) 1.29 μs 65.3 ns 1.30 μs -0.6%
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.56 μs 5.48 ms -0.0%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1000000) 5.55 μs 3.1 ns 5.56 μs -0.1%
LruCacheBenchmark.Dictionary_Put(ItemCount: 1000) 93.62 μs 5.57 μs 93.27 μs +0.4%
LruCacheBenchmark.LruCache_Put(ItemCount: 1000) 489.24 μs 19.36 μs 482.76 μs +1.3%
LruCacheBenchmark.Dictionary_Put(ItemCount: 100000) 7.86 ms 37.72 μs 7.92 ms -0.8%
LruCacheBenchmark.LruCache_Put(ItemCount: 100000) 6.41 ms 44.91 μs 6.45 ms -0.7%
EnumSetBenchmark.HashSet_Remove 2.61 μs 456.3 ns 2.68 μs -2.5%
EnumSetBenchmark.EnumSet_Remove 1.05 μs 175.1 ns 1.09 μs -3.6%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 26.86 μs 2.28 μs 26.66 μs +0.8%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 1000) 146.76 μs 11.55 μs 143.11 μs +2.6%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 1000) 27.17 μs 2.22 μs 28.49 μs -4.6%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 1000) 132.75 μs 8.73 μs 142.43 μs -6.8%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.73 ms 37.09 μs 1.68 ms +2.8%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 100000) 1.50 ms 72.30 μs 1.44 ms +4.3%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.72 ms 17.74 μs 1.71 ms +0.7%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 100000) 1.50 ms 44.05 μs 1.53 ms -1.8%
EnumSetBenchmark.HashSet_Union 411.6 ns 3.5 ns 424.2 ns -3.0%
EnumSetBenchmark.EnumSet_Union 24.6 ns 1.9 ns 24.2 ns +1.6%
BitSetBenchmark.BitArray_Xor(ItemCount: 1024) 96.7 ns 0.4 ns 97.6 ns -0.9%
BitSetBenchmark.BitSet_Xor(ItemCount: 1024) 1.23 μs 3.0 ns 1.23 μs +0.1%
BitSetBenchmark.BitArray_Xor(ItemCount: 1000000) 46.27 μs 401.5 ns 46.41 μs -0.3%
BitSetBenchmark.BitSet_Xor(ItemCount: 1000000) 5.04 ms 10.81 μs 5.04 ms +0.1%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 1000) 12.36 μs 284.4 ns 12.54 μs -1.4%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 12.64 μs 82.4 ns 12.32 μs +2.6%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 1000) 11.18 μs 349.0 ns 11.21 μs -0.3%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 1000) 9.00 μs 76.1 ns 8.97 μs +0.3%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 100000) 4.15 ms 500.81 μs 4.35 ms -4.6%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 4.79 ms 62.31 μs 4.79 ms +0.1%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 100000) 5.27 ms 56.79 μs 5.23 ms +0.7%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 100000) 2.87 ms 27.87 μs 2.86 ms +0.6%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.77 μs 39.2 ns 4.71 μs +1.2%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.75 μs 32.4 ns 4.75 μs -0.1%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 1000) 2.42 μs 5.8 ns 2.42 μs -0.3%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 1000) 1.93 μs 21.2 ns 1.92 μs +0.5%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.50 ms 48.66 μs 1.62 ms -7.5%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.56 ms 8.68 μs 1.56 ms -0.2%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 100000) 738.30 μs 2.57 μs 739.87 μs -0.2%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 100000) 567.78 μs 1.24 μs 570.15 μs -0.4%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 9.3 ns 4.54 μs -0.0%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 1000) 2.80 μs 3.2 ns 2.80 μs +0.0%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.93 ms 6.81 μs 1.94 ms -0.3%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 100000) 1.16 ms 1.78 μs 1.16 ms -0.1%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 1000) 1.37 μs 0.7 ns 1.37 μs +0.0%
DequeBenchmark.Deque_Enumerate(ItemCount: 1000) 940.7 ns 0.3 ns 941.1 ns -0.1%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 100000) 135.13 μs 104.3 ns 135.07 μs +0.0%
DequeBenchmark.Deque_Enumerate(ItemCount: 100000) 93.79 μs 86.2 ns 93.85 μs -0.1%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.24 μs 130.9 ns 13.09 μs +1.2%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.27 μs 180.6 ns 13.06 μs +1.6%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 1000) 11.82 μs 73.5 ns 10.14 μs +16.6% ⚠️
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 1000) 8.37 μs 370.0 ns 8.02 μs +4.4%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.06 ms 65.62 μs 4.08 ms -0.4%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.96 ms 104.87 μs 4.95 ms +0.3%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 100000) 4.75 ms 52.74 μs 4.76 ms -0.1%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 100000) 2.97 ms 18.03 μs 2.97 ms +0.1%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.72 μs 18.6 ns 4.72 μs +0.1%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.72 μs 12.4 ns 4.71 μs +0.2%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 5.60 μs 3.27 μs 2.15 μs +160.2% ⚠️
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 1000) 2.35 μs 34.7 ns 2.36 μs -0.4%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.59 ms 3.70 μs 1.59 ms -0.2%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.59 ms 2.54 μs 1.60 ms -0.3%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 690.75 μs 1.34 μs 690.07 μs +0.1%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 100000) 699.80 μs 1.96 μs 697.01 μs +0.4%
FenwickTreeBenchmark.Array_Mixed(ItemCount: 1000) 181.52 μs 273.6 ns 183.07 μs -0.8%
FenwickTreeBenchmark.FenwickTree_Mixed(ItemCount: 1000) 11.16 μs 26.3 ns 11.14 μs +0.2%
FenwickTreeBenchmark.Array_Mixed(ItemCount: 100000) 166.27 ms 668.84 μs 165.39 ms +0.5%
FenwickTreeBenchmark.FenwickTree_Mixed(ItemCount: 100000) 630.81 μs 16.50 μs 623.53 μs +1.2%
DequeBenchmark.LinkedList_PushFront(ItemCount: 1000) 35.89 μs 1.59 μs 43.21 μs -17.0% ✅
DequeBenchmark.Deque_PushFront(ItemCount: 1000) 25.49 μs 4.84 μs 23.53 μs +8.3%
DequeBenchmark.LinkedList_PushFront(ItemCount: 100000) 1.82 ms 41.60 μs 1.81 ms +0.6%
DequeBenchmark.Deque_PushFront(ItemCount: 100000) 630.00 μs 39.72 μs 633.36 μs -0.5%
DequeBenchmark.LinkedList_Queue(ItemCount: 1000) 61.38 μs 4.53 μs 54.37 μs +12.9% ⚠️
DequeBenchmark.Deque_Queue(ItemCount: 1000) 31.94 μs 1.37 μs 36.50 μs -12.5%
DequeBenchmark.LinkedList_Queue(ItemCount: 100000) 4.18 ms 128.36 μs 4.24 ms -1.4%
DequeBenchmark.Deque_Queue(ItemCount: 100000) 506.01 μs 125.14 μs 417.28 μs +21.3%
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 1000) 220.69 μs 144.3 ns 220.67 μs +0.0%
FenwickTreeBenchmark.FenwickTree_RangeSum(ItemCount: 1000) 7.45 μs 5.6 ns 7.45 μs +0.1%
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 100000) 158.85 ms 153.51 μs 158.66 ms +0.1%
FenwickTreeBenchmark.FenwickTree_RangeSum(ItemCount: 100000) 323.06 μs 1.10 μs 323.78 μs -0.2%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 90.18 μs 6.56 μs 83.49 μs +8.0%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 85.65 μs 10.09 μs 82.78 μs +3.5%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 31.80 μs 3.40 μs 26.24 μs +21.2% ⚠️
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 1000) 136.87 μs 5.82 μs 145.40 μs -5.9%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 1000) 142.80 μs 4.67 μs 140.75 μs +1.5%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 1000) 143.24 μs 7.94 μs 142.53 μs +0.5%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 1000) 30.38 μs 4.41 μs 26.17 μs +16.1%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 1000) 115.10 μs 6.21 μs 118.27 μs -2.7%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.04 ms 9.33 μs 2.05 ms -0.3%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.04 ms 9.46 μs 2.06 ms -1.3%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.70 ms 12.98 μs 1.72 ms -1.2%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 100000) 1.59 ms 50.74 μs 1.58 ms +0.7%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 100000) 1.59 ms 48.28 μs 1.57 ms +1.3%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 100000) 1.28 ms 63.19 μs 1.28 ms +0.6%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.71 ms 14.25 μs 1.72 ms -0.4%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 100000) 1.55 ms 15.38 μs 1.54 ms +0.3%
IntSetBenchmark.HashSet_Add(ItemCount: 1000) 13.01 μs 234.3 ns 12.85 μs +1.3%
SparseSetBenchmark.HashSet_Add(ItemCount: 1000) 8.06 μs 253.6 ns 7.74 μs +4.2%
IntSetBenchmark.IntSet_Add(ItemCount: 1000) 8.85 μs 120.1 ns 8.82 μs +0.4%
SparseSetBenchmark.SparseSet_Add(ItemCount: 1000) 6.70 μs 279.2 ns 6.29 μs +6.5%
IntSetBenchmark.HashSet_Add(ItemCount: 100000) 5.10 ms 62.06 μs 5.12 ms -0.4%
SparseSetBenchmark.HashSet_Add(ItemCount: 100000) 1.78 ms 74.51 μs 1.73 ms +3.3%
IntSetBenchmark.IntSet_Add(ItemCount: 100000) 3.16 ms 18.86 μs 3.20 ms -1.2%
SparseSetBenchmark.SparseSet_Add(ItemCount: 100000) 1.49 ms 70.34 μs 1.48 ms +0.6%
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 1000) 5.96 μs 17.6 ns 6.05 μs -1.4%
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 1000) 4.64 μs 4.3 ns 4.60 μs +0.8%
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 100000) 1.37 ms 10.22 μs 1.37 ms +0.2%
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 100000) 845.26 μs 211.44 μs 688.90 μs +22.7%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 1000) 18.69 μs 144.5 ns 19.12 μs -2.2%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 1000) 16.77 μs 144.9 ns 17.13 μs -2.1%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 100000) 4.34 ms 116.43 μs 4.58 ms -5.2%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 100000) 3.16 ms 36.35 μs 3.21 ms -1.6%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 1000) 9.15 μs 4.9 ns 9.68 μs -5.4%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 1000) 12.15 μs 51.1 ns 12.27 μs -0.9%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 100000) 264.07 μs 7.38 μs 260.53 μs +1.4%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 100000) 341.07 μs 4.46 μs 348.20 μs -2.0%
IntSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 8.5 ns 4.98 μs -4.9%
SparseSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.65 μs 8.3 ns 4.66 μs -0.3%
IntSetBenchmark.IntSet_Contains(ItemCount: 1000) 1.79 μs 21.0 ns 1.81 μs -0.9%
SparseSetBenchmark.SparseSet_Contains(ItemCount: 1000) 1.28 μs 2.9 ns 1.29 μs -0.2%
IntSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.55 ms 8.20 μs 1.56 ms -0.6%
SparseSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.41 ms 52.01 μs 1.35 ms +4.2%
IntSetBenchmark.IntSet_Contains(ItemCount: 100000) 571.43 μs 1.53 μs 574.14 μs -0.5%
SparseSetBenchmark.SparseSet_Contains(ItemCount: 100000) 246.90 μs 11.08 μs 257.60 μs -4.2%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.12 μs 598.6 ns 14.09 μs +0.2%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.92 μs 681.0 ns 14.00 μs -0.6%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 1000) 11.28 μs 427.1 ns 11.60 μs -2.7%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 1000) 17.78 μs 257.1 ns 17.94 μs -0.9%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.18 ms 65.05 μs 4.22 ms -1.1%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.79 ms 96.09 μs 4.78 ms +0.1%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 100000) 4.91 ms 62.56 μs 4.94 ms -0.6%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 100000) 8.00 ms 606.28 μs 8.02 ms -0.2%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.73 μs 23.0 ns 4.74 μs -0.3%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.71 μs 19.2 ns 4.72 μs -0.4%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 1000) 2.14 μs 4.5 ns 2.16 μs -0.9%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 1000) 2.61 μs 3.1 ns 2.64 μs -0.8%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.61 ms 6.96 μs 1.62 ms -0.4%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.61 ms 6.43 μs 1.61 ms -0.0%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 100000) 679.45 μs 2.48 μs 674.61 μs +0.7%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 100000) 836.85 μs 3.41 μs 825.24 μs +1.4%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 87.98 μs 5.90 μs 82.16 μs +7.1%
IntSetBenchmark.HashSet_Remove(ItemCount: 1000) 31.64 μs 4.96 μs 31.81 μs -0.5%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 85.69 μs 9.37 μs 82.79 μs +3.5%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 1000) 88.99 μs 6.48 μs 92.08 μs -3.4%
IntSetBenchmark.IntSet_Remove(ItemCount: 1000) 86.19 μs 7.80 μs 93.15 μs -7.5%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 1000) 137.01 μs 5.10 μs 137.66 μs -0.5%
SparseSetBenchmark.HashSet_Remove(ItemCount: 1000) 24.52 μs 1.36 μs 27.20 μs -9.9%
SparseSetBenchmark.SparseSet_Remove(ItemCount: 1000) 22.05 μs 1.17 μs 26.36 μs -16.4%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.08 ms 36.50 μs 2.05 ms +1.4%
IntSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.72 ms 11.46 μs 1.70 ms +1.0%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.07 ms 19.28 μs 2.07 ms -0.1%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 100000) 6.72 ms 108.12 μs 6.61 ms +1.7%
IntSetBenchmark.IntSet_Remove(ItemCount: 100000) 1.34 ms 8.61 μs 1.34 ms -0.3%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 100000) 1.74 ms 102.45 μs 1.70 ms +2.8%
SparseSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.48 ms 17.63 μs 1.49 ms -0.3%
SparseSetBenchmark.SparseSet_Remove(ItemCount: 100000) 788.76 μs 8.27 μs 797.52 μs -1.1%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 1000) 98.03 μs 1.20 μs 105.05 μs -6.7%
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 1000) 27.03 μs 229.4 ns 28.37 μs -4.7%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 100000) 46.19 ms 2.39 ms 60.72 ms -23.9% ✅
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 100000) 8.22 ms 53.92 μs 8.96 ms -8.3%
Hashers (111)
Benchmark This PR StdDev main Δ
StringHasherBenchmark.Bcl_GetHashCode(Shape: ShortAscii) 15.40 μs 21.3 ns 15.40 μs +0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: ShortAscii) 15.39 μs 22.2 ns 15.38 μs +0.0%
StringHasherBenchmark.Djb2(Shape: ShortAscii) 22.03 μs 39.5 ns 22.03 μs +0.0%
StringHasherBenchmark.Djb2A(Shape: ShortAscii) 22.05 μs 36.5 ns 22.01 μs +0.2%
StringHasherBenchmark.Sdbm(Shape: ShortAscii) 32.83 μs 19.7 ns 32.85 μs -0.0%
StringHasherBenchmark.Elf(Shape: ShortAscii) 44.01 μs 161.3 ns 44.00 μs +0.0%
StringHasherBenchmark.Crc32(Shape: ShortAscii) 49.89 μs 38.6 ns 49.89 μs -0.0%
StringHasherBenchmark.Adler32(Shape: ShortAscii) 96.26 μs 65.9 ns 96.21 μs +0.1%
StringHasherBenchmark.FnV1(Shape: ShortAscii) 25.36 μs 29.1 ns 25.35 μs +0.1%
StringHasherBenchmark.FnV1_64(Shape: ShortAscii) 25.16 μs 36.5 ns 25.19 μs -0.1%
StringHasherBenchmark.FnV1A(Shape: ShortAscii) 10.65 μs 28.3 ns 10.65 μs +0.0%
StringHasherBenchmark.FnV1A_Full(Shape: ShortAscii) 22.83 μs 16.1 ns 22.87 μs -0.2%
StringHasherBenchmark.FnV1A_64(Shape: ShortAscii) 26.34 μs 32.3 ns 26.35 μs -0.0%
StringHasherBenchmark.JenkinsOaat(Shape: ShortAscii) 39.28 μs 29.3 ns 39.30 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: ShortAscii) 15.21 μs 35.4 ns 15.20 μs +0.0%
StringHasherBenchmark.Murmur3(Shape: ShortAscii) 17.35 μs 53.4 ns 17.31 μs +0.2%
StringHasherBenchmark.XxHash32(Shape: ShortAscii) 16.92 μs 16.9 ns 16.93 μs -0.0%
StringHasherBenchmark.XxHash64(Shape: ShortAscii) 18.12 μs 23.0 ns 18.12 μs -0.0%
StringHasherBenchmark.XxHash3(Shape: ShortAscii) 15.01 μs 12.0 ns 14.97 μs +0.3%
StringHasherBenchmark.CityHash64(Shape: ShortAscii) 15.24 μs 8.9 ns 15.23 μs +0.0%
StringHasherBenchmark.MetroHash64(Shape: ShortAscii) 15.06 μs 10.8 ns 15.07 μs -0.0%
StringHasherBenchmark.SipHash13(Shape: ShortAscii) 27.69 μs 22.4 ns 27.70 μs -0.0%
StringHasherBenchmark.SipHash24(Shape: ShortAscii) 38.49 μs 24.2 ns 38.48 μs +0.0%
StringHasherBenchmark.HalfSipHash24(Shape: ShortAscii) 50.00 μs 71.7 ns 50.00 μs +0.0%
StringHasherBenchmark.HighwayHash64(Shape: ShortAscii) 476.45 μs 324.9 ns 477.70 μs -0.3%
StringHasherBenchmark.XxHash64_Hash64(Shape: ShortAscii) 17.11 μs 12.2 ns 17.13 μs -0.1%
StringHasherBenchmark.SipHash24_Hash64(Shape: ShortAscii) 37.75 μs 19.6 ns 37.78 μs -0.1%
StringHasherBenchmark.Bcl_GetHashCode(Shape: LongAscii) 96.91 μs 90.6 ns 96.94 μs -0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: LongAscii) 96.52 μs 44.9 ns 96.67 μs -0.2%
StringHasherBenchmark.Djb2(Shape: LongAscii) 229.32 μs 99.5 ns 229.37 μs -0.0%
StringHasherBenchmark.Djb2A(Shape: LongAscii) 229.32 μs 82.3 ns 229.44 μs -0.0%
StringHasherBenchmark.Sdbm(Shape: LongAscii) 308.14 μs 163.0 ns 308.15 μs -0.0%
StringHasherBenchmark.Elf(Shape: LongAscii) 577.61 μs 374.0 ns 577.36 μs +0.0%
StringHasherBenchmark.Crc32(Shape: LongAscii) 589.60 μs 407.2 ns 589.68 μs -0.0%
StringHasherBenchmark.Adler32(Shape: LongAscii) 789.08 μs 457.4 ns 789.18 μs -0.0%
StringHasherBenchmark.FnV1(Shape: LongAscii) 289.56 μs 103.3 ns 289.77 μs -0.1%
StringHasherBenchmark.FnV1_64(Shape: LongAscii) 282.81 μs 145.9 ns 282.73 μs +0.0%
StringHasherBenchmark.FnV1A(Shape: LongAscii) 122.30 μs 79.4 ns 122.34 μs -0.0%
StringHasherBenchmark.FnV1A_Full(Shape: LongAscii) 281.82 μs 294.4 ns 281.87 μs -0.0%
StringHasherBenchmark.FnV1A_64(Shape: LongAscii) 286.34 μs 60.8 ns 286.66 μs -0.1%
StringHasherBenchmark.JenkinsOaat(Shape: LongAscii) 378.64 μs 147.2 ns 378.61 μs +0.0%
StringHasherBenchmark.Murmur2(Shape: LongAscii) 101.94 μs 110.2 ns 101.92 μs +0.0%
StringHasherBenchmark.Murmur3(Shape: LongAscii) 113.00 μs 75.2 ns 113.02 μs -0.0%
StringHasherBenchmark.XxHash32(Shape: LongAscii) 73.27 μs 47.1 ns 73.29 μs -0.0%
StringHasherBenchmark.XxHash64(Shape: LongAscii) 93.58 μs 2.14 μs 91.14 μs +2.7%
StringHasherBenchmark.XxHash3(Shape: LongAscii) 69.98 μs 130.3 ns 70.37 μs -0.6%
StringHasherBenchmark.CityHash64(Shape: LongAscii) 123.31 μs 976.5 ns 122.04 μs +1.0%
StringHasherBenchmark.MetroHash64(Shape: LongAscii) 74.40 μs 337.5 ns 74.34 μs +0.1%
StringHasherBenchmark.SipHash13(Shape: LongAscii) 115.11 μs 105.4 ns 115.24 μs -0.1%
StringHasherBenchmark.SipHash24(Shape: LongAscii) 161.54 μs 756.8 ns 161.19 μs +0.2%
StringHasherBenchmark.HalfSipHash24(Shape: LongAscii) 247.70 μs 172.2 ns 247.79 μs -0.0%
StringHasherBenchmark.HighwayHash64(Shape: LongAscii) 825.60 μs 6.39 μs 826.96 μs -0.2%
StringHasherBenchmark.XxHash64_Hash64(Shape: LongAscii) 89.21 μs 1.46 μs 89.18 μs +0.0%
StringHasherBenchmark.SipHash24_Hash64(Shape: LongAscii) 161.94 μs 323.3 ns 161.90 μs +0.0%
StringHasherBenchmark.Bcl_GetHashCode(Shape: NonAscii) 22.88 μs 14.1 ns 22.89 μs -0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: NonAscii) 22.85 μs 23.6 ns 22.84 μs +0.1%
StringHasherBenchmark.Djb2(Shape: NonAscii) 43.44 μs 61.8 ns 43.41 μs +0.1%
StringHasherBenchmark.Djb2A(Shape: NonAscii) 43.43 μs 44.4 ns 43.41 μs +0.1%
StringHasherBenchmark.Sdbm(Shape: NonAscii) 61.58 μs 51.7 ns 61.64 μs -0.1%
StringHasherBenchmark.Elf(Shape: NonAscii) 99.60 μs 181.6 ns 99.50 μs +0.1%
StringHasherBenchmark.Crc32(Shape: NonAscii) 102.67 μs 96.4 ns 102.67 μs -0.0%
StringHasherBenchmark.Adler32(Shape: NonAscii) 175.41 μs 80.8 ns 175.48 μs -0.0%
StringHasherBenchmark.FnV1(Shape: NonAscii) 47.64 μs 38.1 ns 47.65 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: NonAscii) 49.72 μs 60.0 ns 49.78 μs -0.1%
StringHasherBenchmark.FnV1A(Shape: NonAscii) 21.64 μs 39.5 ns 21.64 μs +0.0%
StringHasherBenchmark.FnV1A_Full(Shape: NonAscii) 45.07 μs 34.6 ns 45.11 μs -0.1%
StringHasherBenchmark.FnV1A_64(Shape: NonAscii) 49.42 μs 54.6 ns 49.42 μs -0.0%
StringHasherBenchmark.JenkinsOaat(Shape: NonAscii) 73.13 μs 54.9 ns 73.15 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: NonAscii) 27.25 μs 125.6 ns 27.21 μs +0.2%
StringHasherBenchmark.Murmur3(Shape: NonAscii) 31.90 μs 89.6 ns 31.83 μs +0.2%
StringHasherBenchmark.XxHash32(Shape: NonAscii) 23.92 μs 21.6 ns 23.94 μs -0.1%
StringHasherBenchmark.XxHash64(Shape: NonAscii) 29.25 μs 26.3 ns 29.26 μs -0.0%
StringHasherBenchmark.XxHash3(Shape: NonAscii) 22.86 μs 78.7 ns 22.84 μs +0.1%
StringHasherBenchmark.CityHash64(Shape: NonAscii) 22.02 μs 18.1 ns 22.01 μs +0.0%
StringHasherBenchmark.MetroHash64(Shape: NonAscii) 25.63 μs 9.3 ns 25.76 μs -0.5%
StringHasherBenchmark.SipHash13(Shape: NonAscii) 36.36 μs 197.2 ns 36.42 μs -0.1%
StringHasherBenchmark.SipHash24(Shape: NonAscii) 51.48 μs 638.6 ns 51.58 μs -0.2%
StringHasherBenchmark.HalfSipHash24(Shape: NonAscii) 73.28 μs 381.6 ns 73.03 μs +0.3%
StringHasherBenchmark.HighwayHash64(Shape: NonAscii) 510.30 μs 2.09 μs 511.91 μs -0.3%
StringHasherBenchmark.XxHash64_Hash64(Shape: NonAscii) 28.30 μs 32.5 ns 28.32 μs -0.1%
StringHasherBenchmark.SipHash24_Hash64(Shape: NonAscii) 49.87 μs 53.2 ns 49.87 μs +0.0%
IntegerHasherBenchmark.Guid_Bcl 1.27 μs 2.5 ns 1.27 μs -0.2%
IntegerHasherBenchmark.Guid_EqualityComparer 3.47 μs 2.5 ns 3.48 μs -0.4%
IntegerHasherBenchmark.Guid_Celerity 8.52 μs 19.9 ns 8.49 μs +0.3%
IntegerHasherBenchmark.Guid_Celerity_Hash64 8.02 μs 10.2 ns 8.02 μs +0.0%
IntegerHasherBenchmark.Int32_Bcl 685.2 ns 0.6 ns 685.3 ns -0.0%
IntegerHasherBenchmark.Int32_EqualityComparer 698.8 ns 0.7 ns 686.0 ns +1.9%
IntegerHasherBenchmark.Int32_Identity 684.7 ns 1.6 ns 683.8 ns +0.1%
IntegerHasherBenchmark.Int32_WangNaive 1.25 μs 0.4 ns 1.25 μs -0.0%
IntegerHasherBenchmark.Int32_Wang 3.02 μs 3.2 ns 3.02 μs +0.0%
IntegerHasherBenchmark.Int32_Murmur3 2.64 μs 1.5 ns 2.65 μs -0.1%
IntegerHasherBenchmark.Int64_Bcl 1.27 μs 1.2 ns 1.36 μs -7.0%
IntegerHasherBenchmark.Int64_EqualityComparer 1.25 μs 0.5 ns 1.25 μs -0.1%
IntegerHasherBenchmark.Int64_Identity 683.5 ns 0.9 ns 683.4 ns +0.0%
IntegerHasherBenchmark.Int64_WangNaive 1.87 μs 0.9 ns 1.87 μs -0.0%
IntegerHasherBenchmark.Int64_Wang 4.16 μs 3.5 ns 4.16 μs +0.0%
IntegerHasherBenchmark.Int64_Murmur3 2.37 μs 2.3 ns 2.37 μs +0.0%
IntegerHasherBenchmark.Int64_Wang_Hash64 4.16 μs 3.4 ns 4.16 μs -0.0%
IntegerHasherBenchmark.Int64_Murmur3_Hash64 2.37 μs 2.0 ns 2.37 μs +0.0%
IntegerHasherBenchmark.UInt32_Bcl 685.0 ns 0.6 ns 683.9 ns +0.2%
IntegerHasherBenchmark.UInt32_EqualityComparer 699.2 ns 1.0 ns 691.9 ns +1.1%
IntegerHasherBenchmark.UInt32_Default 1.25 μs 0.6 ns 1.25 μs -0.0%
IntegerHasherBenchmark.UInt32_Wang 3.02 μs 1.2 ns 3.03 μs -0.2%
IntegerHasherBenchmark.UInt32_Murmur3 2.65 μs 1.6 ns 2.64 μs +0.0%
IntegerHasherBenchmark.UInt64_Bcl 1.27 μs 0.5 ns 1.27 μs -0.0%
IntegerHasherBenchmark.UInt64_EqualityComparer 1.25 μs 0.4 ns 1.25 μs +0.0%
IntegerHasherBenchmark.UInt64_Default 2.37 μs 1.7 ns 2.37 μs +0.0%
IntegerHasherBenchmark.UInt64_Wang 4.16 μs 1.5 ns 4.16 μs -0.0%
IntegerHasherBenchmark.UInt64_WangNaive 1.87 μs 1.3 ns 1.87 μs +0.0%
IntegerHasherBenchmark.UInt64_Default_Hash64 2.37 μs 2.0 ns 2.37 μs +0.0%
IntegerHasherBenchmark.UInt64_Wang_Hash64 4.16 μs 3.0 ns 4.16 μs +0.1%

Same-runner A/B (sharded 8-way): main (780e1a1) 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 8e5376c into main Jul 26, 2026
17 checks passed
@marius-bughiu
marius-bughiu deleted the claude/100-percent-coverage-6896fc branch July 26, 2026 12:08
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.

Coverage gate measures only 1 of the 6 shipped packages

2 participants