[Bug]: Switch operator lacks support of virtualized changeset

オープン
#1,164 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@Guflly がすでに取り組んでいます。

2026年8月8日 から。

  • #1166 @Guflly による — オープン

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
25/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
csharp
領域
backend

調査の方向性

The report identifies IChangeSet<TObject, TKey, VirtualContext<TObject>> and includes a failing SwitchSet_Switch_Virtualized test, but names no file. Start by finding that test and the existing Switch operator overloads for changesets. The linked open pull request #1166 means work is already underway; check its status before attempting this issue.

索引モデルが issue の本文から書いたものです。

説明

bug
Describe the bug 🐞

There is no Switch operator version for virtualized changesets IChangeSet<TObject, TKey, VirtualContext<TObject>>.

In this case default reactive Switch operator is used, so the test fails.

 [Fact]
 public void SwitchSet_Switch_Virtualized()
 {
     BehaviorSubject<bool> enableSubj = new(true);
     SourceCache<int, int> cache = new(x => x);
     cache.Edit(updater => updater.AddOrUpdate(Enumerable.Range(0, 100)));
     SortExpressionComparer<int> comparer = SortExpressionComparer<int>.Ascending(x => x);

     int count = 10;

     IObservable<VirtualRequest> virtualReqStream
         = Observable.Return(new VirtualRequest(0, count)).Concat(Observable.Never<VirtualRequest>());

     IObservable<IChangeSet<int, int, VirtualContext<int>>> virtualizedChangeSet = cache.Connect()
         .SortAndVirtualize(comparer, virtualReqStream);

     IObservable<IChangeSet<int, int, VirtualContext<int>>> testStream = enableSubj
         .Select(enable =>
         {
             if (!enable)
                 return Observable.Empty<IChangeSet<int, int, VirtualContext<int>>>();

             return virtualizedChangeSet;
         })
         .Switch();

     TestScheduler scheduler = new();

     ITestableObserver<IChangeSet<int, int, VirtualContext<int>>> observer
         = scheduler.CreateObserver<IChangeSet<int, int, VirtualContext<int>>>();

     testStream.Subscribe(observer);

     enableSubj.OnNext(false);

     Assert.Collection(
         observer.Messages,
         msg =>
         {
             Assert.Equal(NotificationKind.OnNext, msg.Value.Kind);
             Assert.Equal(count, msg.Value.Value.Adds);
             Assert.Equal(0, msg.Value.Value.Removes);
         },
         msg =>
         {
             Assert.Equal(NotificationKind.OnNext, msg.Value.Kind);
             Assert.Equal(0, msg.Value.Value.Adds);
             Assert.Equal(count, msg.Value.Value.Removes);
         }
     );
 }
DynamicData Version

9.4.33

主要言語
C#
スター
1.9k
フォーク
194
平均マージ
12分
マージ済み PR(30日)
1

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

reactivemarbles/DynamicData のほかの issue

reactivemarbles/DynamicData の issue をすべて見る

似ている issue

C# の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。