File: idle2.t

package info (click to toggle)
libevent-perl 1.06-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 712 kB
  • ctags: 588
  • sloc: ansic: 3,020; perl: 1,128; makefile: 46
file content (51 lines) | stat: -rw-r--r-- 1,134 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# idle daydreams -*-perl-*-

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;