Make the Rational constructor accept '3.' and '.2' as well as '3.2'.
This commit is contained in:
parent
5a6cfee632
commit
1dabdb25f8
|
@ -25,9 +25,18 @@ def gcd(a, b):
|
||||||
return a
|
return a
|
||||||
|
|
||||||
|
|
||||||
_RATIONAL_FORMAT = re.compile(
|
_RATIONAL_FORMAT = re.compile(r"""
|
||||||
r'^\s*(?P<sign>[-+]?)(?P<num>\d+)'
|
\A\s* # optional whitespace at the start, then
|
||||||
r'(?:/(?P<denom>\d+)|\.(?P<decimal>\d+))?\s*$')
|
(?P<sign>[-+]?) # an optional sign, then
|
||||||
|
(?=\d|\.\d) # lookahead for digit or .digit
|
||||||
|
(?P<num>\d*) # numerator (possibly empty)
|
||||||
|
(?: # followed by an optional
|
||||||
|
/(?P<denom>\d+) # / and denominator
|
||||||
|
| # or
|
||||||
|
\.(?P<decimal>\d*) # decimal point and fractional part
|
||||||
|
)?
|
||||||
|
\s*\Z # and optional whitespace to finish
|
||||||
|
""", re.VERBOSE)
|
||||||
|
|
||||||
|
|
||||||
class Rational(RationalAbc):
|
class Rational(RationalAbc):
|
||||||
|
|
|
@ -78,6 +78,8 @@ class RationalTest(unittest.TestCase):
|
||||||
|
|
||||||
self.assertEquals((16, 5), _components(R(" 3.2 ")))
|
self.assertEquals((16, 5), _components(R(" 3.2 ")))
|
||||||
self.assertEquals((-16, 5), _components(R(u" -3.2 ")))
|
self.assertEquals((-16, 5), _components(R(u" -3.2 ")))
|
||||||
|
self.assertEquals((-3, 1), _components(R(u" -3. ")))
|
||||||
|
self.assertEquals((3, 5), _components(R(u" .6 ")))
|
||||||
|
|
||||||
|
|
||||||
self.assertRaisesMessage(
|
self.assertRaisesMessage(
|
||||||
|
@ -113,6 +115,10 @@ class RationalTest(unittest.TestCase):
|
||||||
# Don't accept combinations of decimals and rationals.
|
# Don't accept combinations of decimals and rationals.
|
||||||
ValueError, "Invalid literal for Rational: 3.2/7",
|
ValueError, "Invalid literal for Rational: 3.2/7",
|
||||||
R, "3.2/7")
|
R, "3.2/7")
|
||||||
|
self.assertRaisesMessage(
|
||||||
|
# Allow 3. and .3, but not .
|
||||||
|
ValueError, "Invalid literal for Rational: .",
|
||||||
|
R, ".")
|
||||||
|
|
||||||
def testImmutable(self):
|
def testImmutable(self):
|
||||||
r = R(7, 3)
|
r = R(7, 3)
|
||||||
|
|
Loading…
Reference in New Issue