Skip to content

Expand extension benchmarks and refresh performance results#16

Merged
glennawatson merged 7 commits into
mainfrom
UpdateBenchmarkResults
May 31, 2026
Merged

Expand extension benchmarks and refresh performance results#16
glennawatson merged 7 commits into
mainfrom
UpdateBenchmarkResults

Conversation

@ChrisPulman
Copy link
Copy Markdown
Member

Summary

  • Add full benchmark coverage for ReactiveUI.Primitives.Extensions and compare against ReactiveUI.Extensions, System.Reactive, and R3 where applicable.
  • Add the --extensions-smoke benchmark validation path and update benchmark project warning suppressions for the generated-style comparison harness.
  • Optimize GetMax/GetMin with a dedicated two-source fast path and refresh the README benchmark posture with the latest joined run.

Testing

  • Release solution build passed.
  • ReactiveUI.Primitives.Extensions.Tests passed on net8.0, net9.0, and net10.0.
  • Benchmark smoke validation passed, and the full joined BenchmarkDotNet run completed with 610 benchmarks.

Notes

  • The README benchmark table now reflects the current extension matrix and uses NA where no direct System.Reactive or R3 alternative exists.
  • Related issue: not provided in the current context.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 31, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 91.60%. Comparing base (d8c6eda) to head (495b4ab).

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #16      +/-   ##
==========================================
+ Coverage   91.53%   91.60%   +0.06%     
==========================================
  Files         398      399       +1     
  Lines       15481    15551      +70     
  Branches     2231     2248      +17     
==========================================
+ Hits        14171    14245      +74     
+ Misses        990      986       -4     
  Partials      320      320              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Analyzer cleanup:

- Remove the added benchmark warning suppression list and the file-level pragma.

- Split ReactiveExtensionsComparisonBenchmarks into documented partial files under analyzer line-length limits.

- Replace the compiled regex with GeneratedRegex and fix task, ternary, naming, ordering, magic-number, and unused-member diagnostics directly.

Benchmark refresh:

- Rerun the joined 610-benchmark BenchmarkDotNet suite after the benchmark harness changes.

- Update README benchmark artifact paths, duration, comparison posture, and all 87 ReactiveUI.Primitives.Extensions rows.

Validation:

- dotnet build src/ReactiveUI.Primitives.slnx -c Release passed with 0 warnings and 0 errors.

- Extension TUnit executables passed on net8.0, net9.0, and net10.0.
CI Fixes

- Wait for the scheduled Using action resource disposal before asserting DisposeCount, matching the operator's OnCompleted-then-dispose ordering.

Validation

- Built ReactiveUI.Primitives.Extensions.Tests for net8.0, net9.0, and net10.0 in Release with zero warnings.

- Ran the ReactiveUI.Primitives.Extensions.Tests executable for net8.0, net9.0, and net10.0; all 681 tests passed on each target framework.
Coverage

- Add GetMin single-source coverage for the zero-additional-source branch.

- Add binary GetMin/GetMax fast-path tests for post-terminal errors, empty-source completion, and duplicate completion guards.

Validation

- Built ReactiveUI.Primitives.Extensions.Tests for net8.0, net9.0, and net10.0 in Release with zero warnings.

- Ran ReactiveUI.Primitives.Extensions.Tests for net8.0 and net10.0; 687/687 passed on each.

- Ran ReactiveUI.Primitives.Extensions.Tests net9.0 with coverage; 687/687 passed, and MTP coverage reports no missed coverage for BinaryMinMaxObservable.cs or the changed ReactiveExtensions.cs lines.
Benchmark documentation:
- Explain that the 610 BenchmarkDotNet rows are raw implementation cases, while the README now groups them into 235 scenario comparison rows.
- Replace the previous 87-row extension-only table with an alphabetically ordered Scenario table covering ReactiveUI.Primitives and ReactiveUI.Primitives.Async together.
- Reorder comparison columns to ReactiveUI.Primitives, System.Reactive, R3, and ReactiveUI.Extensions and preserve NA where no alternative exists.

Validation:
- Verified the generated table has 235 alphabetized scenario rows and the requested header.
- Verified raw joined CSV counts are represented as 235 ReactiveUI.Primitives/Async, 155 System.Reactive, 130 R3, and 90 ReactiveUI.Extensions rows.
- Ran git diff --check.
Coverage:
- Add a three-source MinMaxObservable terminal-state test so the general multi-source path covers late OnNext, OnError, and OnCompleted guards.
- Add CancellationDisposable default-constructor state coverage for token access, IsDisposed, and idempotent Dispose.

Validation:
- Built ReactiveUI.Primitives.Extensions.Tests net10.0 in Release.
- Built ReactiveUI.Primitives.Tests net10.0 in Release with single-node build settings after a parallel file-lock retry.
- Ran ReactiveUI.Primitives.Extensions.Tests net10.0 executable: 688/688 passed.
- Ran ReactiveUI.Primitives.Tests net10.0 executable: 221/221 passed.
- Collected net10.0 coverage for both affected test assemblies.
- Verified MinMaxObservable.cs has no missed coverage via MtpunittestMCP.
- Verified CancellationDisposable.cs only retains the private debugger-display line as missed via MtpunittestMCP.
- Ran git diff --check.
@sonarqubecloud
Copy link
Copy Markdown

@glennawatson glennawatson merged commit 42d7468 into main May 31, 2026
16 of 17 checks passed
@glennawatson glennawatson deleted the UpdateBenchmarkResults branch May 31, 2026 17:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants