use strict;
use warnings;

use vars qw(@patterns);

BEGIN {
    @patterns=(
        '\d\d\d',
        '\w\w\w',
        '[ABC][abc]',
        '[012][345]',
        '...',
        '[a-z][0-9]',
        '[aw-zX][123]',
        '[a-z]{5}',
        '0{80}',
        '[a-f][nprt]\d{3}',
        '\t\n\r\f\a\e',
        '\S\S\S',
        '\s\s\s',
        '\w{5,10}',
        '\w?',
        '\w+',
        '\w*',
        '',
    );
}

use Test::More tests => (3 * @patterns + 3);

# 1: Make sure we can load the module
BEGIN { use_ok('String::Random'); }

# 2: Test function interface to randregex()
is(String::Random::random_regex("[a][b][c]"), "abc", "random_regex()");

# Test regex support
for (@patterns) {
    my $ret=String::Random::random_regex($_);
    ok($ret =~ /^$_$/, "random_regex('$_')")
        or diag "'$_' failed, '$ret' does not match.\n";
}

# Test random_regex, this time passing an array.
my @ret=String::Random::random_regex(@patterns);
is(@ret, @patterns, "random_regex() return")
    or diag "random_regex() returned a different array size!";

for (my $n=0;$n<@patterns;$n++) {
    ok(defined($ret[$n]), "defined random_regex('$patterns[$n]')");
    ok($ret[$n] =~ /^$patterns[$n]$/, "random_regex('$patterns[$n]')")
        or diag "'$patterns[$n]' failed, '$ret[$n]' does not match.\n";
}

# vi: set ai et syntax=perl: