Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
1f67010
Add reactive compatibility and update tests
ChrisPulman Jun 17, 2026
c96163a
Add Reactive project and update tests/benchmarks
ChrisPulman Jun 18, 2026
e4f7135
Add MSBuild task to generate Reactive sources
ChrisPulman Jun 18, 2026
4868422
Migrate Subjects to ReactiveUI Signals
ChrisPulman Jun 19, 2026
41b032a
Migrate to ReactiveUI.Primitives signals
ChrisPulman Jun 19, 2026
1b069eb
Refactor ReactiveUI primitives and use Lock
ChrisPulman Jun 20, 2026
0116269
Remove unused ReactiveUI.Primitives usings
ChrisPulman Jun 20, 2026
2b47398
Remove ReactiveCompatibility layer
ChrisPulman Jun 20, 2026
929eb53
Use ReactiveUI.Primitives.Optional across project
ChrisPulman Jun 20, 2026
17ead0f
Use Optional<T> and add null guards
ChrisPulman Jun 20, 2026
5bad5f0
Guard SourceList and MergeMany against disposal
ChrisPulman Jun 20, 2026
7178ed7
Add script to rewrite reactive sources
ChrisPulman Jun 20, 2026
3f4df68
Migrate DynamicData to local ReactiveUI.Primitives refs
ChrisPulman Jun 20, 2026
08672cb
Merge branch 'main' into MigrateToPrimitives
ChrisPulman Jun 20, 2026
18e7dbc
Enable net8 AOT analyzers; update ReactiveUI deps
ChrisPulman Jun 21, 2026
4ab89c6
Remove redundant usings, centralize imports
ChrisPulman Jun 21, 2026
2804c6c
Use TaskPoolScheduler alias in code and csproj
ChrisPulman Jun 21, 2026
49f72a7
Standardize null checks, add polyfills, update build props
ChrisPulman Jun 21, 2026
ddfebea
Use TaskPoolScheduler.Default in tests
ChrisPulman Jun 21, 2026
e4e3b34
Replace ThreadPoolSequencer with ThreadPoolScheduler
ChrisPulman Jun 21, 2026
0a58896
Replace Signal.FromAsync with Observable
ChrisPulman Jun 21, 2026
3ce3a77
Rename Sequencer alias to Scheduler and update usages
ChrisPulman Jun 21, 2026
187d03e
Use Observable.Interval/Return in test helper
ChrisPulman Jun 21, 2026
02b087d
Replace null checks with ThrowIfNull helper
ChrisPulman Jun 21, 2026
e3936cb
Merge branch 'main' into MigrateToPrimitives
ChrisPulman Jun 21, 2026
080d8bf
Add 11.0.x to CI matrix
ChrisPulman Jun 21, 2026
80e72ff
Massive refactor across core modules
ChrisPulman Jun 21, 2026
7bd80fb
Update reactive shims and replace obsolete operators
ChrisPulman Jun 21, 2026
b6c0416
Update DynamicData.Reactive.csproj
ChrisPulman Jun 21, 2026
709a626
Update ReactiveShimObservableExtensions.cs
ChrisPulman Jun 21, 2026
d0c6cb6
docs: resolve DynamicData XML documentation warnings
ChrisPulman Jun 21, 2026
ddabd8e
fix: stabilize merge many changeset tests
ChrisPulman Jun 21, 2026
ed2de8f
fix: resolve primitives SubscribeSafe binding
ChrisPulman Jun 21, 2026
eab488a
Remove ReactiveUI.Primitives.Extensions package refs
ChrisPulman Jun 21, 2026
a7ec313
Use Lock for _gate initialization
ChrisPulman Jun 21, 2026
1c2be9c
Unify gate parameter type to Lock
ChrisPulman Jun 21, 2026
fefd786
Fix DeliveryQueue deadlock and add repro test
ChrisPulman Jun 22, 2026
3259677
Add deadlock tests and refactor list delivery
ChrisPulman Jun 22, 2026
2ad1818
Update package deps and filter bridge analyzer
ChrisPulman Jun 30, 2026
ea291c5
Merge branch 'main' into MigrateToPrimitives
ChrisPulman Jun 30, 2026
b590f8a
Merge branch 'main' into MigrateToPrimitives
ChrisPulman Jul 1, 2026
ab1382b
Bump ReactiveUI and build tooling packages
ChrisPulman Jul 30, 2026
3fa2176
Merge branch 'main' into MigrateToPrimitives
ChrisPulman Jul 30, 2026
5e02d8f
Merge remote-tracking branch 'origin/main' into MigrateToPrimitives
ChrisPulman Sep 18, 2026
038f402
fix: stabilize Primitives 8 migration and .NET 11 RC builds
ChrisPulman Sep 18, 2026
5bbc5b3
fix: preserve list lifecycle invariants and expand boundary coverage
ChrisPulman Sep 18, 2026
248a286
fix: stabilize CI test execution
ChrisPulman Sep 18, 2026
2910634
ci: stabilize concurrent test execution
ChrisPulman Sep 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 5 additions & 4 deletions .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ jobs:
runs-on: windows-latest
outputs:
nbgv: ${{ steps.nbgv.outputs.SemVer2 }}
steps:
steps:

