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