diff --git a/lib/DDG/Goodie/Conversions.pm b/lib/DDG/Goodie/Conversions.pm index c8e07b8a86e..46378c807d6 100755 --- a/lib/DDG/Goodie/Conversions.pm +++ b/lib/DDG/Goodie/Conversions.pm @@ -55,10 +55,16 @@ sub magnitude_order { my $maximum_input = 10**100; handle query_lc => sub { + # hack around issues with feet and inches for now $_ =~ s/"/inches/; $_ =~ s/'/feet/; + if($_ =~ /(\d+)\s*(?:feet|foot)\s*(\d+)(?:\s*inch(?:es)?)?/){ + my $feetHack = $1 + $2/12; + $_ =~ s/(\d+)\s*(?:feet|foot)\s*(\d+)(?:\s*inch(?:es)?)?/$feetHack feet/; + } + # hack support for "degrees" prefix on temperatures $_ =~ s/ degree[s]? (centigrade|celsius|fahrenheit|rankine)/ $1/; diff --git a/t/Conversions.t b/t/Conversions.t index cce94b41dae..f3ab746cb5a 100755 --- a/t/Conversions.t +++ b/t/Conversions.t @@ -94,6 +94,66 @@ ddg_goodie_test( physical_quantity => 'mass' }) ), + q`5' 7" in inches` => test_zci( + '5.5833333333333333333333333333333333333333 feet = 67 inches', + structured_answer => make_answer({ + markup_input => '5.5833333333333333333333333333333333333333', + raw_input => '5.5833333333333333333333333333333333333333', + from_unit => 'feet', + styled_output => '67', + raw_answer => '67', + to_unit => 'inches', + physical_quantity => 'length' + }) + ), + q`5feet 7inch in inches` => test_zci( + '5.5833333333333333333333333333333333333333 feet = 67 inches', + structured_answer => make_answer({ + markup_input => '5.5833333333333333333333333333333333333333', + raw_input => '5.5833333333333333333333333333333333333333', + from_unit => 'feet', + styled_output => '67', + raw_answer => '67', + to_unit => 'inches', + physical_quantity => 'length' + }) + ), + q`5 foot 7 inches in inches` => test_zci( + '5.5833333333333333333333333333333333333333 feet = 67 inches', + structured_answer => make_answer({ + markup_input => '5.5833333333333333333333333333333333333333', + raw_input => '5.5833333333333333333333333333333333333333', + from_unit => 'feet', + styled_output => '67', + raw_answer => '67', + to_unit => 'inches', + physical_quantity => 'length' + }) + ), + q`6 foot 3 inches in metres` => test_zci( + '6.25 feet = 1.905 meters', + structured_answer => make_answer({ + markup_input => '6.25', + raw_input => '6.25', + from_unit => 'feet', + styled_output => '1.905', + raw_answer => '1.905', + to_unit => 'meters', + physical_quantity => 'length' + }) + ), + q`6 foot 3 in metres` => test_zci( + '6.25 feet = 1.905 meters', + structured_answer => make_answer({ + markup_input => '6.25', + raw_input => '6.25', + from_unit => 'feet', + styled_output => '1.905', + raw_answer => '1.905', + to_unit => 'meters', + physical_quantity => 'length' + }) + ), 'convert 0.111 stone to pound' => test_zci( '0.111 stone = 1.554 pounds', structured_answer => make_answer({ @@ -118,6 +178,18 @@ ddg_goodie_test( physical_quantity => 'length' }) ), + q`5'7" in inches` => test_zci( + '5.5833333333333333333333333333333333333333 feet = 67 inches', + structured_answer => make_answer({ + markup_input => '5.5833333333333333333333333333333333333333', + raw_input => '5.5833333333333333333333333333333333333333', + from_unit => 'feet', + styled_output => '67', + raw_answer => '67', + to_unit => 'inches', + physical_quantity => 'length' + }) + ), 'convert 5 kelvin to fahrenheit' => test_zci( '5 kelvin = -450.670 degrees fahrenheit', structured_answer => make_answer({ @@ -2924,4 +2996,4 @@ ddg_goodie_test( '1E300 miles in metres' => undef, '5 pas.i to atm' => undef, ); -done_testing; \ No newline at end of file +done_testing;