# 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;