RandomNumber: add structured answer.

master
Matt Miller 2014-10-15 16:44:27 +02:00
parent 9060211316
commit 200988a929
2 changed files with 40 additions and 43 deletions

View File

@ -20,49 +20,35 @@ handle query_lc => sub {
srand();
# Random number.
# q_check (as opposed to q_internal) Allows for decimals.
if ( $_ =~ /^\!?(?:rand(?:om|)(?: num(?:ber|)|)(?: between|))( [\d\.]+|)(?: and|)( [\d\.]+|)$/i ) {
return unless ($_ =~ /^\!?(?:rand(?:om|)(?: num(?:ber|)|)(?: between|))( [\d\.]+|)(?: and|)( [\d\.]+|)$/i);
# For debugging.
# warn qq($1\t$2);
my $start = $1 || 0;
my $end = $2 || 0;
my $start = $1 || 0;
my $end = $2 || 0;
$start = 1000000000 if $start > 1000000000;
$start = 0 if $start < 0;
$start += 0;
# Messes up decimals.
# $start = int($start) if $start;
# $end= int($end) if $end;
$end = 1000000000 if $end > 1000000000;
$end = 0 if $end < 0;
$end = 1 if !$end;
$end += 0;
$start = 1000000000 if $start > 1000000000;
$start = 0 if $start < 0;
($end, $start) = ($start, $end) if ($start > $end);
$end = 1000000000 if $end > 1000000000;
$end = 0 if $end < 0;
my $rand = rand;
$end = $start if $end && $end < $start;
# For debugging.
# warn qq($start\t$end);
my $rand = rand;
if ( $start && !$end ) {
$rand *= $start;
$rand = int($rand) + 1;
}
elsif ( $start && $end && $start == $end ) {
$rand = $start;
}
elsif ( $start && $end ) {
$rand *= ( $end - $start + 1 );
$rand = int($rand) + $start;
}
# Add IP for display.
return $rand ." (random number)";
if ($start && $end) {
$rand *= ($end - $start + 1);
$rand = int($rand) + $start;
}
return;
return $rand . " (random number)",
structured_answer => {
input => [$start, $end],
operation => 'random number between',
result => $rand
};
};
1;

View File

@ -9,12 +9,23 @@ zci answer_type => 'rand';
zci is_cached => 0;
ddg_goodie_test(
[qw(
DDG::Goodie::RandomNumber
)],
'random number between 12 and 45' => test_zci( qr/\d{2} \(random number\)/),
'random number' => test_zci( qr/\d{1}\.\d+ \(random number\)/),
'random day' => undef,
'random access' => undef,
[qw( DDG::Goodie::RandomNumber )],
'random number between 12 and 45' => test_zci(
qr/\d{2} \(random number\)/,
structured_answer => {
input => [12, 45],
operation => 'random number between',
result => qr/^\d{2}$/
}
),
'random number' => test_zci(qr/\d{1}\.\d+ \(random number\)/,
structured_answer => {
input => [0, 1],
operation => 'random number between',
result => qr/\d{1}\.\d+/,
}
),
'random day' => undef,
'random access' => undef,
);
done_testing