- name: Checkout
uses: actions/checkout@v6
with:
Expand All @@ -29,6 +29,7 @@ jobs:
8.0.x
9.0.x
10.0.x
global-json-file: global.json
cache: true
cache-dependency-path: |
**/Directory.Packages.props
Expand All @@ -54,13 +55,13 @@ jobs:
- name: NuGet Restore
run: dotnet restore DynamicData.sln
working-directory: src

- name: Build
run: dotnet build --no-restore --configuration Release DynamicData.sln
working-directory: src

- name: Run Tests
run: dotnet test --no-restore --configuration Release DynamicData.sln
run: dotnet test --solution DynamicData.sln --no-build --configuration Release --max-parallel-test-modules 4 --maximum-parallel-tests 8
working-directory: src

- name: Pack
Expand Down
21 changes: 17 additions & 4 deletions .github/workflows/pr-test-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
matrix:
configuration: [Release] # future support for more coverage

runs-on: windows-latest
runs-on: windows-latest
if: github.event.workflow_run.conclusion == 'success'
steps:
- name: Checkout
Expand All @@ -32,10 +32,13 @@ jobs:
- name: Install .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
dotnet-version: |
6.0.x
7.0.x
8.0.x
9.0.x
10.0.x
global-json-file: global.json

- name: Cache SonarCloud packages
uses: actions/cache@v5
Expand All @@ -54,11 +57,21 @@ jobs:

- name: Run coverage tests
run: |
dotnet sonarscanner begin /k:"reactivemarbles_DynamicData" /o:"reactivemarbles" /d:sonar.token="${{ env.SONAR_TOKEN }}" /d:sonar.cs.opencover.reportsPaths=./**/coverage.opencover.xml /d:sonar.host.url="https://sonarcloud.io"
dotnet sonarscanner begin /k:"reactivemarbles_DynamicData" /o:"reactivemarbles" /d:sonar.token="${{ env.SONAR_TOKEN }}" /d:sonar.cs.vscoveragexml.reportsPaths=./TestResults/coverage/*.xml /d:sonar.host.url="https://sonarcloud.io"
if ($LASTEXITCODE -ne 0) { throw "Sonar scanner initialization failed." }
dotnet build --no-restore --no-incremental --configuration ${{ matrix.configuration }} -p:ContinuousIntegrationBuild=false DynamicData.sln
dotnet test --no-build --configuration ${{ matrix.configuration }} --collect:"XPlat Code Coverage" --settings coverlet.xml
if ($LASTEXITCODE -ne 0) { throw "Coverage build failed." }
dotnet test --solution DynamicData.sln --no-build --configuration ${{ matrix.configuration }} --max-parallel-test-modules 4 --maximum-parallel-tests 8 --coverage --coverage-settings coverage.config --coverage-output-format xml --results-directory TestResults/coverage
if ($LASTEXITCODE -ne 0) { throw "Coverage tests failed." }
dotnet sonarscanner end /d:sonar.token="${{ env.SONAR_TOKEN }}"
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

working-directory: src

- name: Upload coverage reports
if: always()
uses: actions/upload-artifact@v4.6.2
with:
name: coverage
path: src/TestResults/coverage/
5 changes: 3 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
outputs:
nbgv: ${{ steps.nbgv.outputs.SemVer2 }}
steps:

- name: Checkout
uses: actions/checkout@v6
with:
Expand All @@ -48,6 +48,7 @@ jobs:
8.0.x
9.0.x
10.0.x
global-json-file: global.json
cache: true
cache-dependency-path: |
**/Directory.Packages.props
Expand Down Expand Up @@ -113,7 +114,7 @@ jobs:
working-directory: src

