The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# the time for -*-perl-*-

use Test; plan tests => 7;
use Event qw(loop unloop);

# $Event::DebugLevel = 3;

#if (0) {

my $count = 0;
Event->timer(after => 0.5, interval => .1, nice => -1,
	     cb => sub { ++$count }, desc => "counter");

my $when = time + 2;
Event->timer(at => $when, cb => sub { ok $when, $_[0]->w->at; },
	     desc => "at");

my $again;
Event->timer(after => .5, cb => sub {
		 my $o=shift;
		 ok 1;
		 if (!$again) {
		     $again=1;
		     $o->w->again;
		     $o->w->again;  #should be harmless
		 }
	     }, desc => "after");

my $ok = Event->timer(interval => .5, cb => sub {
			  unloop('ok') if $count > 30
		      }, desc => "exit");
ok abs($ok->at - time) < 3, 1, "diff was ".($ok->at - time);

my $long;
for (1..10) {
    $long = Event->timer(after => 60+rand(60), cb => sub { ok 0; });
}
$long->cb(sub { ok 1 });
$long->at(time);

ok loop(), 'ok';

$_->cancel for Event::all_watchers();

#}

my $depth=0;
Event->timer(interval => .01, cb => sub {
		 if (++$depth < 2) {
		     loop();
		 } else {
		     Event::unloop_all('reentrant');
		 }
	     });

ok loop(), 'reentrant';