mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-22 00:46:12 +08:00
93 lines
2.6 KiB
C#
93 lines
2.6 KiB
C#
namespace R3.Tests.FactoryTests;
|
|
|
|
public class TimerTest
|
|
{
|
|
[Fact]
|
|
public void TimerSingle()
|
|
{
|
|
{
|
|
var fakeTime = new FakeTimeProvider();
|
|
|
|
var list = Observable.Timer(TimeSpan.FromSeconds(5), fakeTime).ToLiveList();
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(4));
|
|
list.AssertIsNotCompleted();
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertIsCompleted();
|
|
list.AssertEqual([Unit.Default]);
|
|
}
|
|
{
|
|
var fakeTime = new FakeTimeProvider();
|
|
|
|
var dueTime = fakeTime.GetUtcNow().AddSeconds(5);
|
|
|
|
var list = Observable.Timer(dueTime, fakeTime).ToLiveList();
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(4));
|
|
list.AssertIsNotCompleted();
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertIsCompleted();
|
|
list.AssertEqual([Unit.Default]);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void TimerMulti()
|
|
{
|
|
var cts = new CancellationTokenSource();
|
|
var fakeTime = new FakeTimeProvider();
|
|
|
|
var list = Observable.Timer(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(8), fakeTime, cts.Token).ToLiveList();
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(4));
|
|
list.AssertIsNotCompleted();
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertIsNotCompleted();
|
|
list.AssertEqual([Unit.Default]);
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(7));
|
|
list.AssertEqual([Unit.Default]);
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertEqual([Unit.Default, Unit.Default]);
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(8));
|
|
list.AssertEqual([Unit.Default, Unit.Default, Unit.Default]);
|
|
|
|
cts.Cancel();
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
[Fact]
|
|
public void Interval()
|
|
{
|
|
var cts = new CancellationTokenSource();
|
|
var fakeTime = new FakeTimeProvider();
|
|
|
|
var list = Observable.Interval(TimeSpan.FromSeconds(5), fakeTime, cts.Token).ToLiveList();
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(4));
|
|
list.AssertIsNotCompleted();
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertIsNotCompleted();
|
|
list.AssertEqual([Unit.Default]);
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(4));
|
|
list.AssertEqual([Unit.Default]);
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(1));
|
|
list.AssertEqual([Unit.Default, Unit.Default]);
|
|
|
|
fakeTime.Advance(TimeSpan.FromSeconds(5));
|
|
list.AssertEqual([Unit.Default, Unit.Default, Unit.Default]);
|
|
|
|
cts.Cancel();
|
|
list.AssertIsCompleted();
|
|
}
|
|
|
|
}
|