# idle daydreams -*-perl-*-
# This test is too sensitive to slight variations in timing
# to serve as part of the test suite.
BEGIN {
eval {
require Time::HiRes;
Time::HiRes->VERSION(1.20);
};
if ($@) {
print "1..0\n";
print "ok 1 # skipped; requires Time::HiRes 1.20\n";
exit;
}
}
use Test; plan tests => 5;
use Event qw(loop unloop time all_events one_event);
# $Event::Eval = 1;
# $Event::DebugLevel = 4;
$Event::DIED = \&Event::verbose_exception_handler;
#----------- complex idle events; fuzzy timers
my ($cnt,$min,$max,$sum) = (0)x4;
my $prev;
$min = 100;
my $Min = .01;
my $Max = .2;
Event->idle(min => $Min, max => $Max, desc => "*IDLE*TEST*",
cb => sub {
my $now = time;
if (!$prev) { $prev = time; return }
my $d = $now - $prev;
$prev = $now;
$sum += $d;
$min = $d if $d < $min;
$max = $d if $d > $max;
unloop('done') if ++$cnt > 10;
});
my $sleeps=0;
Event->idle(repeat => 1, cb => sub { Event::sleep $Min; ++$sleeps });
Event::sleep .1; # try to let CPU settle
loop();
my $epsilon = .05;
ok $sleeps > 1; #did we test anything?
ok $min >= $Min-$epsilon;
ok $max < $Max+$epsilon; # fails without high resolution clock XXX
ok $sum/$cnt >= $min;
ok $sum/$cnt <= $max;