# Tests for HotBits site

use strict;
use warnings;

use Test::More 'tests' => 92;

# Warning signal handler
my @WARN;
$SIG{__WARN__} = sub { push(@WARN, @_); };

use_ok('Math::Random::MT::Auto', qw(rand irand), 'hotbits');

SKIP: {
    skip('LWP::Useragent not available', 91)
            if (grep(/^Failure creating user-agent/, @WARN));
    skip('HotBits site not reachable', 91)
            if (grep(/^Failure contacting/, @WARN));
    skip('Seed not obtained from HotBits site', 91)
            if ((grep(/^Failure getting data/, @WARN)) ||
                (grep(/^No seed data/, @WARN)));

    @WARN = grep(!/^Partial seed/, @WARN);
    @WARN = grep(!/^You have exceeded/, @WARN);
    ok(! @WARN, 'No warnings');
    diag('Warnings: ' . join(' | ', @WARN)) if (@WARN);

    can_ok('main', qw(rand irand));

    # Test rand()
    my ($rn, @rn);
    eval { $rn = rand(); };
    ok(! $@,                    'rand() died: ' . $@);
    ok(defined($rn),            'Got a random number');
    ok(Scalar::Util::looks_like_number($rn),  'Is a number: ' . $rn);
    ok($rn >= 0.0 && $rn < 1.0, 'In range: ' . $rn);

    # Test several values from irand()
    for my $ii (0 .. 9) {
        eval { $rn[$ii] = irand(); };
        ok(! $@,                        'irand() died: ' . $@);
        ok(defined($rn[$ii]),           'Got a random number');
        ok(Scalar::Util::looks_like_number($rn[$ii]), 'Is a number: ' . $rn[$ii]);
        ok(int($rn[$ii]) == $rn[$ii],   'Integer: ' . $rn[$ii]);
        for my $jj (0 .. $ii-1) {
            ok($rn[$jj] != $rn[$ii],    'Randomized');
        }
    }
}

# EOF
