Commit | Line | Data |
---|---|---|
efec44ca AB |
1 | #!./perl -w |
2 | ||
69026470 JH |
3 | BEGIN { |
4 | chdir "t" if -d "t"; | |
5 | @INC = qw(. ../lib); | |
6 | } | |
7 | ||
efec44ca AB |
8 | # Test srand. |
9 | ||
10 | use strict; | |
69026470 JH |
11 | |
12 | require "test.pl"; | |
13 | plan(tests => 4); | |
efec44ca AB |
14 | |
15 | # Generate a load of random numbers. | |
16 | # int() avoids possible floating point error. | |
17 | sub mk_rand { map int rand 10000, 1..100; } | |
18 | ||
19 | ||
20 | # Check that rand() is deterministic. | |
21 | srand(1138); | |
22 | my @first_run = mk_rand; | |
23 | ||
24 | srand(1138); | |
25 | my @second_run = mk_rand; | |
26 | ||
27 | ok( eq_array(\@first_run, \@second_run), 'srand(), same arg, same rands' ); | |
28 | ||
29 | ||
30 | # Check that different seeds provide different random numbers | |
31 | srand(31337); | |
32 | @first_run = mk_rand; | |
33 | ||
34 | srand(1138); | |
35 | @second_run = mk_rand; | |
36 | ||
37 | ok( !eq_array(\@first_run, \@second_run), | |
38 | 'srand(), different arg, different rands' ); | |
39 | ||
40 | ||
97458a6f MS |
41 | # Check that srand() isn't affected by $_ |
42 | { | |
43 | local $_ = 42; | |
44 | srand(); | |
45 | @first_run = mk_rand; | |
46 | ||
47 | srand(42); | |
48 | @second_run = mk_rand; | |
49 | ||
50 | ok( !eq_array(\@first_run, \@second_run), | |
51 | 'srand(), no arg, not affected by $_'); | |
52 | } | |
53 | ||
efec44ca AB |
54 | # This test checks whether Perl called srand for you. |
55 | @first_run = `$^X -le "print int rand 100 for 1..100"`; | |
dc459aad | 56 | sleep(1); # in case our srand() is too time-dependent |
efec44ca AB |
57 | @second_run = `$^X -le "print int rand 100 for 1..100"`; |
58 | ||
59 | ok( !eq_array(\@first_run, \@second_run), 'srand() called automatically'); |