Commit | Line | Data |
---|---|---|
bf2a3dae YO |
1 | #!./perl |
2 | ||
3 | BEGIN { | |
4 | chdir 't' if -d 't'; | |
5 | @INC = '../lib'; | |
6 | require './test.pl'; | |
7 | require Config; | |
8 | Config->import; | |
9 | } | |
10 | ||
11 | skip_all_without_config('d_fork'); | |
12 | skip_all("This perl is built with NO_PERL_RAND_SEED") | |
13 | if $Config{ccflags} =~ /-DNO_PERL_RAND_SEED\b/; | |
14 | use strict; | |
15 | use warnings; | |
16 | ||
17 | for (1..2) { | |
18 | local $ENV{PERL_RAND_SEED} = 1; | |
19 | fresh_perl_is("print map { chr(rand(26)+65) } 1..10", | |
20 | "BLVIOAEZTJ", undef, "Test randomness with PERL_RAND_SEED=1"); | |
21 | } | |
22 | ||
23 | for (1..2) { | |
24 | local $ENV{PERL_RAND_SEED} = 2; | |
25 | fresh_perl_is("print map { chr(rand(26)+65) } 1..10", | |
26 | "XEOUOFRPQZ", undef, "Test randomness with PERL_RAND_SEED=2"); | |
27 | } | |
28 | ||
29 | my %got; | |
30 | for my $try (1..10) { | |
31 | local $ENV{PERL_RAND_SEED}; | |
32 | my ($out,$err)= runperl_and_capture({}, ['-e',"print map { chr(rand(26)+65) } 1..10;"]); | |
33 | if ($err) { diag $err } | |
34 | $got{$out}++; | |
35 | } | |
36 | ok(8 <= keys %got, "Got at least 8 different strings"); | |
37 | for (1..2) { | |
38 | local $ENV{PERL_RAND_SEED} = 1; | |
39 | my ($out,$err)= runperl_and_capture({}, ['-le', | |
40 | <<'EOF_TEST_CODE' | |
41 | for my $l ("A".."E") { | |
42 | my $pid= fork; | |
43 | if ($pid) { | |
44 | push @pids, $pid; | |
45 | } | |
46 | elsif (!defined $pid) { | |
47 | print "$l:failed fork"; | |
48 | } elsif (!$pid) { | |
49 | print "$l:", map { chr(rand(26)+65) } 1..10; | |
50 | exit; | |
51 | } | |
52 | } | |
53 | waitpid $_,0 for @pids; | |
54 | EOF_TEST_CODE | |
55 | ]); | |
56 | is($err, "", "No exceptions forking."); | |
57 | my @parts= sort { $a cmp $b } split /\n/, $out; | |
58 | my @want= ( | |
59 | "A:KNXDITWWJZ", | |
60 | "B:WDQJGTBJQS", | |
61 | "C:ZGYCCINIHE", | |
62 | "D:UGLGAEXFBP", | |
63 | "E:MQLTNZGZQB" | |
64 | ); | |
65 | is("@parts","@want","Works as expected with forks."); | |
66 | } | |
67 | ||
68 | done_testing(); |