Skip to content

fix(docs): stop MaxMonoid shipping with no documentation at all - #358

Merged
marius-bughiu merged 3 commits into
mainfrom
fix/issue-356-maxmonoid-xml-docs
Aug 10, 2026
Merged

fix(docs): stop MaxMonoid shipping with no documentation at all#358
marius-bughiu merged 3 commits into
mainfrom
fix/issue-356-maxmonoid-xml-docs

Conversation

@marius-bughiu

@marius-bughiu marius-bughiu commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Closes #356.

The defect was worse than filed

The issue reported that MaxMonoid<T>'s unclosed <para> put its remarks at risk. Checking the generated Celerity.xml on main, the damage is total — the member element is absent entirely:

MEMBER: P:Celerity.Collections.MaxMonoid`1.Identity
MEMBER: M:Celerity.Collections.MaxMonoid`1.Combine(`0,`0)
--- MinMonoid for contrast ---
MEMBER: T:Celerity.Collections.MinMonoid`1        <-- present
MEMBER: P:Celerity.Collections.MinMonoid`1.Identity
MEMBER: M:Celerity.Collections.MinMonoid`1.Combine(`0,`0)

There is no T:Celerity.Collections.MaxMonoid1entry. The doc writer does not truncate a malformed comment, it drops the whole member — so the type shipped with **no summary, notypeparam, and no remarks**, and an IDE tooltip on MaxMonoidshows nothing. The floating-point caveat (a stored-∞aggregates toT.MinValue; NaN` resolves by operand position) was already gone, not merely at risk.

What changed

Fixsrc/Celerity/Collections/MaxMonoid.cs: one </para>. The T: entry is back in the shipped XML with its summary, typeparam and both <para> blocks. No behavioural change.

Compiler gate — CS1570 joins CS1591 in <WarningsAsErrors> across all seven shipping packages (Celerity, Celerity.Hashing, Celerity.Primitives, Celerity.Sorting, Celerity.Ring, Celerity.Sentinel, Celerity.Cardinality). A doc comment must now be present and parse. Verified by rebuilding against the original comment: the two warnings become

error CS1570: XML comment has badly formed XML -- 'End tag 'remarks' does not match the start tag 'para'.'
error CS1570: XML comment has badly formed XML -- 'Expected an end tag for element 'remarks'.'

Regression testsrc/Celerity.Tests/Packaging/XmlDocumentationTests.cs asserts against the artifact that actually ships, not the source:

  • DocumentationFile_ShouldParseAsWellFormedXml_... — each package's .xml loads.
  • DocumentationFile_ShouldDescribeEveryPublicType_... — every public type the assembly declares (forwarded types are filtered out, since they are documented where they are declared) has a <member name="T:…"> entry.
  • MaxMonoid_ShouldShipItsSummaryAndRemarks_... — pins the specific entry, including the NaN caveat.

Both of the latter two fail on the pre-fix comment, with the assembly-wide one naming the culprit:

Celerity.xml is missing an entry for 1 public type(s). A doc comment that is not
well-formed XML is dropped whole rather than truncated: T:Celerity.Collections.MaxMonoid`1

It covers the four packages this test project reaches; the three showcase packages are not referenced from here and rely on the compiler gate.

DocsCONTRIBUTING.md, CLAUDE.md and the ROADMAP.md doc-coverage line each described the CS1591 gate alone and are updated to cover both, with the reason the second one is needed. CHANGELOG.md gets ### Added bullets for the gate and the tests, and a ### Fixed bullet for the defect.

Parity checklist

Facet Status
Dedicated tests XmlDocumentationTests (9 cases)
Cross-collection shared suites n/a — no new type; the existing suites have no row shape for a doc-comment fix
Benchmark + Program.cs n/a — no code path changed. A doc comment and an MSBuild property cannot move a measured number. The sharded run still fires: scripts/benchmark_relevant_changes.js only proves comment-only .cs edits inert, and this diff touches .csproj files, which it treats as significant by design
Dashboard wiring (web/…) n/a — no new collection, so no COLLECTIONS entry or ship card
docs/api/collections.md already correct — the prose carries the floating-point caveat independently of the XML comment, so only the shipped .xml was wrong. README.md likewise needs no change
CHANGELOG.md added
ROADMAP.md doc-coverage line updated to name both gates

Test plan

  • dotnet build --no-incremental — 0 warnings, 0 errors (Debug and Release).
  • dotnet test on net8.0 / net9.0 / net10.0 — 5658 passed, 0 failed each.
  • Showcase suites: Celerity.Ring.Tests 46, Celerity.Sentinel.Tests 30, Celerity.Cardinality.Tests 37 — all pass, confirming the CS1570 promotion breaks nothing in those packages.
  • Reverted MaxMonoid.cs and rebuilt: CS1570 fires as an error, and the two new tests fail — the gate and the regression test both bite.
  • node scripts/check_doc_anchors.js — 585 links across 23 markdown files resolve.
  • CI matrix (ubuntu / windows / macos × net8.0 / net9.0 / net10.0), coverage gate, AOT smoke test, package-validation gate.
  • Copilot review loop: 3 rounds. Round 1 raised one changelog-style comment (folded, replied, thread resolved); round 2 suppressed one comment flagging that my fold overclaimed the test's package coverage (corrected in 8667ab5, answered in a PR comment since suppressed comments open no thread); round 3 came back with nothing.
  • No gh-pages dashboard refresh is expected on merge — this PR adds no benchmark and changes no measured code path.

🤖 Generated with Claude Code

An unclosed <para> in MaxMonoid<T>'s <remarks> made the doc comment
invalid XML. The doc writer does not truncate a malformed comment, it
drops the whole member element, so `T:Celerity.Collections.MaxMonoid`1`
was absent from the shipped Celerity.xml entirely: no summary, no
typeparam, and none of the floating-point caveat (a stored -inf
aggregates to T.MinValue; NaN resolves by operand position). The issue
reported the caveat as at risk; it was in fact already gone, along with
the rest of the type's docs.

Closing the tag restores the entry. Two gates keep it from recurring:

- CS1570 joins CS1591 in WarningsAsErrors across all seven shipping
  packages, so a doc comment must now be present *and* parse. This
  turns the two warnings the defect emitted into build errors,
  verified by rebuilding against the original comment.
- XmlDocumentationTests asserts, against the artifact that actually
  ships, that each package's .xml parses and carries an entry for
  every public type its assembly declares. Both new tests fail on the
  pre-fix comment.

CONTRIBUTING.md, CLAUDE.md and the ROADMAP doc-coverage line are
updated to describe both gates rather than CS1591 alone.

Closes #356

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Coverage

Metric Value
Line 100% (12634/12634)
Branch 100% (5188/5188)

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

Fixes malformed MaxMonoid<T> XML documentation and prevents similar packaging regressions.

Changes:

  • Closes the missing <para> tag.
  • Promotes CS1570 to an error across seven packages.
  • Adds XML documentation artifact tests and updates contributor documentation.

Reviewed changes

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

Show a summary per file
File Description
src/Celerity/Collections/MaxMonoid.cs Repairs malformed XML documentation.
src/Celerity/Celerity.csproj Enforces CS1570.
src/Celerity.Hashing/Celerity.Hashing.csproj Enforces CS1570.
src/Celerity.Primitives/Celerity.Primitives.csproj Enforces CS1570.
src/Celerity.Sorting/Celerity.Sorting.csproj Enforces CS1570.
src/Celerity.Ring/Celerity.Ring.csproj Enforces CS1570.
src/Celerity.Sentinel/Celerity.Sentinel.csproj Enforces CS1570.
src/Celerity.Cardinality/Celerity.Cardinality.csproj Enforces CS1570.
src/Celerity.Tests/Packaging/XmlDocumentationTests.cs Verifies generated documentation artifacts.
CONTRIBUTING.md Documents XML-comment requirements.
CLAUDE.md Updates agent guidance.
ROADMAP.md Records the expanded documentation gate.
CHANGELOG.md Adds release notes for the fix and safeguards.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread CHANGELOG.md Outdated
The separate XmlDocumentationTests bullet named a test class rather than
an observable change, against the "short and user-facing, one tight entry
per change" rule in CONTRIBUTING.md. The prevention outcome now rides on
the CS1570 entry as a clause; the test detail lives in the PR body.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 10, 2026 01:23

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

Suppressed comments (1)

CHANGELOG.md:9

  • This overstates the regression coverage: XmlDocumentationTests anchors only Celerity, Hashing, Primitives, and Sorting; its own comment says Ring, Sentinel, and Cardinality rely solely on the compiler gate (XmlDocumentationTests.cs:27-40). Remove the claim that every package's XML is asserted, or qualify it as the four reachable packages.
