diff options
-rw-r--r-- | lib/dtas/parse_freq.rb | 29 | ||||
-rw-r--r-- | test/test_parse_freq.rb | 18 |
2 files changed, 47 insertions, 0 deletions
diff --git a/lib/dtas/parse_freq.rb b/lib/dtas/parse_freq.rb new file mode 100644 index 0000000..2fd418e --- /dev/null +++ b/lib/dtas/parse_freq.rb @@ -0,0 +1,29 @@ +# Copyright (C) 2015 all contributors <dtas-all@nongnu.org> +# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) + +require_relative '../dtas' +module DTAS::ParseFreq + + # may return a negative frequency meaning lowpass + def parse_freq(val, round = true) + case val + when String + val = val.dup + mult = val.sub!(/k\z/, '') ? 1000 : 1 + val = (val.to_f * mult) + when Numeric + val + else + raise ArgumentError, "non-numeric value given" + end + + case round + when true, :int + val.round + when :float + val.to_f + else + raise ArgumentError, "usage: parse_freq(val, (true|:round))" + end + end +end diff --git a/test/test_parse_freq.rb b/test/test_parse_freq.rb new file mode 100644 index 0000000..1dcd8d6 --- /dev/null +++ b/test/test_parse_freq.rb @@ -0,0 +1,18 @@ +# Copyright (C) 2015 all contributors <dtas-all@nongnu.org> +# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) +require './test/helper' + +require 'dtas/parse_freq' + +class TestParseFreq < Testcase + include DTAS::ParseFreq + + def test_parse_freq + assert_equal(4000, parse_freq('4k')) + assert_equal(-4000, parse_freq('-4k')) + assert_equal(-4900, parse_freq('-4.9k')) + assert_equal(-4900, parse_freq('-4.9k', :int)) + + assert_equal(4900.5, parse_freq('4.9005k', :float)) + end +end |