xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/t/op/alarm.t (revision 0:68f95e015346)
1#!./perl
2
3BEGIN {
4    chdir 't';
5    @INC = '../lib';
6    require './test.pl';
7}
8
9BEGIN {
10    use Config;
11    if( !$Config{d_alarm} ) {
12        skip_all("alarm() not implemented on this platform");
13    }
14}
15
16plan tests => 4;
17my $Perl = which_perl();
18
19my $start_time = time;
20eval {
21    local $SIG{ALRM} = sub { die "ALARM!\n" };
22    alarm 3;
23
24    # perlfunc recommends against using sleep in combination with alarm.
25    1 while (time - $start_time < 6);
26};
27alarm 0;
28my $diff = time - $start_time;
29
30# alarm time might be one second less than you said.
31is( $@, "ALARM!\n",             'alarm w/$SIG{ALRM} vs inf loop' );
32ok( abs($diff - 3) <= 1,   "   right time" );
33
34
35my $start_time = time;
36eval {
37    local $SIG{ALRM} = sub { die "ALARM!\n" };
38    alarm 3;
39    system(qq{$Perl -e "sleep 6"});
40};
41alarm 0;
42$diff = time - $start_time;
43
44# alarm time might be one second less than you said.
45is( $@, "ALARM!\n",             'alarm w/$SIG{ALRM} vs system()' );
46
47{
48    local $TODO = "Why does system() block alarm() on $^O?"
49		if $^O eq 'VMS' || $^O eq'MacOS' || $^O eq 'dos';
50    ok( abs($diff - 3) <= 1,   "   right time (waited $diff secs for 3-sec alarm)" );
51}
52