524: Fix for Issue #523 r=hgrecco
Conversion to/from offset units was not checking for compatibility of dimensions.
A test for the issue was added.
This commit is contained in:
bors[bot] 2017-06-05 23:31:46 +00:00
commit 6e2b69ea32
2 changed files with 14 additions and 1 deletions

View File

@ -935,6 +935,11 @@ class NonMultiplicativeRegistry(BaseRegistry):
src_dim = self._get_dimensionality(src)
dst_dim = self._get_dimensionality(dst)
# If the source and destination dimensionality are different,
# then the conversion cannot be performed.
if src_dim != dst_dim:
raise DimensionalityError(src, dst, src_dim, dst_dim)
# For offset units we need to check if the conversion is allowed.
if src_offset_units or dst_offset_units:

View File

@ -10,7 +10,7 @@ from pint.unit import UnitsContainer
from pint.util import ParserHelper
from pint.compat import np, long_type
from pint.errors import UndefinedUnitError
from pint.errors import UndefinedUnitError, DimensionalityError
from pint.testsuite import QuantityTestCase, helpers
from pint.testsuite.compat import unittest
@ -205,6 +205,14 @@ class TestIssues(QuantityTestCase):
self.assertQuantityAlmostEqual(x + y, 5.1 * ureg.meter)
self.assertQuantityAlmostEqual(z, 5.1 * ureg.meter)
def test_issue523(self):
ureg = UnitRegistry()
src, dst = UnitsContainer({'meter': 1}), UnitsContainer({'degF': 1})
value = 10.
convert = self.ureg.convert
self.assertRaises(DimensionalityError, convert, value, src, dst)
self.assertRaises(DimensionalityError, convert, value, dst, src)
def _test_issueXX(self):
ureg = UnitRegistry()
try: