Expand extension benchmarks and refresh performance results#16
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 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. 🚀 New features to boost your workflow:
|
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.
|
glennawatson
approved these changes
May 31, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
ReactiveUI.Primitives.Extensionsand compare againstReactiveUI.Extensions, System.Reactive, and R3 where applicable.--extensions-smokebenchmark validation path and update benchmark project warning suppressions for the generated-style comparison harness.GetMax/GetMinwith a dedicated two-source fast path and refresh the README benchmark posture with the latest joined run.Testing
ReactiveUI.Primitives.Extensions.Testspassed on net8.0, net9.0, and net10.0.Notes
NAwhere no direct System.Reactive or R3 alternative exists.