- name: Run Tests
run: dotnet test --no-restore --configuration Release DynamicData.sln
run: dotnet test --solution DynamicData.sln --no-restore --configuration Release
working-directory: src

- name: Pack
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -369,3 +369,5 @@ src/*.Tests/API/ApiApprovalTests.*.received.txt

# JetBrains
.idea/

.dotnet-home/
43 changes: 43 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Building and testing

Install the .NET SDK version recorded in `global.json`. This branch uses .NET 11
RC1 (`11.0.100-rc.1.26425.128`) for local builds and CI. The SDK selection is
exact so an installed preview or a newer SDK cannot silently change the build.
`allowPrerelease` must be enabled because .NET classifies release candidates as
prerelease SDKs; the version pin selects the RC explicitly.

From the repository root:

```powershell
dotnet restore src/DynamicData.sln
dotnet build src/DynamicData.sln --configuration Release --no-restore
dotnet test --solution src/DynamicData.sln --configuration Release --no-build
```

`DynamicData` is the lean ReactiveUI.Primitives package. `DynamicData.Reactive`
compiles the shared sources with `REACTIVE_SHIM` and preserves the System.Reactive
API conventions. Changes to shared operators must preserve both variants.

Tests use TUnit and Microsoft.Testing.Platform. Use native, awaited TUnit assertions
and virtual time or explicit synchronization for asynchronous behavior. Collect
coverage for the shipping assemblies, including their auto-properties, with:

```powershell
dotnet test --solution src/DynamicData.sln --configuration Release --no-build --coverage --coverage-settings src/coverage.config --coverage-output-format cobertura
```

The coverage configuration selects the two shipping assemblies. It does not
exclude obsolete operators or uncovered source files.

Performance changes should include a benchmark for the affected operation and
regression tests covering observable values, completion, errors, and disposal.
Run the cache snapshot comparison with:

```powershell
dotnet run --project src/DynamicData.Benchmarks --configuration Release -- --filter '*ToCollection*'
```

Public API tests compare generated signatures against the framework-specific files
in `src/DynamicData.Tests/API`. A mismatch writes a `.received.txt` file next to the
reviewed `.verified.txt` baseline. Review the API diff before updating a baseline;
do not accept generated changes just to make the test pass.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
<PackageReference Include="xunit.runner.console" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5" />
<PackageReference Include="FluentAssertions" Version="6.12.2" />
<PackageReference Include="Microsoft.Reactive.Testing" Version="6.1.0" />
</ItemGroup>

</Project>
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -313,9 +313,17 @@ var myPeopleObservable = myPeople.Connect();
var countObservable = myPeopleObservable.Count();
var maxObservable = myPeopleObservable.Max(p => p.Age);
var minObservable = myPeopleObservable.Min(p => p.Age);
var stdDevObservable = myPeopleObservable.StdDev(p => p.Age);
var stdDevObservable = myPeopleObservable.StdDev(p => p.Age, 0);
var avgObservable = myPeopleObservable.Avg(p => p.Age);
```
`StdDev` computes the sample standard deviation: `sqrt(M2 / (count - 1))`,
where `M2` is the sum of squared differences from the mean. For example, values
`2, 4, 6` produce `2`. It returns the supplied fallback when fewer than two
values remain. This corrects the earlier formula, which divided by `count - 1`
after taking the square root. Integral and decimal selectors use decimal
accumulators, whose central moments must fit in the decimal range; floating-point
selectors retain double-precision rounding limits.

More aggregating operators will be added soon.

#### Logical Operators
Expand Down
10 changes: 10 additions & 0 deletions global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"sdk": {
"version": "11.0.100-rc.1.26425.128",
"rollForward": "disable",
"allowPrerelease": true
},
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
54 changes: 38 additions & 16 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<Project>
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591;1701;1702;1705;VSX1000;CA1510</NoWarn>
<NoWarn>$(NoWarn);1701;1702;1705;VSX1000;CA1510</NoWarn>
<Platform>AnyCPU</Platform>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
Expand All @@ -22,14 +22,15 @@
<PackageIcon>logo.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<EnableNETAnalyzers>true</EnableNETAnalyzers>

<!-- Publish the repository URL in the built .nupkg (in the NuSpec <Repository> element) -->
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<!-- Embed source files that are not tracked by the source control manager in the PDB -->
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<!-- Include PDB in the built .nupkg -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<WarningsAsErrors>CS8600;CS8602;CS8603;CS8604;CS8605;CS8606;CS8607;CS8608;CS8609;CS8610;CS8611;CS8612;CS8613;CS8614;CS8615;CS8616;CS8617;CS8618;CS8619;CS8620;CS8621;CS8622;CS8623;CS8624;CS8625;CS8626;CS8627;CS8628;CS8629;CS8630;CS8634;CS8766;CS8767</WarningsAsErrors>
<WarningsAsErrors>CS8600;CS8602;CS8603;CS8604;CS8605;CS8606;CS8607;CS8608;CS8609;CS8610;CS8611;CS8612;CS8613;CS8614;CS8615;CS8616;CS8617;CS8618;CS8619;CS8620;CS8621;CS8622;CS8623;CS8624;CS8625;CS8626;CS8627;CS8628;CS8629;CS8630;CS8634;CS8766;CS8767</WarningsAsErrors>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
Expand All @@ -38,33 +39,54 @@

<PropertyGroup Condition="$(IsTestProject) OR $(IsBenchmarkProject)">
<IsPackable>false</IsPackable>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
<CodeAnalysisRuleSet></CodeAnalysisRuleSet>
</PropertyGroup>

<PropertyGroup Condition="$(IsTestProject)">
<WarningsAsErrors>$(WarningsAsErrors);CS4014;CS8785;TUnit0030</WarningsAsErrors>
</PropertyGroup>

<PropertyGroup>
<SolutionDir Condition="'$(SolutionDir)' == ''">$(MSBuildThisFileDirectory)</SolutionDir>
</PropertyGroup>

<!-- AOT/trim analyzers on net8.0+ (netfx doesn't support them). -->
<PropertyGroup Condition="!$(IsTestProject) AND !$(IsBenchmarkProject) AND $([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
<IsAotCompatible>true</IsAotCompatible>
<EnableAotAnalyzer>true</EnableAotAnalyzer>
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>
</PropertyGroup>

<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net11.0'))">
<Features>$(Features);runtime-async=on</Features>
</PropertyGroup>

<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)..\images\logo.png" Pack="true" PackagePath="\"/>
<None Include="$(MSBuildThisFileDirectory)..\README.md" Pack="true" PackagePath="\"/>
<None Include="$(MSBuildThisFileDirectory)..\LICENSE" Pack="true" PackagePath="LICENSE" />
</ItemGroup>
<ItemGroup Condition="'$(IsTestProject)' != 'true'">
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.401" PrivateAssets="All" />
</ItemGroup>

<PropertyGroup>
<SolutionDir Condition="'$(SolutionDir)' == ''">$(MSBuildThisFileDirectory)</SolutionDir>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Nerdbank.GitVersioning" Version="3.9.50" PrivateAssets="all" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework) == 'netstandard2.0'">
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.10" />
<ItemGroup>
<PackageReference Include="Nerdbank.GitVersioning" Version="3.10.91" PrivateAssets="all" />
</ItemGroup>

<ItemGroup Condition="!$(IsTestProject) AND !$(IsBenchmarkProject)">
<PackageReference Include="stylecop.analyzers" Version="1.2.0-beta.556" PrivateAssets="all" />
<PackageReference Include="Roslynator.Analyzers" Version="4.15.0" PrivateAssets="All" />
</ItemGroup>
<ItemGroup Condition="!$(IsTestProject) AND !$(IsBenchmarkProject)">
<AdditionalFiles Include="$(MSBuildThisFileDirectory)stylecop.json" Link="stylecop.json" />
</ItemGroup>

<!-- Alias Lock to the dedicated System.Threading.Lock on .NET 9+ (faster EnterScope fast path),
and to a plain object elsewhere (the lock statement falls back to Monitor). -->
<ItemGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))">
<Using Include="System.Threading.Lock" Alias="Lock"/>
</ItemGroup>
<ItemGroup Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))">
<Using Include="System.Object" Alias="Lock"/>
</ItemGroup>
</Project>
19 changes: 13 additions & 6 deletions src/Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,26 @@
<ItemGroup>
<!-- Automatic file nesting, for .cs files-->
<Compile Update="**\*.*.cs">
<DependentUpon>$([System.Text.RegularExpressions.Regex]::Replace(%(Filename), '\.[^\.]+$', '.cs'))</DependentUpon>
<DependentUpon>$([System.Text.RegularExpressions.Regex]::Replace('%(Filename)', '\.[^\.]+$', '.cs'))</DependentUpon>
</Compile>
</ItemGroup>

<PropertyGroup Condition="$(TargetFramework.StartsWith('net4'))">
<DefineConstants>$(DefineConstants);P_LINQ;SUPPORTS_BINDINGLIST</DefineConstants>
</PropertyGroup>

<PropertyGroup Condition="$(TargetFramework.StartsWith('netstandard')) or $(TargetFramework.StartsWith('net6')) or $(TargetFramework.StartsWith('net7')) or $(TargetFramework.StartsWith('net8')) or $(TargetFramework.StartsWith('net9')) or $(TargetFramework.StartsWith('net10'))">
<DefineConstants>$(DefineConstants);NETSTANDARD;P_LINQ;SUPPORTS_BINDINGLIST;SUPPORTS_ASYNC_DISPOSABLE</DefineConstants>
<PropertyGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">
<DefineConstants>$(DefineConstants);NETSTANDARD;P_LINQ;SUPPORTS_BINDINGLIST;SUPPORTS_ASYNC_DISPOSABLE;SUPPORTS_DICTIONARY_MUTATION_DURING_ENUMERATION</DefineConstants>
</PropertyGroup>

<PropertyGroup Condition="$(TargetFramework.StartsWith('netstandard2.1')) or $(TargetFramework.StartsWith('netcoreapp3')) or $(TargetFramework.StartsWith('net5')) or $(TargetFramework.StartsWith('net6')) or $(TargetFramework.StartsWith('net7')) or $(TargetFramework.StartsWith('net8')) or $(TargetFramework.StartsWith('net9')) or $(TargetFramework.StartsWith('net10'))">
<DefineConstants>$(DefineConstants);SUPPORTS_DICTIONARY_MUTATION_DURING_ENUMERATION</DefineConstants>
</PropertyGroup>
<Target Name="RemoveGeneratedBridgeAnalyzers"
AfterTargets="ResolvePackageAssets"
BeforeTargets="CoreCompile;Csc">
<ItemGroup>
<ResolvedAnalyzers Remove="@(ResolvedAnalyzers)"
Condition="'%(ResolvedAnalyzers.Filename)' == 'ReactiveUI.Primitives.R3Bridge.Generator'" />
<Analyzer Remove="@(Analyzer)"
Condition="'%(Analyzer.Filename)' == 'ReactiveUI.Primitives.R3Bridge.Generator'" />
</ItemGroup>
</Target>
</Project>
10 changes: 0 additions & 10 deletions src/DynamicData.Benchmarks/Cache/DeliveryQueueBenchmarks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,6 @@
// Roland Pheasant licenses this file to you under the MIT license.
// See the LICENSE file in the project root for full license information.

using System;
using System.Linq;
using System.Reactive.Linq;
using System.Threading;
using System.Threading.Tasks;

using BenchmarkDotNet.Attributes;

using DynamicData.Binding;

namespace DynamicData.Benchmarks.Cache;

/// <summary>
Expand Down Expand Up @@ -55,11 +45,11 @@

_subscription = SubscriberWork switch
{
"Sort" => _cache.Connect()

Check warning on line 48 in src/DynamicData.Benchmarks/Cache/DeliveryQueueBenchmarks.cs

View workflow job for this annotation

GitHub Actions / build

'ObservableCacheEx.Sort<TObject, TKey>(IObservable<IChangeSet<TObject, TKey>>, IComparer<TObject>, SortOptimisations, int)' is obsolete: 'Use SortAndBind as it's more efficient'

Check warning on line 48 in src/DynamicData.Benchmarks/Cache/DeliveryQueueBenchmarks.cs

View workflow job for this annotation

GitHub Actions / build

'ObservableCacheEx.Sort<TObject, TKey>(IObservable<IChangeSet<TObject, TKey>>, IComparer<TObject>, SortOptimisations, int)' is obsolete: 'Use SortAndBind as it's more efficient'
.Sort(SortExpressionComparer<ContentionItem>.Ascending(i => i.Name))
.Subscribe(_ => { }),

"Chain" => _cache.Connect()

Check warning on line 52 in src/DynamicData.Benchmarks/Cache/DeliveryQueueBenchmarks.cs

View workflow job for this annotation

GitHub Actions / build

'ObservableCacheEx.Sort<TObject, TKey>(IObservable<IChangeSet<TObject, TKey>>, IComparer<TObject>, SortOptimisations, int)' is obsolete: 'Use SortAndBind as it's more efficient'

Check warning on line 52 in src/DynamicData.Benchmarks/Cache/DeliveryQueueBenchmarks.cs

View workflow job for this annotation

GitHub Actions / build

'ObservableCacheEx.Sort<TObject, TKey>(IObservable<IChangeSet<TObject, TKey>>, IComparer<TObject>, SortOptimisations, int)' is obsolete: 'Use SortAndBind as it's more efficient'
.Filter(i => i.Price > 0)
.Sort(SortExpressionComparer<ContentionItem>.Ascending(i => i.Name))
.Transform(i => new ContentionItemVm(i))
Expand Down Expand Up @@ -163,7 +153,7 @@

_subscription = SubscriberWork switch
{
"Sort" => pipeline

Check warning on line 156 in src/DynamicData.Benchmarks/Cache/DeliveryQueueBenchmarks.cs

View workflow job for this annotation

GitHub Actions / build

'ObservableCacheEx.Sort<TObject, TKey>(IObservable<IChangeSet<TObject, TKey>>, IComparer<TObject>, SortOptimisations, int)' is obsolete: 'Use SortAndBind as it's more efficient'

Check warning on line 156 in src/DynamicData.Benchmarks/Cache/DeliveryQueueBenchmarks.cs

View workflow job for this annotation

GitHub Actions / build

'ObservableCacheEx.Sort<TObject, TKey>(IObservable<IChangeSet<TObject, TKey>>, IComparer<TObject>, SortOptimisations, int)' is obsolete: 'Use SortAndBind as it's more efficient'
.Sort(SortExpressionComparer<MmcsChild>.Ascending(c => c.Name))
.Bind(out _)
.Subscribe(_ => { }),
Expand Down
4 changes: 0 additions & 4 deletions src/DynamicData.Benchmarks/Cache/DisposeMany_Cache.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@
// Roland Pheasant licenses this file to you under the MIT license.
// See the LICENSE file in the project root for full license information.

using System;

using BenchmarkDotNet.Attributes;

namespace DynamicData.Benchmarks.Cache
{
[MemoryDiagnoser]
Expand Down
11 changes: 1 addition & 10 deletions src/DynamicData.Benchmarks/Cache/EditDiff.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;

using BenchmarkDotNet.Attributes;

using DynamicData.Kernel;

namespace DynamicData.Benchmarks.Cache;

[MemoryDiagnoser]
Expand Down Expand Up @@ -49,7 +40,7 @@ public void OptionalAddsAndRemoves(int maxItems)
.Range(0, MaxItems)
.Select(n => (n % 2) == 0
? new Person(n, "Name")
: Optional.None<Person>())
: Optional<Person>.None)
.ToObservable()
.EditDiff(p => p.Id)
.Subscribe();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
using System;
using System.Collections.Immutable;
using System.Linq;

using BenchmarkDotNet.Attributes;

using Bogus;
using Bogus;

namespace DynamicData.Benchmarks.Cache;

Expand Down
Loading
Loading