diff options
Diffstat (limited to 't/op/alarm.t')
-rw-r--r-- | t/op/alarm.t | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/t/op/alarm.t b/t/op/alarm.t new file mode 100644 index 0000000000..12c8c264c4 --- /dev/null +++ b/t/op/alarm.t @@ -0,0 +1,47 @@ +#!./perl + +BEGIN { + chdir 't'; + @INC = '../lib'; + require './test.pl'; +} + +BEGIN { + use Config; + if( !$Config{d_alarm} ) { + skip_all("alarm() not implemented on this platform"); + } +} + +plan tests => 4; +my $Perl = which_perl(); + +my $start_time = time; +eval { + local $SIG{ALRM} = sub { die "ALARM!\n" }; + alarm 3; + + # perlfunc recommends against using sleep in combination with alarm. + 1 while (time - $start_time < 6); +}; +alarm 0; +my $diff = time - $start_time; + +# alarm time might be one second less than you said. +is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs inf loop' ); +ok( $diff == 3 || $diff == 2, ' right time' ); + + +my $start_time = time; +eval { + local $SIG{ALRM} = sub { die "ALARM!\n" }; + alarm 3; + system(qq{$Perl -e "sleep 6"}); +}; +alarm 0; +$diff = time - $start_time; + +# alarm time might be one second less than you said. +is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs system()' ); + +ok( $diff == 3 || $diff == 2, ' right time' ); |