mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-121798: Add class method Decimal.from_number() (GH-121801)
It is an alternate constructor which only accepts a single numeric argument. Unlike to Decimal.from_float() it accepts also Decimal. Unlike to the standard constructor, it does not accept strings and tuples.
This commit is contained in:
parent
4b358ee647
commit
5217328f93
7 changed files with 122 additions and 0 deletions
|
@ -812,6 +812,29 @@ class ExplicitConstructionTest:
|
|||
x = random.expovariate(0.01) * (random.random() * 2.0 - 1.0)
|
||||
self.assertEqual(x, float(nc.create_decimal(x))) # roundtrip
|
||||
|
||||
def test_from_number(self, cls=None):
|
||||
Decimal = self.decimal.Decimal
|
||||
if cls is None:
|
||||
cls = Decimal
|
||||
|
||||
def check(arg, expected):
|
||||
d = cls.from_number(arg)
|
||||
self.assertIs(type(d), cls)
|
||||
self.assertEqual(d, expected)
|
||||
|
||||
check(314, Decimal(314))
|
||||
check(3.14, Decimal.from_float(3.14))
|
||||
check(Decimal('3.14'), Decimal('3.14'))
|
||||
self.assertRaises(TypeError, cls.from_number, 3+4j)
|
||||
self.assertRaises(TypeError, cls.from_number, '314')
|
||||
self.assertRaises(TypeError, cls.from_number, (0, (3, 1, 4), 0))
|
||||
self.assertRaises(TypeError, cls.from_number, object())
|
||||
|
||||
def test_from_number_subclass(self, cls=None):
|
||||
class DecimalSubclass(self.decimal.Decimal):
|
||||
pass
|
||||
self.test_from_number(DecimalSubclass)
|
||||
|
||||
def test_unicode_digits(self):
|
||||
Decimal = self.decimal.Decimal
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue