public void A_SkipWithin_must_deliver_elements_after_the_duration_but_not_before()
{
var input = Enumerable.Range(1, 200).GetEnumerator();
var p = TestPublisher.CreateManualProbe<int>(this);
var c = TestSubscriber.CreateManualProbe<int>(this);
Source.FromPublisher(p)
.SkipWithin(TimeSpan.FromSeconds(1))
.To(Sink.FromSubscriber(c))
.Run(Materializer);
var pSub = p.ExpectSubscription();
var cSub = c.ExpectSubscription();
cSub.Request(100);
var demand1 = pSub.ExpectRequest();
Enumerable.Range(1, (int)demand1).ForEach(_ =>
{
input.MoveNext();
pSub.SendNext(input.Current);
});
var demand2 = pSub.ExpectRequest();
Enumerable.Range(1, (int)demand2).ForEach(_ =>
{
input.MoveNext();
pSub.SendNext(input.Current);
});
var demand3 = pSub.ExpectRequest();
c.ExpectNoMsg(TimeSpan.FromMilliseconds(1500));
Enumerable.Range(1, (int)demand3).ForEach(_ =>
{
input.MoveNext();
pSub.SendNext(input.Current);
});
Enumerable.Range((int) (demand1 + demand2 + 1), (int)demand3)
.ForEach(n => c.ExpectNext(n));
pSub.SendComplete();
c.ExpectComplete();
c.ExpectNoMsg(TimeSpan.FromMilliseconds(200));
}