wavelength structured answer formatting and tests

master
John Lifsey 2015-02-04 15:00:56 -05:00
parent b37b525396
commit 602b89b6c5
2 changed files with 41 additions and 9 deletions

View File

@ -12,6 +12,13 @@ use constant MULTIPLIER => {
ghz => 10**9,
thz => 10**12
};
use constant FORMAT_UNITS => {
hz => 'Hz',
khz => 'kHz',
mhz => 'MHz',
ghz => 'GHz',
thz => 'THz'
};
zci answer_type => "wavelength";
zci is_cached => 1;
@ -32,7 +39,7 @@ triggers any => "λ", "wavelength", "lambda";
# Handle statement
handle remainder => sub {
my ($freq,$units) = m/([\d\.]+)\s*((k|m|g|t)?hz)/i;
my ($freq,$units) = m/([\d\.]+)\s*((k|M|G|T)?hz)/i;
return unless $freq and $units;
my $mul = MULTIPLIER->{lc($units)};
@ -52,7 +59,14 @@ handle remainder => sub {
}
}
return "$freq $units λ = $output_value $output_units";
my $output_text = "λ = $output_value $output_units";
return $output_text,
structured_answer => {
input => [$freq, FORMAT_UNITS->{lc($units)}],
operation => "Wavelength",
result => $output_text,
};
};
1;

View File

@ -9,15 +9,33 @@ use utf8;
zci answer_type => "wavelength";
zci is_cached => 1;
#input operation result
ddg_goodie_test(
[qw( DDG::Goodie::Wavelength )],
'1Hz wavelength' => test_zci("1 Hz λ = 299792458 Meters"),
'lambda 0.001kHz' => test_zci("0.001 kHz λ = 299792458 Meters"),
"λ 2400MHz" => test_zci("2400 MHz λ = 12.4913524166667 Centimeters"),
"λ 2.4GHz" => test_zci("2.4 GHz λ = 12.4913524166667 Centimeters"),
'144.39 MHz wavelength' => test_zci('144.39 MHz λ = 2.0762688413325 Meters'),
'lambda 1500kHz' => test_zci('1500 kHz λ = 199.861638666667 Meters'),
'lambda lambda lambda' => undef,
'1Hz wavelength' => test_zci(mk_test(1,299792458,'Hz')),
'lambda 0.001kHz' => test_zci(mk_test(0.001,299792458,'kHz')),
"λ 2400MHz" => test_zci(mk_test(2400,12.4913524166667,'MHz','Centimeters')),
"λ 2.4GHz" => test_zci(mk_test(2.4,12.4913524166667,'GHz','Centimeters')),
'144.39 MHz wavelength' => test_zci(mk_test(144.39,2.0762688413325)),
'lambda 1500kHz' => test_zci(mk_test(1500,199.861638666667,'kHz')),
'lambda lambda lambda' => undef,
);
done_testing;
sub mk_test {
my ($freq_value,$wave_value,$freq_units,$wave_units) = @_;
$freq_units ||= 'MHz';
$wave_units ||= 'Meters';
my $expect = "λ = $wave_value $wave_units";
return (
$expect,
structured_answer => {
input => [$freq_value,$freq_units],
operation => 'Wavelength',
result => $expect,
}
);
}