public void Timed_Source_must_measure_time_it_takes_between_elements_matching_a_predicate()
{
var testActor = CreateTestProbe();
const int measureBetweenEvery = 5;
Action<TimeSpan> printInfo = interval =>
{
testActor.Tell(interval);
_helper.WriteLine($"Measured interval between {measureBetweenEvery} elements was {interval}");
};
var n = 20;
var testRuns = new[] {1, 2};
Func<Script<int, int>> script =
() =>
Script.Create(
Enumerable.Range(1, n)
.Select(x => new Tuple<ICollection<int>, ICollection<int>>(new[] {x}, new[] {x})).ToArray());
testRuns.ForEach(
_ =>
RunScript(script(), Materializer.Settings,
flow =>flow.Select(x => x)
.TimedIntervalBetween(i => i%measureBetweenEvery == 0, printInfo)));
var expectedNrOfOnIntervalCalls = testRuns.Length*((n/measureBetweenEvery) - 1); // first time has no value to compare to, so skips calling onInterval
Enumerable.Range(1,expectedNrOfOnIntervalCalls).ForEach(_=> testActor.ExpectMsg<TimeSpan>());
}