public void Do_Interval()
{
var sw = Stopwatch.StartNew();
var i = 0;
var elapsed = 0L;
var wait = new AutoResetEvent(false);
const int intervalTime = 100;
var killswitch = Do.Interval(() =>
{
i++;
if (i == 3)
{
elapsed = sw.ElapsedMilliseconds;
wait.Set();
}
}, intervalTime);
if (wait.WaitOne(intervalTime * 5))
{
killswitch.Kill();
var testMS = intervalTime * .9m;
Assert.IsTrue(elapsed > testMS, "Elapsed time is greater than " + testMS + " ms. (" + elapsed + ")");
Assert.AreEqual(3, i, "Too many executions.");
} else
{
Assert.Fail("interval not executed properly. Timeout occurred.");
}
Thread.Sleep(intervalTime * 2);
Assert.AreEqual(3, i, "interval not dead.");
}