mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-29 07:16:37 +08:00
71 lines
1.8 KiB
C#
71 lines
1.8 KiB
C#
using System.Reactive.Linq;
|
|
|
|
namespace R3.Tests.OperatorTests;
|
|
|
|
public class SkipLastTest
|
|
{
|
|
[Fact]
|
|
public async Task Skip()
|
|
{
|
|
var xs = await Observable.Range(1, 10).SkipLast(3).ToArrayAsync();
|
|
xs.ShouldBe([1, 2, 3, 4, 5, 6, 7]);
|
|
}
|
|
|
|
[Fact]
|
|
public void SkipTime()
|
|
{
|
|
var timeProvider = new FakeTimeProvider();
|
|
|
|
var publisher = new Subject<int>();
|
|
var list = publisher.SkipLast(TimeSpan.FromSeconds(3), timeProvider).ToLiveList();
|
|
|
|
publisher.OnNext(1);
|
|
publisher.OnNext(10);
|
|
list.AssertEqual([]);
|
|
|
|
timeProvider.Advance(TimeSpan.FromSeconds(2));
|
|
publisher.OnNext(100);
|
|
publisher.OnNext(1000);
|
|
|
|
timeProvider.Advance(TimeSpan.FromSeconds(1));
|
|
publisher.OnNext(2);
|
|
publisher.OnNext(20);
|
|
|
|
publisher.OnCompleted();
|
|
|
|
list.AssertEqual([1, 10]);
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public void SkipFrame2()
|
|
{
|
|
var frameProvider = new FakeFrameProvider();
|
|
var cts = new CancellationTokenSource();
|
|
|
|
var list = Observable.EveryUpdate(frameProvider, cts.Token)
|
|
.Select(x => frameProvider.GetFrameCount())
|
|
.SkipLastFrame(3, frameProvider)
|
|
.ToLiveList();
|
|
|
|
frameProvider.Advance(3); // 0, 1, 2
|
|
list.AssertEqual([]);
|
|
frameProvider.Advance(1); // 3
|
|
list.AssertEqual([0]);
|
|
|
|
frameProvider.Advance(1); // 4
|
|
list.AssertEqual([0, 1]);
|
|
|
|
frameProvider.Advance(1); // 5
|
|
list.AssertEqual([0, 1, 2]);
|
|
|
|
frameProvider.Advance(1); // 6
|
|
list.AssertEqual([0, 1, 2, 3]);
|
|
|
|
cts.Cancel(); // stop and OnCompleted(frame no is adavnced +1)
|
|
|
|
list.AssertEqual([0, 1, 2, 3, 4]);
|
|
list.AssertIsCompleted();
|
|
}
|
|
}
|