mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-28 14:21:04 +08:00
74 lines
1.9 KiB
C#
74 lines
1.9 KiB
C#
using System.Reactive.Linq;
|
|
|
|
namespace R3.Tests.OperatorTests;
|
|
|
|
public class TakeTest
|
|
{
|
|
[Fact]
|
|
public async Task Take()
|
|
{
|
|
var xs = await Observable.Range(1, 10).Take(3).ToArrayAsync();
|
|
|
|
xs.ShouldBe([1, 2, 3]);
|
|
|
|
var timeProvider = new FakeTimeProvider();
|
|
|
|
var publisher = new Subject<int>();
|
|
var list = publisher.Take(TimeSpan.FromSeconds(5), timeProvider).ToLiveList();
|
|
|
|
publisher.OnNext(1);
|
|
publisher.OnNext(10);
|
|
publisher.OnNext(100);
|
|
list.AssertEqual([1, 10, 100]);
|
|
|
|
timeProvider.Advance(TimeSpan.FromSeconds(3));
|
|
|
|
publisher.OnNext(1000);
|
|
publisher.OnNext(10000);
|
|
list.AssertEqual([1, 10, 100, 1000, 10000]);
|
|
|
|
timeProvider.Advance(TimeSpan.FromSeconds(2));
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public void TakeFrame()
|
|
{
|
|
var frameProvider = new FakeFrameProvider();
|
|
|
|
var publisher = new Subject<int>();
|
|
var list = publisher.TakeFrame(5, frameProvider).ToLiveList();
|
|
publisher.OnNext(1);
|
|
publisher.OnNext(10);
|
|
publisher.OnNext(100);
|
|
list.AssertEqual([1, 10, 100]);
|
|
|
|
frameProvider.Advance(3);
|
|
publisher.OnNext(1000);
|
|
publisher.OnNext(10000);
|
|
list.AssertEqual([1, 10, 100, 1000, 10000]);
|
|
frameProvider.Advance(2);
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public void TakeFrame2()
|
|
{
|
|
var frameProvider = new FakeFrameProvider();
|
|
|
|
var list = Observable.EveryUpdate(frameProvider)
|
|
.Select(x => frameProvider.GetFrameCount())
|
|
.TakeFrame(5, frameProvider)
|
|
.ToLiveList();
|
|
|
|
frameProvider.Advance(3);
|
|
list.AssertEqual([0, 1, 2]);
|
|
|
|
frameProvider.Advance(2);
|
|
|
|
// not guranteed everyupdate and takeframe which call first
|
|
// list.AssertEqual([0, 1, 2, 3]);
|
|
list.AssertIsCompleted();
|
|
}
|
|
}
|