- **CS1570 (badly formed XML in a doc comment) is now a build error** in all seven shipping packages, alongside the existing CS1591 gate, and each package's shipped `.xml` is asserted to carry an entry for every public type. A malformed comment is not truncated by the doc writer — the whole member is dropped — so a warning was too weak a signal for something that silently empties a type's documentation. Closes [#356](https://github.com/marius-bughiu/Celerity/issues/356).

The folded entry read as though the shipped .xml of all seven packages
is asserted. It is the CS1570 gate that covers seven; XmlDocumentationTests
reaches the four packages Celerity.Tests references, and the three showcase
packages rely on the compiler gate alone. Reworded so the scope claim
belongs to the gate, not the test.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 10, 2026 01:26
@marius-bughiu

Copy link
Copy Markdown
Owner Author

Copilot's round-2 review suppressed one comment on CHANGELOG.md:9, and it was correct — recording it here since suppressed comments don't open a thread.

This overstates the regression coverage: XmlDocumentationTests anchors only Celerity, Hashing, Primitives, and Sorting […] Remove the claim that every package's XML is asserted, or qualify it as the four reachable packages.

That overclaim was introduced by my own fold in de4ebb6 — "each package's shipped .xml is asserted" reads as all seven, when only the CS1570 gate covers seven. Fixed in 8667ab5 by moving the scope claim onto the gate:

…is now a build error in all seven shipping packages, alongside the existing CS1591 gate, backed by a test that reads the shipped .xml back and asserts an entry for every public type.

I did not extend XmlDocumentationTests to the three showcase packages. Each has its own test project referencing only its own package, so covering them means duplicating the suite three times (or a linked shared file parameterized by anchor type) to re-assert what the compiler gate already enforces at build time in those same projects. The asymmetry is deliberate and documented in the test's class remarks; if you'd rather have it uniform, say so and I'll add it.

On the benchmark note in the PR body: I wrote that scripts/benchmark_relevant_changes.js "should classify this PR as benchmark-inert". It does not — the shards run, because the diff touches .csproj files, which the gate cannot prove inert. The conclusion still holds (a doc comment and a WarningsAsErrors property cannot move a measured number), but the prediction about the gate was wrong.

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

@github-actions

Copy link
Copy Markdown

Benchmarks

2 regressions ⚠️ vs main, 2 improvements ✅ (rows past ±10% and beyond 3σ).

Highlights

Benchmark This PR StdDev main Δ
SortedSpanBenchmark.SortedSpan_IntersectAsymmetric(ItemCount: 100000) 14.74 μs 211.8 ns 12.98 μs +13.5% ⚠️
SortedSpanBenchmark.SortedSpan_IntersectCount(ItemCount: 1000) 2.07 μs 28.9 ns 2.62 μs -21.2% ✅
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 100000) 738.70 μs 3.86 μs 583.53 μs +26.6% ⚠️
StringInternTableBenchmark.HashSet_Lookup(ItemCount: 100000) 3.19 ms 8.98 μs 3.73 ms -14.3% ✅
Collections (646)
Benchmark This PR StdDev main Δ
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 1000) 171.82 μs 1.50 μs 171.93 μs -0.1%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 2.35 ms 45.59 μs 2.31 ms +1.6%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 100000) 29.34 ms 407.49 μs 29.44 ms -0.4%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 100000) 1.50 s 65.64 ms 1.44 s +4.2%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 1000) 7.09 μs 6.9 ns 7.09 μs -0.1%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 1000) 79.63 μs 78.8 ns 79.60 μs +0.0%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 100000) 1.86 ms 6.93 μs 1.91 ms -2.7%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 100000) 8.19 ms 129.63 μs 8.37 ms -2.1%
FenwickTreeBenchmark.Array_Mixed(ItemCount: 1000) 202.95 μs 206.7 ns 202.90 μs +0.0%
FenwickTreeBenchmark.FenwickTree_Mixed(ItemCount: 1000) 11.24 μs 124.3 ns 11.05 μs +1.7%
FenwickTreeBenchmark.Array_Mixed(ItemCount: 100000) 183.85 ms 759.90 μs 184.57 ms -0.4%
FenwickTreeBenchmark.FenwickTree_Mixed(ItemCount: 100000) 625.60 μs 6.34 μs 654.12 μs -4.4%
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 1000) 249.07 μs 473.3 ns 249.16 μs -0.0%
FenwickTreeBenchmark.FenwickTree_RangeSum(ItemCount: 1000) 6.85 μs 11.5 ns 6.85 μs +0.1%
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 100000) 179.26 ms 1.51 ms 225.62 ms -20.5%
FenwickTreeBenchmark.FenwickTree_RangeSum(ItemCount: 100000) 210.95 μs 769.1 ns 212.42 μs -0.7%
CeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 12.12 μs 294.8 ns 12.24 μs -1.0%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 1000) 8.41 μs 23.3 ns 8.41 μs +0.0%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 1000) 8.48 μs 121.2 ns 8.69 μs -2.4%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 1000) 9.23 μs 85.6 ns 9.21 μs +0.2%
CeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 4.56 ms 224.68 μs 4.66 ms -2.2%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 100000) 1.10 ms 3.78 μs 1.11 ms -0.3%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 100000) 3.47 ms 26.29 μs 3.47 ms +0.1%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 100000) 746.75 μs 730.0 ns 748.13 μs -0.2%
BitSetBenchmark.BitArray_And(ItemCount: 1024) 53.9 ns 0.6 ns 54.4 ns -0.8%
BitSetBenchmark.BitSet_And(ItemCount: 1024) 1.03 μs 44.5 ns 1.07 μs -3.9%
BitSetBenchmark.BitArray_And(ItemCount: 1000000) 51.56 μs 988.1 ns 51.04 μs +1.0%
BitSetBenchmark.BitSet_And(ItemCount: 1000000) 5.27 ms 2.99 μs 5.28 ms -0.0%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 3.40 μs 2.6 ns 3.40 μs -0.0%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 1000) 1.87 μs 116.4 ns 1.88 μs -0.5%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.39 ms 2.86 μs 1.40 ms -0.6%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 100000) 579.49 μs 9.31 μs 576.81 μs +0.5%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 1000) 3.35 μs 4.5 ns 3.35 μs +0.1%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 1000) 5.90 μs 24.8 ns 5.91 μs -0.2%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 100000) 360.77 μs 697.5 ns 361.43 μs -0.2%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 100000) 2.35 ms 4.45 μs 2.35 ms -0.0%
LruCacheBenchmark.Dictionary_Get(ItemCount: 1000) 26.35 μs 114.7 ns 26.29 μs +0.2%
LruCacheBenchmark.LruCache_Get(ItemCount: 1000) 5.61 μs 91.0 ns 5.73 μs -2.1%
LruCacheBenchmark.Dictionary_Get(ItemCount: 100000) 27.51 μs 46.8 ns 27.51 μs +0.0%
LruCacheBenchmark.LruCache_Get(ItemCount: 100000) 5.65 μs 23.0 ns 5.82 μs -2.8%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 1000) 3.70 μs 22.1 ns 3.69 μs +0.3%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 1000) 4.48 μs 11.6 ns 4.47 μs +0.1%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 100000) 443.92 μs 1.37 μs 445.49 μs -0.4%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 100000) 1.68 ms 1.01 μs 1.68 ms -0.1%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 14.12 μs 226.4 ns 13.48 μs +4.7%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 1000) 7.26 μs 25.8 ns 7.21 μs +0.7%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.51 ms 77.40 μs 4.54 ms -0.7%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 100000) 3.22 ms 5.90 μs 3.21 ms +0.3%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 3.54 μs 14.7 ns 3.46 μs +2.2%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 1000) 2.24 μs 7.0 ns 2.17 μs +2.8%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.44 ms 8.74 μs 1.43 ms +0.5%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 100000) 712.46 μs 6.12 μs 711.04 μs +0.2%
BitSetBenchmark.BitArray_Or(ItemCount: 1024) 53.6 ns 0.6 ns 53.9 ns -0.5%
BitSetBenchmark.BitSet_Or(ItemCount: 1024) 1.07 μs 2.9 ns 1.07 μs +0.0%
BitSetBenchmark.BitArray_Or(ItemCount: 1000000) 51.98 μs 1.01 μs 51.86 μs +0.2%
BitSetBenchmark.BitSet_Or(ItemCount: 1000000) 5.27 ms 3.96 μs 5.27 ms -0.1%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1024) 1.15 μs 7.8 ns 1.15 μs -0.2%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1024) 8.1 ns 0.0 ns 8.1 ns -0.0%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1000000) 5.56 ms 2.51 μs 5.57 ms -0.1%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1000000) 7.46 μs 23.5 ns 7.46 μs +0.0%
LruCacheBenchmark.Dictionary_Put(ItemCount: 1000) 83.43 μs 6.10 μs 78.77 μs +5.9%
LruCacheBenchmark.LruCache_Put(ItemCount: 1000) 313.03 μs 17.14 μs 320.72 μs -2.4%
LruCacheBenchmark.Dictionary_Put(ItemCount: 100000) 6.21 ms 45.44 μs 6.37 ms -2.5%
LruCacheBenchmark.LruCache_Put(ItemCount: 100000) 6.69 ms 39.54 μs 6.67 ms +0.3%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 24.92 μs 1.65 μs 27.15 μs -8.2%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 71.38 μs 11.16 μs 71.43 μs -0.1%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 1000) 105.53 μs 11.11 μs 104.36 μs +1.1%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 1000) 112.24 μs 12.45 μs 110.11 μs +1.9%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.58 ms 10.01 μs 1.61 ms -2.0%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.82 ms 22.35 μs 1.82 ms -0.2%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 100000) 1.46 ms 21.69 μs 1.46 ms -0.3%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 100000) 2.68 ms 2.24 ms 2.73 ms -1.9%
PartialSortBenchmark.Array_Select(ItemCount: 100) 531.6 ns 4.8 ns 530.6 ns +0.2%
PartialSortBenchmark.PartialSort_Select(ItemCount: 100) 354.3 ns 26.4 ns 345.6 ns +2.5%
PartialSortBenchmark.Array_Select(ItemCount: 1000) 9.12 μs 55.7 ns 9.09 μs +0.3%
PartialSortBenchmark.PartialSort_Select(ItemCount: 1000) 5.27 μs 8.2 ns 5.27 μs -0.0%
PartialSortBenchmark.Array_Select(ItemCount: 100000) 6.73 ms 30.90 μs 6.70 ms +0.4%
PartialSortBenchmark.PartialSort_Select(ItemCount: 100000) 1.36 ms 3.38 μs 1.34 ms +1.3%
PartialSortBenchmark.Array_Select(ItemCount: 1000000) 80.05 ms 71.09 μs 80.11 ms -0.1%
PartialSortBenchmark.PartialSort_Select(ItemCount: 1000000) 10.14 ms 33.93 μs 10.14 ms -0.0%
PartialSortBenchmark.Array_SortPrefix(ItemCount: 100) 528.5 ns 7.4 ns 529.1 ns -0.1%
PartialSortBenchmark.PartialSort_SortPrefix(ItemCount: 100) 402.9 ns 14.6 ns 361.6 ns +11.4%
PartialSortBenchmark.Array_SortPrefix(ItemCount: 1000) 8.24 μs 876.8 ns 8.25 μs -0.1%
PartialSortBenchmark.PartialSort_SortPrefix(ItemCount: 1000) 4.92 μs 49.8 ns 5.33 μs -7.6%
PartialSortBenchmark.Array_SortPrefix(ItemCount: 100000) 6.71 ms 11.44 μs 6.73 ms -0.3%
PartialSortBenchmark.PartialSort_SortPrefix(ItemCount: 100000) 1.45 ms 39.65 μs 1.47 ms -1.1%
PartialSortBenchmark.Array_SortPrefix(ItemCount: 1000000) 80.16 ms 51.46 μs 80.40 ms -0.3%
PartialSortBenchmark.PartialSort_SortPrefix(ItemCount: 1000000) 11.90 ms 633.27 μs 11.52 ms +3.3%
PartialSortBenchmark.Array_TopK(ItemCount: 100) 495.1 ns 9.1 ns 500.7 ns -1.1%
PartialSortBenchmark.PartialSort_TopK(ItemCount: 100) 81.1 ns 1.5 ns 80.7 ns +0.4%
PartialSortBenchmark.Array_TopK(ItemCount: 1000) 8.78 μs 119.0 ns 8.85 μs -0.8%
PartialSortBenchmark.PartialSort_TopK(ItemCount: 1000) 1.48 μs 2.5 ns 1.48 μs -0.0%
PartialSortBenchmark.Array_TopK(ItemCount: 100000) 2.15 ms 106.44 μs 2.16 ms -0.3%
PartialSortBenchmark.PartialSort_TopK(ItemCount: 100000) 562.62 μs 4.07 μs 570.48 μs -1.4%
PartialSortBenchmark.Array_TopK(ItemCount: 1000000) 24.99 ms 213.01 μs 24.92 ms +0.3%
PartialSortBenchmark.PartialSort_TopK(ItemCount: 1000000) 6.35 ms 172.80 μs 6.54 ms -2.9%
PartialSortBenchmark.Array_TopKHeap(ItemCount: 100) 151.3 ns 3.4 ns 156.3 ns -3.1%
PartialSortBenchmark.PartialSort_TopKHeap(ItemCount: 100) 81.0 ns 1.4 ns 80.9 ns +0.2%
PartialSortBenchmark.Array_TopKHeap(ItemCount: 1000) 1.87 μs 14.5 ns 1.86 μs +1.0%
PartialSortBenchmark.PartialSort_TopKHeap(ItemCount: 1000) 1.48 μs 2.7 ns 1.48 μs -0.1%
PartialSortBenchmark.Array_TopKHeap(ItemCount: 100000) 640.99 μs 4.64 μs 629.71 μs +1.8%
PartialSortBenchmark.PartialSort_TopKHeap(ItemCount: 100000) 518.23 μs 48.39 μs 521.68 μs -0.7%
PartialSortBenchmark.Array_TopKHeap(ItemCount: 1000000) 8.25 ms 234.51 μs 7.87 ms +4.8%
PartialSortBenchmark.PartialSort_TopKHeap(ItemCount: 1000000) 6.58 ms 6.05 μs 6.58 ms -0.1%
BitSetBenchmark.BitArray_Xor(ItemCount: 1024) 52.7 ns 0.5 ns 53.5 ns -1.4%
BitSetBenchmark.BitSet_Xor(ItemCount: 1024) 1.07 μs 3.0 ns 1.07 μs +0.1%
BitSetBenchmark.BitArray_Xor(ItemCount: 1000000) 51.51 μs 937.2 ns 51.24 μs +0.5%
BitSetBenchmark.BitSet_Xor(ItemCount: 1000000) 5.28 ms 4.70 μs 5.28 ms +0.0%
EnumSetBenchmark.HashSet_Add 592.4 ns 3.4 ns 586.8 ns +1.0%
EnumSetBenchmark.EnumSet_Add 84.2 ns 2.6 ns 84.2 ns +0.0%
BloomFilterBenchmark.HashSet_Add(ItemCount: 1000) 12.82 μs 200.5 ns 12.98 μs -1.2%
SparseSetBenchmark.HashSet_Add(ItemCount: 1000) 6.64 μs 24.4 ns 6.67 μs -0.3%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 1000) 16.38 μs 41.6 ns 16.37 μs +0.0%
SparseSetBenchmark.SparseSet_Add(ItemCount: 1000) 6.43 μs 32.7 ns 6.56 μs -2.0%
BloomFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.72 ms 100.36 μs 4.70 ms +0.4%
SparseSetBenchmark.HashSet_Add(ItemCount: 100000) 1.70 ms 31.90 μs 1.70 ms +0.2%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 100000) 1.26 ms 1.70 μs 1.26 ms -0.1%
SparseSetBenchmark.SparseSet_Add(ItemCount: 100000) 1.49 ms 46.84 μs 1.51 ms -1.7%
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 1000) 6.14 μs 54.4 ns 6.17 μs -0.4%
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 1000) 4.99 μs 12.2 ns 5.35 μs -6.7%
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 100000) 1.29 ms 6.63 μs 1.29 ms -0.6%
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 100000) 679.15 μs 748.7 ns 677.76 μs +0.2%
EnumSetBenchmark.HashSet_Contains 171.2 ns 0.2 ns 170.6 ns +0.3%
EnumSetBenchmark.EnumSet_Contains 51.6 ns 0.0 ns 51.6 ns +0.0%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 11.2 ns 4.73 μs +0.2%
SparseSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.61 μs 7.0 ns 4.63 μs -0.3%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 1000) 14.18 μs 6.3 ns 14.19 μs -0.1%
SparseSetBenchmark.SparseSet_Contains(ItemCount: 1000) 1.43 μs 1.0 ns 1.43 μs +0.1%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.57 ms 37.54 μs 1.56 ms +0.6%
SparseSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.23 ms 52.05 μs 1.27 ms -3.6%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 100000) 982.42 μs 679.3 ns 982.87 μs -0.0%
SparseSetBenchmark.SparseSet_Contains(ItemCount: 100000) 264.56 μs 2.27 μs 262.73 μs +0.7%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.57 μs 2.8 ns 4.56 μs +0.1%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 1000) 3.98 μs 2.2 ns 3.98 μs +0.0%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.93 ms 69.54 μs 1.95 ms -0.7%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 100000) 1.67 ms 2.13 μs 1.67 ms +0.1%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 1000) 9.78 μs 23.5 ns 9.77 μs +0.1%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 1000) 5.31 μs 8.3 ns 5.31 μs +0.0%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 100000) 1.36 ms 20.45 μs 1.34 ms +1.6%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 100000) 707.67 μs 42.09 μs 681.73 μs +3.8%
SortedSpanBenchmark.HashSet_Except(ItemCount: 1000) 12.54 μs 60.6 ns 12.74 μs -1.6%
SortedSpanBenchmark.Linq_ExceptLinq(ItemCount: 1000) 20.67 μs 50.1 ns 21.14 μs -2.2%
SortedSpanBenchmark.SortedSpan_Except(ItemCount: 1000) 2.43 μs 111.4 ns 2.50 μs -2.8%
SortedSpanBenchmark.HashSet_Except(ItemCount: 100000) 2.64 ms 14.61 μs 2.66 ms -0.7%
SortedSpanBenchmark.Linq_ExceptLinq(ItemCount: 100000) 3.89 ms 83.79 μs 3.84 ms +1.3%
SortedSpanBenchmark.SortedSpan_Except(ItemCount: 100000) 997.42 μs 5.71 μs 998.88 μs -0.1%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.17 μs 135.8 ns 13.12 μs +0.4%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 1000) 29.50 μs 89.6 ns 29.33 μs +0.6%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.95 ms 110.24 μs 4.98 ms -0.6%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 100000) 3.85 ms 18.67 μs 3.84 ms +0.3%
SortedSpanBenchmark.HashSet_Intersect(ItemCount: 1000) 20.84 μs 224.5 ns 20.90 μs -0.3%
SortedSpanBenchmark.Linq_IntersectLinq(ItemCount: 1000) 15.23 μs 120.0 ns 15.02 μs +1.4%
SortedSpanBenchmark.SortedSpan_Intersect(ItemCount: 1000) 2.56 μs 51.6 ns 2.42 μs +6.0%
SortedSpanBenchmark.HashSet_Intersect(ItemCount: 100000) 4.16 ms 20.95 μs 4.18 ms -0.3%
SortedSpanBenchmark.Linq_IntersectLinq(ItemCount: 100000) 2.96 ms 19.84 μs 2.98 ms -0.8%
SortedSpanBenchmark.SortedSpan_Intersect(ItemCount: 100000) 969.64 μs 1.12 μs 968.84 μs +0.1%
SortedSpanBenchmark.HashSet_IntersectAsymmetric(ItemCount: 1000) 8.71 μs 101.6 ns 8.50 μs +2.5%
SortedSpanBenchmark.SortedSpan_IntersectAsymmetric(ItemCount: 1000) 108.5 ns 0.7 ns 108.6 ns -0.1%
SortedSpanBenchmark.HashSet_IntersectAsymmetric(ItemCount: 100000) 1.76 ms 9.20 μs 1.74 ms +1.0%
SortedSpanBenchmark.SortedSpan_IntersectAsymmetric(ItemCount: 100000) 14.74 μs 211.8 ns 12.98 μs +13.5% ⚠️
SortedSpanBenchmark.HashSet_IntersectCount(ItemCount: 1000) 12.29 μs 50.4 ns 12.22 μs +0.6%
SortedSpanBenchmark.SortedSpan_IntersectCount(ItemCount: 1000) 2.07 μs 28.9 ns 2.62 μs -21.2% ✅
SortedSpanBenchmark.HashSet_IntersectCount(ItemCount: 100000) 2.69 ms 55.85 μs 2.64 ms +1.7%
SortedSpanBenchmark.SortedSpan_IntersectCount(ItemCount: 100000) 962.52 μs 13.66 μs 971.16 μs -0.9%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.73 μs 78.2 ns 4.67 μs +1.4%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.91 μs 71.6 ns 4.72 μs +4.1%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 1000) 1.96 μs 8.1 ns 1.95 μs +0.4%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 1000) 3.08 μs 219.3 ns 2.87 μs +7.5%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 100000) 559.07 μs 746.8 ns 560.51 μs -0.3%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 10.42 μs 1.60 ms -0.1%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 100000) 215.09 μs 214.0 ns 214.06 μs +0.5%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 100000) 657.56 μs 3.61 μs 667.39 μs -1.5%
SegmentTreeBenchmark.Array_Mixed(ItemCount: 1000) 158.46 μs 727.4 ns 158.49 μs -0.0%
SegmentTreeBenchmark.SegmentTree_Mixed(ItemCount: 1000) 38.10 μs 1.66 μs 39.20 μs -2.8%
SegmentTreeBenchmark.Array_Mixed(ItemCount: 100000) 23.53 ms 31.65 μs 23.57 ms -0.2%
SegmentTreeBenchmark.SegmentTree_Mixed(ItemCount: 100000) 1.34 ms 17.89 μs 1.32 ms +0.9%
SortedSpanBenchmark.HashSet_Overlaps(ItemCount: 1000) 8.13 μs 79.5 ns 8.18 μs -0.7%
SortedSpanBenchmark.SortedSpan_Overlaps(ItemCount: 1000) 8.4 ns 0.2 ns 8.3 ns +0.7%
SortedSpanBenchmark.HashSet_Overlaps(ItemCount: 100000) 1.30 ms 28.80 μs 1.28 ms +1.8%
SortedSpanBenchmark.SortedSpan_Overlaps(ItemCount: 100000) 4.2 ns 0.0 ns 4.6 ns -8.7%
SegmentTreeBenchmark.Array_RangeMin(ItemCount: 1000) 207.13 μs 339.2 ns 207.28 μs -0.1%
SegmentTreeBenchmark.SegmentTree_RangeMin(ItemCount: 1000) 21.36 μs 14.1 ns 21.37 μs -0.1%
SegmentTreeBenchmark.Array_RangeMin(ItemCount: 100000) 34.44 ms 32.31 μs 34.46 ms -0.0%
SegmentTreeBenchmark.SegmentTree_RangeMin(ItemCount: 100000) 75.22 μs 1.07 μs 75.70 μs -0.6%
EnumSetBenchmark.HashSet_Remove 2.96 μs 478.7 ns 2.28 μs +29.8%
EnumSetBenchmark.EnumSet_Remove 1.01 μs 67.2 ns 913.0 ns +10.9%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 1000) 51.80 μs 5.49 μs 51.54 μs +0.5%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 78.67 μs 6.95 μs 80.12 μs -1.8%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 1000) 84.38 μs 2.70 μs 83.49 μs +1.1%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 1000) 70.56 μs 4.19 μs 70.39 μs +0.2%
SparseSetBenchmark.HashSet_Remove(ItemCount: 1000) 28.10 μs 4.04 μs 24.73 μs +13.7%
SparseSetBenchmark.SparseSet_Remove(ItemCount: 1000) 21.44 μs 1.55 μs 24.05 μs -10.9%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 100000) 557.92 μs 13.30 μs 566.03 μs -1.4%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.99 ms 17.28 μs 1.99 ms -0.2%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 100000) 930.88 μs 214.56 μs 1.42 ms -34.3%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 100000) 1.29 ms 46.26 μs 1.30 ms -0.3%
SparseSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.47 ms 14.43 μs 1.48 ms -0.4%
SparseSetBenchmark.SparseSet_Remove(ItemCount: 100000) 645.99 μs 14.97 μs 645.69 μs +0.0%
EnumSetBenchmark.HashSet_Union 408.6 ns 6.5 ns 415.1 ns -1.6%
EnumSetBenchmark.EnumSet_Union 22.1 ns 0.2 ns 22.9 ns -3.3%
SortedSpanBenchmark.HashSet_Union(ItemCount: 1000) 18.71 μs 101.1 ns 18.60 μs +0.6%
SortedSpanBenchmark.Linq_UnionLinq(ItemCount: 1000) 20.43 μs 166.6 ns 20.25 μs +0.9%
SortedSpanBenchmark.SortedSpan_Union(ItemCount: 1000) 2.90 μs 5.2 ns 2.90 μs -0.1%
SortedSpanBenchmark.HashSet_Union(ItemCount: 100000) 3.59 ms 43.64 μs 3.60 ms -0.1%
SortedSpanBenchmark.Linq_UnionLinq(ItemCount: 100000) 5.98 ms 595.60 μs 5.99 ms -0.2%
SortedSpanBenchmark.SortedSpan_Union(ItemCount: 100000) 1.02 ms 7.16 μs 1.01 ms +0.4%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 1000) 13.26 μs 279.3 ns 13.38 μs -0.9%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 1000) 12.21 μs 372.2 ns 13.13 μs -7.0%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 1000) 7.24 μs 17.8 ns 7.21 μs +0.4%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 1000) 27.36 μs 134.6 ns 27.56 μs -0.7%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.69 ms 100.15 μs 4.70 ms -0.1%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 100000) 4.92 ms 113.16 μs 4.84 ms +1.7%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 100000) 2.08 ms 5.75 μs 2.09 ms -0.6%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 100000) 575.33 μs 559.0 ns 577.36 μs -0.4%
XorFilterBenchmark.HashSet_Build(ItemCount: 1000) 8.02 μs 113.7 ns 8.04 μs -0.2%
XorFilterBenchmark.XorFilter_Build(ItemCount: 1000) 39.25 μs 737.4 ns 40.48 μs -3.0%
XorFilterBenchmark.HashSet_Build(ItemCount: 100000) 2.06 ms 19.82 μs 2.09 ms -1.8%
XorFilterBenchmark.XorFilter_Build(ItemCount: 100000) 12.47 ms 228.98 μs 12.74 ms -2.1%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 12.6 ns 4.72 μs +0.1%
XorFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.75 μs 45.5 ns 4.75 μs +0.1%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 1000) 4.92 μs 9.1 ns 4.92 μs +0.0%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 1000) 6.77 μs 3.9 ns 6.78 μs -0.1%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.59 ms 1.63 μs 1.59 ms +0.2%
XorFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.56 ms 44.11 μs 1.61 ms -2.7%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 100000) 1.74 ms 8.93 μs 1.74 ms +0.1%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 100000) 707.76 μs 4.35 μs 703.42 μs +0.6%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 5.7 ns 4.54 μs +0.1%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 8.1 ns 4.54 μs +0.0%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 1000) 8.43 μs 5.3 ns 8.43 μs +0.0%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 1000) 6.77 μs 3.6 ns 6.77 μs -0.0%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.94 ms 12.71 μs 1.93 ms +0.5%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.92 ms 22.99 μs 1.94 ms -1.2%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 100000) 875.01 μs 755.8 ns 875.96 μs -0.1%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 100000) 705.34 μs 259.8 ns 705.05 μs +0.0%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 1000) 0.0 ns 0.0 ns 0.0 ns -61.2%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 1000) 23.44 μs 17.5 ns 23.45 μs -0.0%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 100000) 0.0 ns 0.0 ns 0.0 ns -88.1%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 100000) 22.98 μs 22.3 ns 22.98 μs +0.0%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 8) 160.8 ns 1.4 ns 174.2 ns -7.7%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 8) 86.9 ns 1.3 ns 96.4 ns -9.9%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 64) 767.9 ns 9.8 ns 837.7 ns -8.3%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 64) 1.08 μs 11.3 ns 1.10 μs -2.0%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.60 μs 421.8 ns 13.30 μs +2.3%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 1000) 11.62 μs 222.4 ns 11.39 μs +2.0%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.68 ms 47.17 μs 4.75 ms -1.4%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 100000) 6.59 ms 304.70 μs 6.50 ms +1.3%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 8) 38.8 ns 1.8 ns 36.9 ns +5.2%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 8) 29.0 ns 4.9 ns 29.1 ns -0.3%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 64) 296.9 ns 0.4 ns 298.9 ns -0.7%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 64) 1.10 μs 11.1 ns 1.10 μs +0.1%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.75 μs 36.4 ns 4.73 μs +0.4%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 1000) 2.66 μs 2.9 ns 2.65 μs +0.3%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.59 ms 1.86 μs 1.61 ms -0.8%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 100000) 811.07 μs 1.69 μs 822.48 μs -1.4%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 8) 1.36 μs 71.2 ns 1.32 μs +3.2%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 8) 1.60 μs 354.2 ns 1.53 μs +5.0%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 64) 5.68 μs 763.6 ns 5.29 μs +7.2%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 64) 21.84 μs 813.8 ns 29.33 μs -25.5%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 81.44 μs 8.18 μs 84.44 μs -3.5%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 1000) 122.11 μs 7.74 μs 121.72 μs +0.3%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 1000) 13.19 μs 210.3 ns 13.14 μs +0.4%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 1000) 12.95 μs 52.7 ns 12.99 μs -0.3%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.04 ms 11.83 μs 2.06 ms -0.9%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 100000) 1.73 ms 14.53 μs 1.91 ms -9.2%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 100000) 3.82 ms 35.06 μs 3.79 ms +0.6%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 100000) 3.97 ms 16.52 μs 3.98 ms -0.2%
CompressedIntSetBenchmark.HashSet_Add(ItemCount: 1000) 11.97 μs 81.6 ns 12.00 μs -0.3%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 1000) 11.99 μs 71.0 ns 12.14 μs -1.2%
LongSetBenchmark.HashSet_Add(ItemCount: 1000) 15.17 μs 2.01 μs 13.49 μs +12.5%
CompressedIntSetBenchmark.CompressedIntSet_Add(ItemCount: 1000) 33.41 μs 657.4 ns 33.44 μs -0.1%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 1000) 10.74 μs 141.4 ns 10.91 μs -1.6%
LongSetBenchmark.LongSet_Add(ItemCount: 1000) 9.18 μs 81.8 ns 9.24 μs -0.6%
CompressedIntSetBenchmark.HashSet_Add(ItemCount: 100000) 3.46 ms 66.86 μs 3.46 ms +0.2%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 100000) 4.49 ms 433.58 μs 4.30 ms +4.6%
LongSetBenchmark.HashSet_Add(ItemCount: 100000) 4.52 ms 243.63 μs 4.54 ms -0.6%
CompressedIntSetBenchmark.CompressedIntSet_Add(ItemCount: 100000) 10.70 ms 32.07 μs 10.64 ms +0.6%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 100000) 5.19 ms 102.60 μs 5.23 ms -0.9%
LongSetBenchmark.LongSet_Add(ItemCount: 100000) 6.06 ms 57.39 μs 6.08 ms -0.2%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 1000) 159.58 μs 681.0 ns 160.30 μs -0.4%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 1000) 3.78 ms 179.21 μs 3.77 ms +0.4%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 100000) 28.45 ms 238.46 μs 28.59 ms -0.5%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 100000) 1.51 s 36.41 ms 1.58 s -4.8%
CompressedIntSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.70 μs 7.7 ns 4.70 μs -0.1%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 4.9 ns 4.73 μs -0.1%
LongSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.81 μs 46.4 ns 4.79 μs +0.4%
CompressedIntSetBenchmark.CompressedIntSet_Contains(ItemCount: 1000) 13.48 μs 26.4 ns 13.48 μs +0.0%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 1000) 2.53 μs 3.5 ns 2.53 μs +0.0%
LongSetBenchmark.LongSet_Contains(ItemCount: 1000) 2.01 μs 8.3 ns 2.00 μs +0.5%
StringKeyProbeBenchmark.HashSet_Contains(ItemCount: 1000) 18.07 μs 96.6 ns 18.01 μs +0.3%
StringKeyProbeBenchmark.CeleritySet_Contains(ItemCount: 1000) 24.23 μs 49.9 ns 24.33 μs -0.4%
CompressedIntSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.51 ms 41.64 μs 1.55 ms -2.7%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.57 ms 22.52 μs 1.58 ms -1.0%
LongSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.63 ms 13.81 μs 1.63 ms -0.1%
CompressedIntSetBenchmark.CompressedIntSet_Contains(ItemCount: 100000) 8.30 ms 46.75 μs 8.34 ms -0.5%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 100000) 722.65 μs 2.25 μs 724.57 μs -0.3%
LongSetBenchmark.LongSet_Contains(ItemCount: 100000) 639.45 μs 2.04 μs 638.85 μs +0.1%
StringKeyProbeBenchmark.HashSet_Contains(ItemCount: 100000) 3.40 ms 12.34 μs 3.41 ms -0.3%
StringKeyProbeBenchmark.CeleritySet_Contains(ItemCount: 100000) 4.73 ms 50.25 μs 4.77 ms -0.9%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 6.0 ns 4.54 μs +0.1%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 1000) 3.11 μs 159.2 ns 3.10 μs +0.2%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.93 ms 8.88 μs 1.93 ms +0.3%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 100000) 1.13 ms 2.10 μs 1.13 ms -0.3%
CompressedIntSetBenchmark.HashSet_Except(ItemCount: 1000) 58.72 μs 7.01 μs 60.34 μs -2.7%
CompressedIntSetBenchmark.CompressedIntSet_Except(ItemCount: 1000) 70.89 μs 8.46 μs 66.71 μs +6.3%
CompressedIntSetBenchmark.HashSet_Except(ItemCount: 100000) 2.54 ms 19.27 μs 2.54 ms -0.0%
CompressedIntSetBenchmark.CompressedIntSet_Except(ItemCount: 100000) 1.06 ms 9.35 μs 1.08 ms -1.9%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.33 μs 444.5 ns 14.41 μs -7.5%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 1000) 17.52 μs 123.5 ns 17.44 μs +0.4%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.65 ms 75.16 μs 4.75 ms -2.0%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 100000) 7.79 ms 643.52 μs 7.70 ms +1.2%
CompressedIntSetBenchmark.HashSet_IntersectClustered(ItemCount: 1000) 41.11 μs 8.43 μs 40.37 μs +1.8%
CompressedIntSetBenchmark.CompressedIntSet_IntersectClustered(ItemCount: 1000) 1.25 μs 64.0 ns 1.72 μs -27.3%
CompressedIntSetBenchmark.HashSet_IntersectClustered(ItemCount: 100000) 965.93 μs 8.31 μs 967.73 μs -0.2%
CompressedIntSetBenchmark.CompressedIntSet_IntersectClustered(ItemCount: 100000) 2.14 μs 375.4 ns 1.92 μs +11.3%
CompressedIntSetBenchmark.HashSet_IntersectDense(ItemCount: 1000) 46.31 μs 7.50 μs 47.37 μs -2.2%
CompressedIntSetBenchmark.CompressedIntSet_IntersectDense(ItemCount: 1000) 53.10 μs 4.02 μs 52.39 μs +1.4%
CompressedIntSetBenchmark.HashSet_IntersectDense(ItemCount: 100000) 3.11 ms 11.37 μs 3.07 ms +1.2%
CompressedIntSetBenchmark.CompressedIntSet_IntersectDense(ItemCount: 100000) 86.94 μs 30.28 μs 86.47 μs +0.5%
CompressedIntSetBenchmark.HashSet_IntersectSparse(ItemCount: 1000) 49.54 μs 3.36 μs 59.90 μs -17.3%
CompressedIntSetBenchmark.CompressedIntSet_IntersectSparse(ItemCount: 1000) 51.83 μs 2.59 μs 59.46 μs -12.8%
CompressedIntSetBenchmark.HashSet_IntersectSparse(ItemCount: 100000) 3.93 ms 23.94 μs 3.86 ms +1.8%
CompressedIntSetBenchmark.CompressedIntSet_IntersectSparse(ItemCount: 100000) 956.37 μs 10.48 μs 952.15 μs +0.4%
StringKeyProbeBenchmark.Dictionary_Lookup(ItemCount: 1000) 18.62 μs 310.9 ns 18.79 μs -1.0%
StringKeyProbeBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 26.58 μs 87.7 ns 26.68 μs -0.4%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 1000) 7.32 μs 11.6 ns 7.32 μs +0.0%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.74 μs 17.4 ns 4.73 μs +0.2%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 1000) 87.86 μs 3.05 μs 86.37 μs +1.7%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 1000) 2.81 μs 10.9 ns 2.83 μs -0.7%
StringKeyProbeBenchmark.Dictionary_Lookup(ItemCount: 100000) 3.52 ms 6.39 μs 3.54 ms -0.5%
StringKeyProbeBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 5.10 ms 49.07 μs 5.12 ms -0.4%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 100000) 1.98 ms 12.40 μs 1.98 ms +0.1%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.56 ms 47.88 μs 1.60 ms -2.5%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 100000) 7.62 ms 42.16 μs 7.61 ms +0.2%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 100000) 854.92 μs 3.89 μs 856.35 μs -0.2%
StringKeyProbeBenchmark.Dictionary_LookupMissing(ItemCount: 1000) 14.93 μs 41.5 ns 14.93 μs -0.0%
StringKeyProbeBenchmark.CelerityDictionary_LookupMissing(ItemCount: 1000) 28.59 μs 99.3 ns 28.76 μs -0.6%
StringKeyProbeBenchmark.Dictionary_LookupMissing(ItemCount: 100000) 3.89 ms 16.72 μs 3.85 ms +0.9%
StringKeyProbeBenchmark.CelerityDictionary_LookupMissing(ItemCount: 100000) 5.45 ms 204.63 μs 5.34 ms +2.1%
LongSetBenchmark.HashSet_Remove(ItemCount: 1000) 76.95 μs 6.98 μs 81.47 μs -5.6%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 81.21 μs 6.73 μs 83.91 μs -3.2%
LongSetBenchmark.LongSet_Remove(ItemCount: 1000) 87.81 μs 5.15 μs 84.14 μs +4.4%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 1000) 110.40 μs 4.49 μs 118.22 μs -6.6%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 1000) 30.33 μs 3.79 μs 31.75 μs -4.5%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 1000) 118.90 μs 4.75 μs 111.92 μs +6.2%
LongSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.97 ms 11.42 μs 1.98 ms -0.2%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.04 ms 15.25 μs 2.06 ms -0.6%
LongSetBenchmark.LongSet_Remove(ItemCount: 100000) 1.43 ms 9.75 μs 1.43 ms +0.2%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 100000) 1.74 ms 25.35 μs 1.75 ms -0.6%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.72 ms 10.31 μs 1.71 ms +0.1%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 100000) 1.55 ms 14.14 μs 1.55 ms -0.0%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_SpanLookup(ItemCount: 1000) 29.88 μs 127.8 ns 30.18 μs -1.0%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_SpanLookup(ItemCount: 1000) 92.15 μs 1.17 μs 91.70 μs +0.5%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_SpanLookup(ItemCount: 100000) 5.74 ms 50.06 μs 5.80 ms -1.2%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_SpanLookup(ItemCount: 100000) 8.58 ms 17.88 μs 8.18 ms +4.9%
CompressedIntSetBenchmark.HashSet_Union(ItemCount: 1000) 27.25 μs 478.9 ns 34.88 μs -21.9%
CompressedIntSetBenchmark.CompressedIntSet_Union(ItemCount: 1000) 79.93 μs 6.72 μs 76.95 μs +3.9%
CompressedIntSetBenchmark.HashSet_Union(ItemCount: 100000) 3.96 ms 37.31 μs 3.94 ms +0.5%
CompressedIntSetBenchmark.CompressedIntSet_Union(ItemCount: 100000) 1.17 ms 18.17 μs 1.19 ms -2.1%
EnumMapBenchmark.Dictionary_Add 665.3 ns 21.0 ns 607.4 ns +9.5%
EnumMapBenchmark.EnumMap_Add 159.2 ns 1.0 ns 150.5 ns +5.7%
SmallSetBenchmark.HashSet_Add(ItemCount: 8) 173.9 ns 4.0 ns 171.5 ns +1.4%
SmallSetBenchmark.SmallSet_Add(ItemCount: 8) 48.4 ns 0.5 ns 48.3 ns +0.2%
SmallSetBenchmark.HashSet_Add(ItemCount: 64) 809.5 ns 11.9 ns 804.8 ns +0.6%
SmallSetBenchmark.SmallSet_Add(ItemCount: 64) 1.95 μs 295.4 ns 1.69 μs +15.8%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 1000) 13.28 μs 344.1 ns 13.13 μs +1.2%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 1000) 14.10 μs 94.3 ns 13.46 μs +4.8%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 1000) 17.95 μs 153.4 ns 18.34 μs -2.1%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 1000) 84.88 μs 2.49 μs 88.22 μs -3.8%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 100000) 4.29 ms 549.27 μs 4.32 ms -0.7%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 100000) 3.27 ms 44.30 μs 3.21 ms +1.7%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 100000) 6.36 ms 41.02 μs 6.40 ms -0.6%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 100000) 14.54 ms 71.03 μs 14.47 ms +0.5%
RadixSortBenchmark.Array_ArgSort(ItemCount: 100) 787.1 ns 2.1 ns 790.1 ns -0.4%
RadixSortBenchmark.RadixSort_ArgSort(ItemCount: 100) 2.81 μs 4.6 ns 2.81 μs +0.2%
RadixSortBenchmark.Array_ArgSort(ItemCount: 1000) 12.11 μs 344.2 ns 11.77 μs +2.9%
RadixSortBenchmark.RadixSort_ArgSort(ItemCount: 1000) 19.95 μs 181.5 ns 20.07 μs -0.6%
RadixSortBenchmark.Array_ArgSort(ItemCount: 100000) 6.24 ms 10.83 μs 6.24 ms -0.1%
RadixSortBenchmark.RadixSort_ArgSort(ItemCount: 100000) 2.07 ms 4.17 μs 2.07 ms -0.1%
RadixSortBenchmark.Array_ArgSort(ItemCount: 1000000) 73.21 ms 171.52 μs 73.32 ms -0.1%
RadixSortBenchmark.RadixSort_ArgSort(ItemCount: 1000000) 20.38 ms 684.71 μs 20.00 ms +1.9%
SmallSetBenchmark.HashSet_Contains(ItemCount: 8) 37.2 ns 0.0 ns 37.2 ns +0.2%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 8) 19.1 ns 0.1 ns 19.1 ns +0.2%
SmallSetBenchmark.HashSet_Contains(ItemCount: 64) 311.1 ns 11.6 ns 299.9 ns +3.7%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 64) 1.10 μs 13.3 ns 1.10 μs +0.1%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 6.2 ns 4.72 μs +0.0%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 1000) 2.50 μs 8.9 ns 2.53 μs -1.2%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.54 ms 33.10 μs 1.55 ms -1.0%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 100000) 748.83 μs 2.41 μs 750.55 μs -0.2%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.46 μs 91.7 ns 4.54 μs -1.9%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 1000) 2.74 μs 3.3 ns 2.74 μs +0.1%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.94 ms 5.43 μs 2.02 ms -4.1%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 100000) 1.19 ms 2.34 μs 1.19 ms -0.3%
EnumMapBenchmark.Dictionary_Enumerate 50.3 ns 0.1 ns 50.4 ns -0.0%
EnumMapBenchmark.EnumMap_Enumerate 39.6 ns 0.2 ns 39.7 ns -0.3%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 1000) 30.84 μs 216.8 ns 31.39 μs -1.7%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 1000) 40.23 μs 465.7 ns 40.74 μs -1.3%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 100000) 12.96 ms 140.86 μs 12.91 ms +0.4%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 100000) 17.63 ms 108.40 μs 17.50 ms +0.8%
CountingSortBenchmark.Array_Keys(ItemCount: 100) 471.4 ns 0.3 ns 477.9 ns -1.4%
RadixSortBenchmark.Array_Keys(ItemCount: 100) 471.2 ns 0.7 ns 471.2 ns +0.0%
CountingSortBenchmark.CountingSort_Keys(ItemCount: 100) 490.4 ns 12.9 ns 499.2 ns -1.8%
RadixSortBenchmark.RadixSort_Keys(ItemCount: 100) 2.16 μs 7.4 ns 2.14 μs +0.7%
CountingSortBenchmark.Array_Keys(ItemCount: 1000) 8.22 μs 94.2 ns 8.21 μs +0.1%
RadixSortBenchmark.Array_Keys(ItemCount: 1000) 8.67 μs 106.9 ns 8.64 μs +0.4%
CountingSortBenchmark.CountingSort_Keys(ItemCount: 1000) 1.55 μs 34.4 ns 1.64 μs -5.5%
RadixSortBenchmark.RadixSort_Keys(ItemCount: 1000) 14.00 μs 37.8 ns 14.44 μs -3.1%
CountingSortBenchmark.Array_Keys(ItemCount: 100000) 3.53 ms 13.38 μs 3.54 ms -0.4%
RadixSortBenchmark.Array_Keys(ItemCount: 100000) 5.64 ms 86.42 μs 5.71 ms -1.2%
CountingSortBenchmark.CountingSort_Keys(ItemCount: 100000) 64.31 μs 424.6 ns 63.37 μs +1.5%
RadixSortBenchmark.RadixSort_Keys(ItemCount: 100000) 1.44 ms 8.55 μs 1.46 ms -1.1%
CountingSortBenchmark.Array_Keys(ItemCount: 1000000) 36.89 ms 94.37 μs 36.81 ms +0.2%
RadixSortBenchmark.Array_Keys(ItemCount: 1000000) 68.93 ms 255.59 μs 69.03 ms -0.1%
CountingSortBenchmark.CountingSort_Keys(ItemCount: 1000000) 653.32 μs 1.87 μs 652.20 μs +0.2%
RadixSortBenchmark.RadixSort_Keys(ItemCount: 1000000) 14.23 ms 313.50 μs 14.20 ms +0.2%
EnumMapBenchmark.Dictionary_Lookup 117.8 ns 0.1 ns 117.8 ns -0.0%
EnumMapBenchmark.EnumMap_Lookup 63.3 ns 0.3 ns 63.3 ns +0.0%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 1000) 5.04 μs 16.4 ns 5.00 μs +0.8%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 1000) 2.36 μs 7.4 ns 2.35 μs +0.5%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.78 ms 6.72 μs 1.83 ms -2.6%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 100000) 740.43 μs 5.72 μs 727.58 μs +1.8%
CountingSortBenchmark.Array_Pairs(ItemCount: 100) 750.8 ns 1.9 ns 743.2 ns +1.0%
RadixSortBenchmark.Array_Pairs(ItemCount: 100) 722.2 ns 15.9 ns 707.6 ns +2.1%
CountingSortBenchmark.CountingSort_Pairs(ItemCount: 100) 748.8 ns 10.5 ns 798.3 ns -6.2%
RadixSortBenchmark.RadixSort_Pairs(ItemCount: 100) 2.71 μs 7.2 ns 2.69 μs +0.8%
CountingSortBenchmark.Array_Pairs(ItemCount: 1000) 14.11 μs 21.2 ns 14.08 μs +0.2%
RadixSortBenchmark.Array_Pairs(ItemCount: 1000) 11.22 μs 36.6 ns 11.23 μs -0.1%
CountingSortBenchmark.CountingSort_Pairs(ItemCount: 1000) 3.14 μs 113.9 ns 3.26 μs -3.7%
RadixSortBenchmark.RadixSort_Pairs(ItemCount: 1000) 19.50 μs 478.3 ns 19.33 μs +0.8%
CountingSortBenchmark.Array_Pairs(ItemCount: 100000) 5.13 ms 4.09 μs 5.16 ms -0.6%
RadixSortBenchmark.Array_Pairs(ItemCount: 100000) 6.26 ms 5.27 μs 6.26 ms +0.1%
CountingSortBenchmark.CountingSort_Pairs(ItemCount: 100000) 406.78 μs 3.58 μs 409.52 μs -0.7%
RadixSortBenchmark.RadixSort_Pairs(ItemCount: 100000) 2.05 ms 5.29 μs 2.11 ms -3.0%
CountingSortBenchmark.Array_Pairs(ItemCount: 1000000) 57.44 ms 642.20 μs 57.22 ms +0.4%
RadixSortBenchmark.Array_Pairs(ItemCount: 1000000) 73.87 ms 58.69 μs 73.98 ms -0.2%
CountingSortBenchmark.CountingSort_Pairs(ItemCount: 1000000) 4.15 ms 50.58 μs 4.10 ms +1.0%
RadixSortBenchmark.RadixSort_Pairs(ItemCount: 1000000) 19.72 ms 57.62 μs 19.78 ms -0.3%
EnumMapBenchmark.Dictionary_Remove 3.60 μs 426.6 ns 3.30 μs +9.2%
EnumMapBenchmark.EnumMap_Remove 1.84 μs 408.9 ns 1.54 μs +19.3%
SmallSetBenchmark.HashSet_Remove(ItemCount: 8) 616.1 ns 247.4 ns 446.8 ns +37.9%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 8) 1.54 μs 275.8 ns 1.34 μs +15.1%
SmallSetBenchmark.HashSet_Remove(ItemCount: 64) 1.42 μs 264.9 ns 1.31 μs +8.2%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 64) 24.92 μs 4.80 μs 26.70 μs -6.7%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 1000) 30.41 μs 3.34 μs 27.06 μs +12.4%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 1000) 123.79 μs 7.73 μs 133.54 μs -7.3%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 1000) 29.09 μs 4.15 μs 29.24 μs -0.5%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 1000) 110.00 μs 7.06 μs 111.17 μs -1.0%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 2.88 ms 284.18 μs 2.82 ms +2.2%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 2.57 ms 102.03 μs 2.41 ms +6.5%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.72 ms 23.54 μs 1.73 ms -0.9%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 100000) 1.42 ms 60.39 μs 1.43 ms -0.7%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 1000) 31.3 ns 0.2 ns 31.0 ns +1.1%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 1000) 1.29 μs 5.9 ns 1.27 μs +1.6%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 100000) 32.4 ns 0.1 ns 31.9 ns +1.8%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 100000) 1.25 μs 21.9 ns 1.23 μs +2.1%
BTreeSetBenchmark.SortedSet_Add(ItemCount: 1000) 42.71 μs 821.8 ns 44.71 μs -4.5%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 12.88 μs 124.9 ns 12.52 μs +2.8%
BTreeSetBenchmark.BTreeSet_Add(ItemCount: 1000) 40.59 μs 119.1 ns 41.22 μs -1.5%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 1000) 9.05 μs 21.6 ns 9.07 μs -0.2%
BTreeSetBenchmark.SortedSet_Add(ItemCount: 100000) 22.50 ms 161.90 μs 22.51 ms -0.1%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 5.10 ms 58.39 μs 5.06 ms +0.7%
BTreeSetBenchmark.BTreeSet_Add(ItemCount: 100000) 15.48 ms 42.44 μs 15.58 ms -0.7%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 100000) 3.18 ms 5.80 μs 3.19 ms -0.4%
RankSelectBitVectorBenchmark.Array_Build(ItemCount: 1024) 83.1 ns 0.5 ns 83.0 ns +0.2%
RankSelectBitVectorBenchmark.RankSelectBitVector_Build(ItemCount: 1024) 58.0 ns 1.0 ns 58.8 ns -1.3%
RankSelectBitVectorBenchmark.Array_Build(ItemCount: 1000000) 77.84 μs 382.4 ns 78.39 μs -0.7%
RankSelectBitVectorBenchmark.RankSelectBitVector_Build(ItemCount: 1000000) 98.21 μs 404.8 ns 98.67 μs -0.5%
BTreeSetBenchmark.SortedSet_Contains(ItemCount: 1000) 18.89 μs 144.1 ns 18.93 μs -0.2%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.85 μs 146.2 ns 4.71 μs +3.1%
BTreeSetBenchmark.BTreeSet_Contains(ItemCount: 1000) 16.55 μs 24.1 ns 16.56 μs -0.0%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 1000) 2.12 μs 27.4 ns 2.03 μs +4.4%
BTreeSetBenchmark.SortedSet_Contains(ItemCount: 100000) 17.37 ms 53.89 μs 16.49 ms +5.3%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.52 ms 3.45 μs 1.55 ms -2.4%
BTreeSetBenchmark.BTreeSet_Contains(ItemCount: 100000) 13.87 ms 157.11 μs 14.06 ms -1.3%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 100000) 534.02 μs 19.81 μs 526.48 μs +1.4%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 1000) 77.08 μs 119.2 ns 80.04 μs -3.7%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 1000) 188.01 μs 416.4 ns 190.24 μs -1.2%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 100000) 35.57 ms 219.83 μs 35.42 ms +0.4%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 100000) 56.84 ms 352.19 μs 56.71 ms +0.2%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 1000) 4.58 μs 25.7 ns 4.69 μs -2.3%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 1000) 29.58 μs 138.7 ns 29.49 μs +0.3%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 100000) 1.18 ms 16.18 μs 1.16 ms +1.7%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 100000) 6.36 ms 60.19 μs 6.42 ms -0.9%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 1000) 1.66 μs 1.2 ns 1.66 μs +0.2%
DequeBenchmark.Deque_Enumerate(ItemCount: 1000) 1.06 μs 0.5 ns 1.06 μs -0.1%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 100000) 152.77 μs 186.6 ns 152.70 μs +0.0%
DequeBenchmark.Deque_Enumerate(ItemCount: 100000) 105.71 μs 65.7 ns 105.69 μs +0.0%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.34 μs 74.9 ns 13.32 μs +0.2%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.34 μs 70.9 ns 13.28 μs +0.4%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 1000) 8.96 μs 308.5 ns 8.98 μs -0.3%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 1000) 9.02 μs 242.7 ns 9.21 μs -2.1%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.38 ms 64.63 μs 4.37 ms +0.1%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.33 ms 78.69 μs 4.40 ms -1.7%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 100000) 5.31 ms 55.40 μs 5.23 ms +1.6%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 100000) 5.14 ms 54.62 μs 5.12 ms +0.4%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.84 μs 6.2 ns 4.95 μs -2.3%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.61 μs 5.1 ns 4.61 μs -0.1%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 2.39 μs 14.4 ns 2.38 μs +0.3%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 1000) 2.09 μs 20.7 ns 2.08 μs +0.3%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.61 ms 7.58 μs 1.61 ms -0.4%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.57 ms 2.19 μs 1.57 ms -0.1%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 737.87 μs 45.10 μs 687.97 μs +7.3%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 100000) 738.70 μs 3.86 μs 583.53 μs +26.6% ⚠️
BTreeSetBenchmark.SortedSet_Mixed(ItemCount: 1000) 58.12 μs 1.51 μs 58.80 μs -1.2%
BTreeSetBenchmark.BTreeSet_Mixed(ItemCount: 1000) 54.75 μs 606.3 ns 55.84 μs -2.0%
BTreeSetBenchmark.SortedSet_Mixed(ItemCount: 100000) 33.90 ms 170.01 μs 34.10 ms -0.6%
BTreeSetBenchmark.BTreeSet_Mixed(ItemCount: 100000) 26.11 ms 258.12 μs 26.10 ms +0.0%
DequeBenchmark.LinkedList_PushFront(ItemCount: 1000) 36.34 μs 1.32 μs 35.81 μs +1.5%
DequeBenchmark.Deque_PushFront(ItemCount: 1000) 23.26 μs 2.78 μs 21.44 μs +8.5%
DequeBenchmark.LinkedList_PushFront(ItemCount: 100000) 1.81 ms 33.02 μs 1.82 ms -0.4%
DequeBenchmark.Deque_PushFront(ItemCount: 100000) 651.02 μs 12.66 μs 684.91 μs -4.9%
DequeBenchmark.LinkedList_Queue(ItemCount: 1000) 49.04 μs 2.26 μs 49.90 μs -1.7%
DequeBenchmark.Deque_Queue(ItemCount: 1000) 28.85 μs 3.65 μs 34.10 μs -15.4%
DequeBenchmark.LinkedList_Queue(ItemCount: 100000) 4.80 ms 107.61 μs 4.77 ms +0.8%
DequeBenchmark.Deque_Queue(ItemCount: 100000) 457.82 μs 14.44 μs 447.30 μs +2.4%
BTreeSetBenchmark.SortedSet_RangeScan(ItemCount: 1000) 178.3 ns 2.8 ns 174.7 ns +2.0%
BTreeSetBenchmark.BTreeSet_RangeScan(ItemCount: 1000) 82.7 ns 2.5 ns 81.8 ns +1.0%
BTreeSetBenchmark.SortedSet_RangeScan(ItemCount: 100000) 9.33 μs 131.5 ns 9.61 μs -3.0%
BTreeSetBenchmark.BTreeSet_RangeScan(ItemCount: 100000) 4.94 μs 5.2 ns 4.93 μs +0.1%
RankSelectBitVectorBenchmark.Array_RankEarly(ItemCount: 1024) 1.33 μs 1.3 ns 1.33 μs -0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankEarly(ItemCount: 1024) 2.02 μs 2.0 ns 2.03 μs -0.0%
RankSelectBitVectorBenchmark.Array_RankEarly(ItemCount: 1000000) 30.64 μs 44.2 ns 30.62 μs +0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankEarly(ItemCount: 1000000) 2.02 μs 1.3 ns 2.02 μs +0.0%
RankSelectBitVectorBenchmark.Array_RankLate(ItemCount: 1024) 8.17 μs 10.0 ns 8.17 μs +0.0%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankLate(ItemCount: 1024) 2.02 μs 1.7 ns 2.02 μs +0.0%
RankSelectBitVectorBenchmark.Array_RankLate(ItemCount: 1000000) 5.51 ms 3.65 μs 5.52 ms -0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankLate(ItemCount: 1000000) 2.17 μs 2.5 ns 2.02 μs +7.4%
RankSelectBitVectorBenchmark.Array_RankMid(ItemCount: 1024) 4.61 μs 6.4 ns 4.61 μs +0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankMid(ItemCount: 1024) 2.02 μs 2.0 ns 2.02 μs -0.1%
RankSelectBitVectorBenchmark.Array_RankMid(ItemCount: 1000000) 2.81 ms 2.43 μs 2.81 ms +0.0%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankMid(ItemCount: 1000000) 2.02 μs 1.9 ns 2.02 μs +0.0%
BTreeSetBenchmark.SortedSet_Remove(ItemCount: 1000) 599.45 μs 17.25 μs 603.26 μs -0.6%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 75.71 μs 7.19 μs 78.79 μs -3.9%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 77.09 μs 7.24 μs 80.85 μs -4.6%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 28.73 μs 2.90 μs 26.32 μs +9.2%
BTreeSetBenchmark.BTreeSet_Remove(ItemCount: 1000) 253.79 μs 9.97 μs 255.60 μs -0.7%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 1000) 129.77 μs 7.62 μs 127.16 μs +2.1%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 1000) 87.22 μs 8.44 μs 93.20 μs -6.4%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 1000) 121.97 μs 10.54 μs 118.70 μs +2.8%
BTreeSetBenchmark.SortedSet_Remove(ItemCount: 100000) 26.68 ms 155.87 μs 26.58 ms +0.4%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.03 ms 82.16 μs 2.01 ms +0.9%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.02 ms 21.17 μs 2.02 ms +0.2%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.69 ms 18.30 μs 1.68 ms +0.3%
BTreeSetBenchmark.BTreeSet_Remove(ItemCount: 100000) 16.52 ms 65.71 μs 16.55 ms -0.2%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 100000) 1.71 ms 24.96 μs 1.72 ms -0.6%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 100000) 6.44 ms 59.52 μs 2.92 ms +121.0%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 100000) 1.44 ms 17.00 μs 1.44 ms -0.1%
RankSelectBitVectorBenchmark.Array_Select(ItemCount: 1024) 14.08 μs 24.6 ns 14.11 μs -0.2%
RankSelectBitVectorBenchmark.RankSelectBitVector_Select(ItemCount: 1024) 10.40 μs 30.2 ns 10.43 μs -0.3%
RankSelectBitVectorBenchmark.Array_Select(ItemCount: 1000000) 4.78 ms 3.82 μs 4.78 ms +0.0%
RankSelectBitVectorBenchmark.RankSelectBitVector_Select(ItemCount: 1000000) 26.05 μs 19.8 ns 26.15 μs -0.4%
TrieBenchmark.Dictionary_Add(ItemCount: 1000) 34.27 μs 1.23 μs 43.31 μs -20.9%
TrieBenchmark.Trie_Add(ItemCount: 1000) 521.37 μs 21.48 μs 503.58 μs +3.5%
BTreeDictionaryBenchmark.SortedDictionary_Add(ItemCount: 1000) 47.56 μs 372.3 ns 47.54 μs +0.0%
IntSetBenchmark.HashSet_Add(ItemCount: 1000) 12.64 μs 74.8 ns 12.57 μs +0.6%
SwissSetBenchmark.HashSet_Add(ItemCount: 1000) 12.64 μs 141.1 ns 12.75 μs -0.8%
BTreeDictionaryBenchmark.BTreeDictionary_Add(ItemCount: 1000) 55.74 μs 708.6 ns 53.63 μs +4.0%
IntSetBenchmark.IntSet_Add(ItemCount: 1000) 9.38 μs 113.5 ns 9.64 μs -2.6%
SwissSetBenchmark.SwissSet_Add(ItemCount: 1000) 25.70 μs 133.1 ns 25.80 μs -0.4%
TrieBenchmark.Dictionary_Add(ItemCount: 100000) 5.19 ms 1.43 ms 5.24 ms -0.8%
TrieBenchmark.Trie_Add(ItemCount: 100000) 28.45 ms 495.30 μs 29.00 ms -1.9%
BTreeDictionaryBenchmark.SortedDictionary_Add(ItemCount: 100000) 25.94 ms 239.81 μs 25.76 ms +0.7%
IntSetBenchmark.HashSet_Add(ItemCount: 100000) 5.19 ms 80.22 μs 5.23 ms -0.9%
SwissSetBenchmark.HashSet_Add(ItemCount: 100000) 4.98 ms 65.97 μs 4.93 ms +1.0%
BTreeDictionaryBenchmark.BTreeDictionary_Add(ItemCount: 100000) 17.19 ms 30.79 μs 17.31 ms -0.7%
IntSetBenchmark.IntSet_Add(ItemCount: 100000) 3.49 ms 29.87 μs 3.47 ms +0.5%
SwissSetBenchmark.SwissSet_Add(ItemCount: 100000) 4.49 ms 101.80 μs 4.48 ms +0.2%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 1000) 17.17 μs 85.9 ns 16.96 μs +1.2%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 1000) 15.73 μs 42.2 ns 15.63 μs +0.6%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 100000) 4.43 ms 68.99 μs 4.50 ms -1.4%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 100000) 3.25 ms 45.47 μs 3.21 ms +1.0%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 1000) 9.54 μs 50.0 ns 9.51 μs +0.3%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 1000) 13.02 μs 21.4 ns 13.19 μs -1.2%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 100000) 153.24 μs 1.54 μs 154.36 μs -0.7%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 100000) 284.00 μs 2.54 μs 282.30 μs +0.6%
IntSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.72 μs 2.6 ns 4.71 μs +0.1%
SwissSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.75 μs 9.5 ns 4.77 μs -0.3%
IntSetBenchmark.IntSet_Contains(ItemCount: 1000) 1.92 μs 23.6 ns 1.91 μs +0.1%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 1000) 2.74 μs 2.2 ns 2.73 μs +0.0%
IntSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.50 ms 1.62 μs 1.51 ms -0.4%
SwissSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.52 ms 6.72 μs 1.45 ms +4.4%
IntSetBenchmark.IntSet_Contains(ItemCount: 100000) 497.32 μs 7.65 μs 493.36 μs +0.8%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 100000) 476.34 μs 3.18 μs 475.29 μs +0.2%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.57 μs 7.4 ns 4.56 μs +0.1%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 1000) 2.51 μs 3.2 ns 2.51 μs -0.1%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.99 ms 5.34 μs 2.00 ms -0.4%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 100000) 317.22 μs 649.2 ns 316.35 μs +0.3%
StringInternTableBenchmark.Dictionary_Dedupe(ItemCount: 1000) 35.13 μs 1.31 μs 33.84 μs +3.8%
StringInternTableBenchmark.StringInternTable_Dedupe(ItemCount: 1000) 37.35 μs 23.1 ns 37.36 μs -0.0%
StringInternTableBenchmark.Dictionary_Dedupe(ItemCount: 100000) 3.27 ms 27.72 μs 3.26 ms +0.3%
StringInternTableBenchmark.StringInternTable_Dedupe(ItemCount: 100000) 3.40 ms 3.05 μs 3.40 ms -0.0%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 15.04 μs 95.6 ns 15.12 μs -0.6%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 1000) 8.68 μs 62.3 ns 8.59 μs +1.0%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.20 ms 61.16 μs 5.24 ms -0.7%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 100000) 7.57 ms 102.50 μs 7.65 ms -1.1%
BTreeDictionaryBenchmark.SortedDictionary_Lookup(ItemCount: 1000) 24.93 μs 163.1 ns 24.90 μs +0.1%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 5.04 μs 45.0 ns 5.03 μs +0.2%
StringInternTableBenchmark.HashSet_Lookup(ItemCount: 1000) 31.86 μs 117.7 ns 31.75 μs +0.4%
TrieBenchmark.Dictionary_Lookup(ItemCount: 1000) 12.55 μs 11.4 ns 12.58 μs -0.2%
BTreeDictionaryBenchmark.BTreeDictionary_Lookup(ItemCount: 1000) 19.96 μs 569.6 ns 19.81 μs +0.8%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 1000) 2.29 μs 5.6 ns 2.29 μs -0.0%
StringInternTableBenchmark.StringInternTable_Lookup(ItemCount: 1000) 33.05 μs 50.8 ns 33.10 μs -0.1%
TrieBenchmark.Trie_Lookup(ItemCount: 1000) 45.35 μs 138.9 ns 45.15 μs +0.4%
BTreeDictionaryBenchmark.SortedDictionary_Lookup(ItemCount: 100000) 18.73 ms 42.29 μs 18.63 ms +0.5%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.57 ms 1.58 μs 1.57 ms -0.1%
StringInternTableBenchmark.HashSet_Lookup(ItemCount: 100000) 3.19 ms 8.98 μs 3.73 ms -14.3% ✅
TrieBenchmark.Dictionary_Lookup(ItemCount: 100000) 2.77 ms 8.90 μs 2.78 ms -0.3%
BTreeDictionaryBenchmark.BTreeDictionary_Lookup(ItemCount: 100000) 14.18 ms 67.57 μs 14.26 ms -0.5%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 100000) 695.40 μs 6.10 μs 679.98 μs +2.3%
StringInternTableBenchmark.StringInternTable_Lookup(ItemCount: 100000) 3.32 ms 1.43 μs 3.32 ms +0.0%
TrieBenchmark.Trie_Lookup(ItemCount: 100000) 9.78 ms 70.58 μs 10.26 ms -4.7%
BTreeDictionaryBenchmark.SortedDictionary_Mixed(ItemCount: 1000) 96.85 μs 1.14 μs 98.28 μs -1.5%
BTreeDictionaryBenchmark.BTreeDictionary_Mixed(ItemCount: 1000) 71.36 μs 537.4 ns 75.87 μs -6.0%
BTreeDictionaryBenchmark.SortedDictionary_Mixed(ItemCount: 100000) 52.42 ms 439.23 μs 52.02 ms +0.8%
BTreeDictionaryBenchmark.BTreeDictionary_Mixed(ItemCount: 100000) 28.26 ms 112.06 μs 28.14 ms +0.4%
TrieBenchmark.Dictionary_PrefixMatch(ItemCount: 1000) 79.96 μs 63.0 ns 80.03 μs -0.1%
TrieBenchmark.Trie_PrefixMatch(ItemCount: 1000) 57.30 μs 568.9 ns 57.14 μs +0.3%
TrieBenchmark.Dictionary_PrefixMatch(ItemCount: 100000) 8.07 ms 6.62 μs 8.07 ms -0.0%
TrieBenchmark.Trie_PrefixMatch(ItemCount: 100000) 7.32 ms 84.20 μs 6.50 ms +12.7%
BTreeDictionaryBenchmark.SortedDictionary_RangeScan(ItemCount: 1000) 4.60 μs 47.0 ns 4.59 μs +0.1%
BTreeDictionaryBenchmark.BTreeDictionary_RangeScan(ItemCount: 1000) 81.7 ns 0.5 ns 83.7 ns -2.4%
BTreeDictionaryBenchmark.SortedDictionary_RangeScan(ItemCount: 100000) 1.18 ms 5.38 μs 1.16 ms +2.0%
BTreeDictionaryBenchmark.BTreeDictionary_RangeScan(ItemCount: 100000) 5.79 μs 3.6 ns 5.79 μs -0.1%
BTreeDictionaryBenchmark.SortedDictionary_Remove(ItemCount: 1000) 669.19 μs 13.80 μs 736.98 μs -9.2%
IntSetBenchmark.HashSet_Remove(ItemCount: 1000) 27.33 μs 2.45 μs 31.66 μs -13.7%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 82.03 μs 6.42 μs 81.98 μs +0.1%
BTreeDictionaryBenchmark.BTreeDictionary_Remove(ItemCount: 1000) 287.68 μs 12.01 μs 286.55 μs +0.4%
IntSetBenchmark.IntSet_Remove(ItemCount: 1000) 82.81 μs 7.53 μs 82.80 μs +0.0%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 1000) 86.67 μs 7.16 μs 85.06 μs +1.9%
SwissSetBenchmark.HashSet_Remove(ItemCount: 1000) 29.24 μs 3.50 μs 32.13 μs -9.0%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 1000) 71.24 μs 6.86 μs 65.96 μs +8.0%
BTreeDictionaryBenchmark.SortedDictionary_Remove(ItemCount: 100000) 29.21 ms 849.17 μs 28.71 ms +1.7%
IntSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.67 ms 17.32 μs 1.67 ms +0.0%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.97 ms 60.97 μs 2.00 ms -1.4%
BTreeDictionaryBenchmark.BTreeDictionary_Remove(ItemCount: 100000) 19.47 ms 326.36 μs 19.46 ms +0.0%
IntSetBenchmark.IntSet_Remove(ItemCount: 100000) 1.44 ms 11.43 μs 1.42 ms +0.9%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 100000) 1.83 ms 86.38 μs 1.94 ms -5.7%
SwissSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.70 ms 16.61 μs 1.71 ms -0.4%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 100000) 850.47 μs 11.55 μs 876.24 μs -2.9%
TrieBenchmark.Dictionary_SpanLookup(ItemCount: 1000) 38.59 μs 203.7 ns 38.56 μs +0.1%
TrieBenchmark.Trie_SpanLookup(ItemCount: 1000) 46.85 μs 131.0 ns 46.46 μs +0.8%
TrieBenchmark.Dictionary_SpanLookup(ItemCount: 100000) 6.38 ms 106.35 μs 6.34 ms +0.7%
TrieBenchmark.Trie_SpanLookup(ItemCount: 100000) 9.61 ms 93.43 μs 9.76 ms -1.5%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 1000) 93.11 μs 526.5 ns 93.75 μs -0.7%
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 1000) 27.64 μs 61.5 ns 27.45 μs +0.7%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 100000) 43.50 ms 758.86 μs 44.62 ms -2.5%
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 100000) 8.28 ms 416.94 μs 7.85 ms +5.5%
Hashers (111)
Benchmark This PR StdDev main Δ
StringHasherBenchmark.Bcl_GetHashCode(Shape: ShortAscii) 16.66 μs 26.6 ns 16.66 μs +0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: ShortAscii) 16.62 μs 21.1 ns 16.61 μs +0.0%
StringHasherBenchmark.Djb2(Shape: ShortAscii) 24.64 μs 28.0 ns 24.67 μs -0.1%
StringHasherBenchmark.Djb2A(Shape: ShortAscii) 24.65 μs 17.7 ns 24.64 μs +0.0%
StringHasherBenchmark.Sdbm(Shape: ShortAscii) 35.22 μs 15.5 ns 35.20 μs +0.1%
StringHasherBenchmark.Elf(Shape: ShortAscii) 43.63 μs 33.6 ns 43.62 μs +0.0%
StringHasherBenchmark.Crc32(Shape: ShortAscii) 55.22 μs 64.1 ns 55.20 μs +0.0%
StringHasherBenchmark.Adler32(Shape: ShortAscii) 106.90 μs 146.0 ns 106.83 μs +0.1%
StringHasherBenchmark.FnV1(Shape: ShortAscii) 28.48 μs 11.1 ns 28.48 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: ShortAscii) 29.15 μs 29.2 ns 29.15 μs +0.0%
StringHasherBenchmark.FnV1A(Shape: ShortAscii) 12.38 μs 74.2 ns 12.37 μs +0.1%
StringHasherBenchmark.FnV1A_Full(Shape: ShortAscii) 25.00 μs 21.0 ns 24.99 μs +0.0%
StringHasherBenchmark.FnV1A_64(Shape: ShortAscii) 31.95 μs 23.5 ns 31.95 μs +0.0%
StringHasherBenchmark.JenkinsOaat(Shape: ShortAscii) 40.80 μs 279.5 ns 40.67 μs +0.3%
StringHasherBenchmark.Murmur2(Shape: ShortAscii) 16.67 μs 27.1 ns 16.68 μs -0.1%
StringHasherBenchmark.Murmur3(Shape: ShortAscii) 20.35 μs 27.8 ns 20.33 μs +0.1%
StringHasherBenchmark.XxHash32(Shape: ShortAscii) 17.71 μs 10.6 ns 17.72 μs -0.1%
StringHasherBenchmark.XxHash64(Shape: ShortAscii) 19.67 μs 18.6 ns 19.66 μs +0.0%
StringHasherBenchmark.XxHash3(Shape: ShortAscii) 16.96 μs 23.1 ns 16.98 μs -0.1%
StringHasherBenchmark.CityHash64(Shape: ShortAscii) 17.02 μs 12.6 ns 17.03 μs -0.1%
StringHasherBenchmark.MetroHash64(Shape: ShortAscii) 17.29 μs 59.3 ns 17.31 μs -0.1%
StringHasherBenchmark.SipHash13(Shape: ShortAscii) 31.04 μs 68.8 ns 30.99 μs +0.2%
StringHasherBenchmark.SipHash24(Shape: ShortAscii) 43.72 μs 28.7 ns 43.73 μs -0.0%
StringHasherBenchmark.HalfSipHash24(Shape: ShortAscii) 56.54 μs 20.4 ns 56.53 μs +0.0%
StringHasherBenchmark.HighwayHash64(Shape: ShortAscii) 438.98 μs 1.22 μs 451.41 μs -2.8%
StringHasherBenchmark.XxHash64_Hash64(Shape: ShortAscii) 19.66 μs 5.9 ns 19.66 μs +0.0%
StringHasherBenchmark.SipHash24_Hash64(Shape: ShortAscii) 42.67 μs 37.8 ns 42.74 μs -0.2%
StringHasherBenchmark.Bcl_GetHashCode(Shape: LongAscii) 108.18 μs 36.6 ns 108.18 μs -0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: LongAscii) 108.49 μs 76.8 ns 108.47 μs +0.0%
StringHasherBenchmark.Djb2(Shape: LongAscii) 254.69 μs 140.5 ns 254.63 μs +0.0%
StringHasherBenchmark.Djb2A(Shape: LongAscii) 254.63 μs 99.9 ns 254.60 μs +0.0%
StringHasherBenchmark.Sdbm(Shape: LongAscii) 343.62 μs 105.3 ns 343.59 μs +0.0%
StringHasherBenchmark.Elf(Shape: LongAscii) 624.49 μs 407.5 ns 624.53 μs -0.0%
StringHasherBenchmark.Crc32(Shape: LongAscii) 663.51 μs 453.2 ns 663.15 μs +0.1%
StringHasherBenchmark.Adler32(Shape: LongAscii) 882.92 μs 209.3 ns 882.88 μs +0.0%
StringHasherBenchmark.FnV1(Shape: LongAscii) 317.73 μs 137.9 ns 317.80 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: LongAscii) 320.32 μs 133.2 ns 320.33 μs -0.0%
StringHasherBenchmark.FnV1A(Shape: LongAscii) 134.15 μs 72.9 ns 134.22 μs -0.1%
StringHasherBenchmark.FnV1A_Full(Shape: LongAscii) 313.84 μs 126.0 ns 313.86 μs -0.0%
StringHasherBenchmark.FnV1A_64(Shape: LongAscii) 321.63 μs 142.9 ns 321.54 μs +0.0%
StringHasherBenchmark.JenkinsOaat(Shape: LongAscii) 421.84 μs 170.4 ns 421.72 μs +0.0%
StringHasherBenchmark.Murmur2(Shape: LongAscii) 98.27 μs 2.12 μs 98.30 μs -0.0%
StringHasherBenchmark.Murmur3(Shape: LongAscii) 117.10 μs 206.4 ns 117.02 μs +0.1%
StringHasherBenchmark.XxHash32(Shape: LongAscii) 77.02 μs 46.2 ns 77.05 μs -0.0%
StringHasherBenchmark.XxHash64(Shape: LongAscii) 94.69 μs 164.0 ns 94.60 μs +0.1%
StringHasherBenchmark.XxHash3(Shape: LongAscii) 92.92 μs 123.3 ns 94.34 μs -1.5%
StringHasherBenchmark.CityHash64(Shape: LongAscii) 134.70 μs 99.9 ns 134.67 μs +0.0%
StringHasherBenchmark.MetroHash64(Shape: LongAscii) 81.87 μs 98.9 ns 81.86 μs +0.0%
StringHasherBenchmark.SipHash13(Shape: LongAscii) 116.24 μs 174.6 ns 116.22 μs +0.0%
StringHasherBenchmark.SipHash24(Shape: LongAscii) 171.44 μs 311.3 ns 171.82 μs -0.2%
StringHasherBenchmark.HalfSipHash24(Shape: LongAscii) 273.09 μs 299.6 ns 272.93 μs +0.1%
StringHasherBenchmark.HighwayHash64(Shape: LongAscii) 782.26 μs 16.89 μs 816.52 μs -4.2%
StringHasherBenchmark.XxHash64_Hash64(Shape: LongAscii) 92.23 μs 133.9 ns 92.16 μs +0.1%
StringHasherBenchmark.SipHash24_Hash64(Shape: LongAscii) 171.36 μs 494.8 ns 171.43 μs -0.0%
StringHasherBenchmark.Bcl_GetHashCode(Shape: NonAscii) 25.11 μs 57.8 ns 25.08 μs +0.1%
StringHasherBenchmark.EqualityComparer_Default(Shape: NonAscii) 25.01 μs 16.5 ns 25.01 μs -0.0%
StringHasherBenchmark.Djb2(Shape: NonAscii) 45.56 μs 39.6 ns 45.55 μs +0.0%
StringHasherBenchmark.Djb2A(Shape: NonAscii) 45.54 μs 16.9 ns 45.54 μs -0.0%
StringHasherBenchmark.Sdbm(Shape: NonAscii) 66.29 μs 35.1 ns 66.30 μs -0.0%
StringHasherBenchmark.Elf(Shape: NonAscii) 88.15 μs 81.0 ns 88.09 μs +0.1%
StringHasherBenchmark.Crc32(Shape: NonAscii) 112.12 μs 101.9 ns 112.14 μs -0.0%
StringHasherBenchmark.Adler32(Shape: NonAscii) 191.70 μs 111.0 ns 191.72 μs -0.0%
StringHasherBenchmark.FnV1(Shape: NonAscii) 51.15 μs 12.2 ns 51.14 μs +0.0%
StringHasherBenchmark.FnV1_64(Shape: NonAscii) 52.70 μs 96.8 ns 52.64 μs +0.1%
StringHasherBenchmark.FnV1A(Shape: NonAscii) 22.93 μs 23.6 ns 22.97 μs -0.2%
StringHasherBenchmark.FnV1A_Full(Shape: NonAscii) 47.19 μs 24.3 ns 47.17 μs +0.0%
StringHasherBenchmark.FnV1A_64(Shape: NonAscii) 54.15 μs 54.4 ns 54.17 μs -0.0%
StringHasherBenchmark.JenkinsOaat(Shape: NonAscii) 77.00 μs 45.1 ns 77.06 μs -0.1%
StringHasherBenchmark.Murmur2(Shape: NonAscii) 24.67 μs 23.5 ns 24.67 μs +0.0%
StringHasherBenchmark.Murmur3(Shape: NonAscii) 30.16 μs 46.3 ns 30.14 μs +0.1%
StringHasherBenchmark.XxHash32(Shape: NonAscii) 24.89 μs 33.5 ns 24.87 μs +0.1%
StringHasherBenchmark.XxHash64(Shape: NonAscii) 32.86 μs 72.8 ns 32.78 μs +0.2%
StringHasherBenchmark.XxHash3(Shape: NonAscii) 26.37 μs 33.1 ns 26.32 μs +0.2%
StringHasherBenchmark.CityHash64(Shape: NonAscii) 23.76 μs 9.5 ns 23.74 μs +0.1%
StringHasherBenchmark.MetroHash64(Shape: NonAscii) 27.50 μs 14.7 ns 27.54 μs -0.1%
StringHasherBenchmark.SipHash13(Shape: NonAscii) 39.98 μs 25.1 ns 39.98 μs -0.0%
StringHasherBenchmark.SipHash24(Shape: NonAscii) 58.41 μs 92.8 ns 58.36 μs +0.1%
StringHasherBenchmark.HalfSipHash24(Shape: NonAscii) 79.52 μs 50.5 ns 79.50 μs +0.0%
StringHasherBenchmark.HighwayHash64(Shape: NonAscii) 485.29 μs 2.90 μs 494.10 μs -1.8%
StringHasherBenchmark.XxHash64_Hash64(Shape: NonAscii) 31.12 μs 30.4 ns 31.13 μs -0.1%
StringHasherBenchmark.SipHash24_Hash64(Shape: NonAscii) 57.04 μs 21.8 ns 57.05 μs -0.0%
IntegerHasherBenchmark.Guid_Bcl 1.27 μs 1.2 ns 1.27 μs -0.3%
IntegerHasherBenchmark.Guid_EqualityComparer 3.49 μs 13.8 ns 3.47 μs +0.5%
IntegerHasherBenchmark.Guid_Celerity 8.50 μs 16.7 ns 8.50 μs +0.0%
IntegerHasherBenchmark.Guid_Celerity_Hash64 8.02 μs 9.3 ns 8.05 μs -0.4%
IntegerHasherBenchmark.Int32_Bcl 685.3 ns 0.7 ns 686.1 ns -0.1%
IntegerHasherBenchmark.Int32_EqualityComparer 687.3 ns 12.5 ns 696.8 ns -1.4%
IntegerHasherBenchmark.Int32_Identity 685.7 ns 3.0 ns 684.0 ns +0.2%
IntegerHasherBenchmark.Int32_WangNaive 1.25 μs 0.9 ns 1.25 μs -0.0%
IntegerHasherBenchmark.Int32_Wang 3.02 μs 3.4 ns 3.02 μs -0.0%
IntegerHasherBenchmark.Int32_Murmur3 2.64 μs 0.7 ns 2.65 μs -0.1%
IntegerHasherBenchmark.Int64_Bcl 1.27 μs 1.3 ns 1.27 μs -0.1%
IntegerHasherBenchmark.Int64_EqualityComparer 1.25 μs 0.7 ns 1.25 μs +0.0%
IntegerHasherBenchmark.Int64_Identity 683.6 ns 0.4 ns 685.8 ns -0.3%
IntegerHasherBenchmark.Int64_WangNaive 1.87 μs 1.8 ns 1.87 μs -0.1%
IntegerHasherBenchmark.Int64_Wang 4.16 μs 12.1 ns 4.16 μs +0.1%
IntegerHasherBenchmark.Int64_Murmur3 2.37 μs 2.9 ns 2.37 μs +0.0%
IntegerHasherBenchmark.Int64_Wang_Hash64 4.16 μs 5.2 ns 4.16 μs -0.0%
IntegerHasherBenchmark.Int64_Murmur3_Hash64 2.37 μs 1.7 ns 2.37 μs -0.1%
IntegerHasherBenchmark.UInt32_Bcl 685.8 ns 1.1 ns 685.8 ns -0.0%
IntegerHasherBenchmark.UInt32_EqualityComparer 699.8 ns 1.6 ns 706.2 ns -0.9%
IntegerHasherBenchmark.UInt32_WangNaive 1.25 μs 0.4 ns 1.25 μs -0.0%
IntegerHasherBenchmark.UInt32_Wang 3.03 μs 6.1 ns 3.02 μs +0.1%
IntegerHasherBenchmark.UInt32_Murmur3 2.64 μs 1.1 ns 2.64 μs +0.0%
IntegerHasherBenchmark.UInt64_Bcl 1.27 μs 0.9 ns 1.27 μs +0.0%
IntegerHasherBenchmark.UInt64_EqualityComparer 1.25 μs 0.7 ns 1.25 μs +0.0%
IntegerHasherBenchmark.UInt64_Murmur3 2.37 μs 1.6 ns 2.37 μs -0.1%
IntegerHasherBenchmark.UInt64_Wang 4.16 μs 4.5 ns 4.16 μs -0.1%
IntegerHasherBenchmark.UInt64_WangNaive 1.87 μs 2.7 ns 1.87 μs -0.0%
IntegerHasherBenchmark.UInt64_Murmur3_Hash64 2.37 μs 3.5 ns 2.37 μs +0.1%
IntegerHasherBenchmark.UInt64_Wang_Hash64 4.16 μs 7.6 ns 4.16 μs +0.0%

Same-runner A/B (sharded 8-way): main (230a36b) and this PR were built and benchmarked back-to-back on the same runner per shard, so hardware variance cancels out. ⚠️ = PR mean is at least 10% slower than main and the gap exceeds 3σ of the two measurements' combined standard deviation; ✅ = correspondingly faster.

Observed spread of this run — |Δ| across all 757 paired rows: p50 0.4%, p90 4.8%, p95 8.7% (nearest-rank). A pull request usually touches a handful of these, so this is mostly the runner's own drift between the two slices — but a change to a shared primitive moves many rows at once and would raise these figures itself, so read it as the run's spread rather than as a floor the PR cannot have caused. A flag that does not stand out against it is worth re-running before acting on.

@marius-bughiu
marius-bughiu merged commit 3be39f7 into main Aug 10, 2026
22 checks passed
@marius-bughiu
marius-bughiu deleted the fix/issue-356-maxmonoid-xml-docs branch August 10, 2026 08:11
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.

MaxMonoid<T>'s XML remarks are malformed — an unclosed <para> drops the floating-point caveat from the shipped docs

2 participants