This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix /test_bootstrap.t under -DPERL_NO_COW
[perl5.git] / t / op / alarm.t
CommitLineData
6ae8f908
MS
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
75af1a9c 16plan tests => 5;
6ae8f908
MS
17my $Perl = which_perl();
18
565aeffe
DM
19my ($start_time, $end_time);
20
6ae8f908 21eval {
565aeffe
DM
22 local $SIG{ALRM} = sub { $end_time = time; die "ALARM!\n" };
23 $start_time = time;
6ae8f908
MS
24 alarm 3;
25
26 # perlfunc recommends against using sleep in combination with alarm.
565aeffe
DM
27 1 while (($end_time = time) - $start_time < 6);
28 alarm 0;
6ae8f908
MS
29};
30alarm 0;
565aeffe 31my $diff = $end_time - $start_time;
6ae8f908
MS
32
33# alarm time might be one second less than you said.
34is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs inf loop' );
565aeffe 35ok( abs($diff - 3) <= 1, " right time (waited $diff secs for 3-sec alarm)" );
6ae8f908
MS
36
37
6ae8f908 38eval {
565aeffe
DM
39 local $SIG{ALRM} = sub { $end_time = time; die "ALARM!\n" };
40 $start_time = time;
6ae8f908
MS
41 alarm 3;
42 system(qq{$Perl -e "sleep 6"});
565aeffe
DM
43 $end_time = time;
44 alarm 0;
6ae8f908
MS
45};
46alarm 0;
565aeffe 47$diff = $end_time - $start_time;
6ae8f908
MS
48
49# alarm time might be one second less than you said.
50is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs system()' );
51
6ffa69ae 52{
ee1db23e 53 local $TODO = "Why does system() block alarm() on $^O?"
7b903762 54 if $^O eq 'VMS' || $^O eq 'dos';
6ffa69ae
CB
55 ok( abs($diff - 3) <= 1, " right time (waited $diff secs for 3-sec alarm)" );
56}
75af1a9c
DM
57
58
59{
60 local $SIG{"ALRM"} = sub { die };
565aeffe 61 eval { alarm(1); my $x = qx($Perl -e "sleep 3"); alarm(0); };
75af1a9c
DM
62 chomp (my $foo = "foo\n");
63 ok($foo eq "foo", '[perl #33928] chomp() fails after alarm(), `sleep`');
64}