stub for wavelength conversion
parent
ea04ff4ae7
commit
e9e4f847a6
|
@ -0,0 +1,58 @@
|
|||
package DDG::Goodie::Wavelength;
|
||||
use utf8;
|
||||
# ABSTRACT: Frequency to wavelength
|
||||
|
||||
use DDG::Goodie;
|
||||
|
||||
use constant SPEED_OF_LIGHT => 299792458; #meters/second
|
||||
use constant MULTIPLIER => {
|
||||
hz => 1,
|
||||
khz => 10**3,
|
||||
mhz => 10**6,
|
||||
ghz => 10**9,
|
||||
thz => 10**12
|
||||
};
|
||||
|
||||
zci answer_type => "wavelength";
|
||||
zci is_cached => 1;
|
||||
|
||||
# Metadata. See https://duck.co/duckduckhack/metadata for help in filling out this section.
|
||||
name "Wavelength";
|
||||
description "Frequency to Wavelength translation";
|
||||
primary_example_queries "λ 2.4GHz", "144.39 MHz wavelength","lambda 1500kHz";
|
||||
category "physical_properties";
|
||||
topics "math", "science", "special_interest";
|
||||
code_url "https://github.com/nebulous/zeroclickinfo-goodies/blob/master/lib/DDG/Goodie/Wavelength.pm";
|
||||
attribution github => ["nebulous", "John Lifsey"],
|
||||
cpan => "nebulous",
|
||||
twitter => "aresweet";
|
||||
|
||||
# Triggers
|
||||
triggers any => "λ", "wavelength", "lambda";
|
||||
|
||||
# Handle statement
|
||||
handle remainder => sub {
|
||||
my ($freq,$units) = m/([\d\.]+)\s*((k|m|g|t)?hz)/i;
|
||||
return unless $freq and $units;
|
||||
|
||||
my $mul = MULTIPLIER->{lc($units)};
|
||||
my $hz_freq = $freq * $mul;
|
||||
|
||||
my $output_value = (SPEED_OF_LIGHT / $hz_freq);
|
||||
my $output_units = 'Meters';
|
||||
|
||||
# Fairly common to express higher freqs in cm/mm.
|
||||
# eg UHF 70cm band, microwave 3mm, etc
|
||||
if ($output_value<1) {
|
||||
$output_units = 'Centimeters';
|
||||
$output_value *= 100;
|
||||
if ($output_value<1) {
|
||||
$output_units = 'Millimeters';
|
||||
$output_value *= 10;
|
||||
}
|
||||
}
|
||||
|
||||
return "$freq $units λ = $output_value $output_units";
|
||||
};
|
||||
|
||||
1;
|
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More;
|
||||
use DDG::Test::Goodie;
|
||||
use utf8;
|
||||
|
||||
zci answer_type => "wavelength";
|
||||
zci is_cached => 1;
|
||||
|
||||
ddg_goodie_test(
|
||||
[qw( DDG::Goodie::Wavelength )],
|
||||
# At a minimum, be sure to include tests for all:
|
||||
# - primary_example_queries:
|
||||
'1Hz wavelength' => test_zci("1 Hz λ = 299792458 Meters"),
|
||||
'lambda 0.001kHz' => test_zci('0.001 kHz λ = 299792458 Meters'),
|
||||
|
||||
'λ 2.4GHz' => test_zci('1 Hz λ = 299792458 Meters'),
|
||||
#'144.39 MHz wavelength' => test_zci(''),
|
||||
#'lambda 1500kHz' => test_zci(''),
|
||||
# Try to include some examples of queries on which it might
|
||||
# appear that your answer will trigger, but does not.
|
||||
'lambda lambda lambda' => undef,
|
||||
);
|
||||
|
||||
done_testing;
|
Loading…
Reference in New Issue