kopia lustrzana https://github.com/NanoVNA-Saver/nanovna-saver
SITools: add min and max for parsing
added parse_clamp_min and parse_clamp_min fixed tests for RFToolspull/108/head
rodzic
a5b10559f1
commit
ba3f31e60b
|
@ -33,6 +33,8 @@ class Format(NamedTuple):
|
|||
allow_strip: bool = False
|
||||
parse_sloppy_unit: bool = False
|
||||
parse_sloppy_kilo: bool = False
|
||||
parse_clamp_min: float = -math.inf
|
||||
parse_clamp_max: float = math.inf
|
||||
|
||||
|
||||
class Value:
|
||||
|
@ -66,7 +68,7 @@ class Value:
|
|||
elif offset > fmt.max_offset:
|
||||
offset = fmt.max_offset
|
||||
|
||||
real = self._value / (10 ** (offset * 3))
|
||||
real = float(self._value) / (10 ** (offset * 3))
|
||||
|
||||
if fmt.max_nr_digits < 4:
|
||||
formstr = ".0f"
|
||||
|
@ -111,7 +113,17 @@ class Value:
|
|||
elif self.fmt.assume_infinity and value == "-\N{INFINITY}":
|
||||
self._value = -math.inf
|
||||
else:
|
||||
self._value = decimal.Decimal(value, context=Value.CTX) * factor
|
||||
try:
|
||||
self._value = (decimal.Decimal(value, context=Value.CTX) *
|
||||
decimal.Decimal(factor, context=Value.CTX))
|
||||
except decimal.InvalidOperation:
|
||||
raise ValueError
|
||||
# TODO: get formating out of RFTools to be able to import clamp
|
||||
# and reuse code
|
||||
if self._value < self.fmt.parse_clamp_min:
|
||||
self._value = self.fmt.parse_clamp_min
|
||||
elif self._value > self.fmt.parse_clamp_max:
|
||||
self._value = self.fmt.parse_clamp_max
|
||||
return float(self._value)
|
||||
|
||||
@property
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# NanoVNASaver - a python program to view and export Touchstone data from a NanoVNA
|
||||
# NanoVNASaver
|
||||
# A python program to view and export Touchstone data from a NanoVNA
|
||||
# Copyright (C) 2019. Rune B. Broberg
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
|
@ -14,13 +15,20 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
# Import targets to be tested
|
||||
from NanoVNASaver import RFTools
|
||||
rft = RFTools.RFTools()
|
||||
from NanoVNASaver.RFTools import RFTools
|
||||
rft = RFTools()
|
||||
|
||||
|
||||
# TODO: should be tested against SITools.Value
|
||||
# RFTools.parseFrequency will hopefully go away in future
|
||||
# and be specialised by input field and device, like
|
||||
# parse_clamp_min=50000 for sweep input with
|
||||
# a nanovna version 1 attached ...
|
||||
# the hardware developer already announced a successor
|
||||
# which will have different limits
|
||||
class TestCases(unittest.TestCase):
|
||||
|
||||
def test_basicSIUnits(self):
|
||||
|
@ -58,7 +66,7 @@ class TestCases(unittest.TestCase):
|
|||
# Current behavior: unusual SI values that are legal, but inappropriate
|
||||
# for this application provide unexpected outputs. This behavior is
|
||||
# based on the FULL set of SI prefixes defined in SITools (below).
|
||||
#PREFIXES = ("y", "z", "a", "f", "p", "n", "µ", "m",
|
||||
# PREFIXES = ("y", "z", "a", "f", "p", "n", "µ", "m",
|
||||
# "", "k", "M", "G", "T", "P", "E", "Z", "Y")
|
||||
#######################################################################
|
||||
self.assertEqual(rft.parseFrequency('123EHz'), 123000000000000000000)
|
||||
|
|
Ładowanie…
Reference in New Issue