This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
question about fs.t
[perl5.git] / t / op / alarm.t
1 #!./perl 
2
3 BEGIN {
4     chdir 't';
5     @INC = '../lib';
6     require './test.pl';
7 }
8
9 BEGIN {
10     use Config;
11     if( !$Config{d_alarm} ) {
12         skip_all("alarm() not implemented on this platform");
13     }
14 }
15
16 plan tests => 4;
17 my $Perl = which_perl();
18
19 my $start_time = time;
20 eval {
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 };
27 alarm 0;
28 my $diff = time - $start_time;
29
30 # alarm time might be one second less than you said.
31 is( $@, "ALARM!\n",             'alarm w/$SIG{ALRM} vs inf loop' );
32 ok( abs($diff - 3) <= 1,   "   right time" );
33
34
35 my $start_time = time;
36 eval {
37     local $SIG{ALRM} = sub { die "ALARM!\n" };
38     alarm 3;
39     system(qq{$Perl -e "sleep 6"});
40 };
41 alarm 0;
42 $diff = time - $start_time;
43
44 # alarm time might be one second less than you said.
45 is( $@, "ALARM!\n",             'alarm w/$SIG{ALRM} vs system()' );
46
47 {
48     local $TODO = 'Why does system() block alarm() on VMS?' if $^O eq 'VMS';
49     ok( abs($diff - 3) <= 1,   "   right time (waited $diff secs for 3-sec alarm)" );
50 }