python/nondist/sandbox/decimal Decimal.py, 1.25, 1.26 test_Decimal.py, 1.20, 1.21

Update of /cvsroot/python/python/nondist/sandbox/decimal In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14187 Modified Files: Decimal.py test_Decimal.py Log Message: * Remove from_float() from the API * copy and deepcopy produce new instances for subclasses * use assertRaises instead of try/except in tests Index: Decimal.py =================================================================== RCS file: /cvsroot/python/python/nondist/sandbox/decimal/Decimal.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** Decimal.py 29 Jun 2004 10:08:35 -0000 1.25 --- Decimal.py 29 Jun 2004 20:49:50 -0000 1.26 *************** *** 394,399 **** Decimal instance long, int - - To construct from float, use Decimal.from_float(float_value) """ if context is None: --- 394,397 ---- *************** *** 472,509 **** return - if isinstance(value, float): - raise TypeError("Can't convert " + repr(value) + - ". Try Decimal.from_float() instead.") - raise TypeError("Can't convert %r" % value) - def from_float(cls, value, positions=None): - """Class method that creates Decimal from float - - value must be float - if positions is present, rounds to that quantity of decimal places - """ - if not isinstance(value, float): - raise TypeError, "value must be float in Decimal.from_float(value, [positions])" - - # get the *very* exact string representation of the float - string_number = _floatToString(value) - d = cls(string_number) - - # round up to positions - if positions is not None: - if not isinstance(positions, (int,long)): - raise TypeError, "positions must be int or long in Decimal.from_float(value, [positions])" - if positions < 0: - raise TypeError, "positions must be not negative in Decimal.from_float(value, [positions])" - - # we must know what precision to pass to round - int_positions = len(d._int) + d._exp - real_decimal_positions = positions + int_positions - d = d._round(real_decimal_positions, ROUND_HALF_UP) - - return d - from_float = classmethod(from_float) - def _convert_other(self, other): """Convert other to Decimal. --- 470,475 ---- *************** *** 2096,2103 **** def __copy__(self): ! return self # I'm immutable; therefore I am my own clone def __deepcopy__(self, memo): ! return self # My components are also immutable --- 2062,2073 ---- def __copy__(self): ! if type(self) == Decimal: ! return self # I'm immutable; therefore I am my own clone ! return self.__class__(str(self)) def __deepcopy__(self, memo): ! if type(self) == Decimal: ! return self # My components are also immutable ! return self.__class__(str(self)) *************** *** 2240,2247 **** def create_decimal(self, num): """Creates a new Decimal instance but using self as context.""" ! if isinstance(num, float): ! d = Decimal.from_float(num) ! else: ! d = Decimal(num, context=self) return d._fix(context=self) --- 2210,2214 ---- def create_decimal(self, num): """Creates a new Decimal instance but using self as context.""" ! d = Decimal(num, context=self) return d._fix(context=self) Index: test_Decimal.py =================================================================== RCS file: /cvsroot/python/python/nondist/sandbox/decimal/test_Decimal.py,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** test_Decimal.py 29 Jun 2004 10:08:35 -0000 1.20 --- test_Decimal.py 29 Jun 2004 20:49:51 -0000 1.21 *************** *** 516,559 **** self.assertEqual(str(d), '4.5E+3') #just not a number d = Decimal('ugly') self.assertEqual(str(d), 'NaN') - def test_from_float(self): - '''Explicit construction with float.''' - - #positive integer - d = Decimal.from_float(45.0) - self.assertEqual(str(d), '45') - - #negative integer - d = Decimal.from_float(-32.0) - self.assertEqual(str(d), '-32') - - #zero - d = Decimal.from_float(0.0) - self.assertEqual(str(d), '0') - - #empty - self.assertRaises(TypeError, Decimal.from_float) - - #with a string - self.assertRaises(TypeError, Decimal.from_float, '') - - #with an int - self.assertRaises(TypeError, Decimal.from_float, 5) - - #inexact float, without positions - d = Decimal.from_float(2.2) - self.assertEqual(str(d), '2.20000000000000017763568394002504646778106689453125') - - #inexact float, rounded to some positions - d = Decimal.from_float(2.2, 16) - self.assertEqual(str(d), '2.2000000000000002') - - #inexact float, rounded to less positions - d = Decimal.from_float(2.2, 5) - self.assertEqual(str(d), '2.20000') - def test_from_tuples(self): '''Explicit construction with tuples.''' --- 516,524 ---- self.assertEqual(str(d), '4.5E+3') + # XXX this should raise a ValueError for an invalid literal #just not a number d = Decimal('ugly') self.assertEqual(str(d), 'NaN') def test_from_tuples(self): '''Explicit construction with tuples.''' *************** *** 637,646 **** self.assertEqual(str(d), '4.57E+5') - # from float - d = Decimal.from_float(1.1) - self.assertEqual(str(d), '1.100000000000000088817841970012523233890533447265625') - d = nc.create_decimal(1.1) - self.assertEqual(str(d), '1.10') - # from tuples d = Decimal( (1, (4, 3, 4, 9, 1, 3, 5, 3, 4), -25) ) --- 602,605 ---- *************** *** 663,722 **** '''Implicit construction with None.''' ! d = Decimal(5) ! try: ! d + None ! except TypeError: ! pass ! else: ! self.fail('Did not raised an error!') def test_from_int(self): '''Implicit construction with int or long.''' - d = Decimal(5) #normal ! e = d + 45 ! self.assertEqual(str(e), '50') #exceeding precision ! try: ! d + 123456789000 ! except ValueError: ! pass ! else: ! self.fail('Did not raised an error!') def test_from_string(self): '''Implicit construction with string.''' - d = Decimal(5) #just any string ! try: ! d + '3' ! except TypeError: ! pass ! else: ! self.fail('Did not raised an error!') def test_from_float(self): '''Implicit construction with float.''' - d = Decimal(5) #just any float ! try: ! d + 2.2 ! except TypeError: ! pass ! else: ! self.fail('Did not raised an error!') def test_from_Decimal(self): '''Implicit construction with Decimal.''' ! d = Decimal(5) ! ! #any Decimal ! e = d + Decimal(45) ! self.assertEqual(str(e), '50') --- 622,652 ---- '''Implicit construction with None.''' ! self.assertRaises(TypeError, eval, 'Decimal(5) + None', globals()) def test_from_int(self): '''Implicit construction with int or long.''' #normal ! self.assertEqual(str(Decimal(5) + 45), '50') #exceeding precision ! self.assertRaises(ValueError, eval, 'Decimal(5) + 123456789000', globals()) def test_from_string(self): '''Implicit construction with string.''' #just any string ! self.assertRaises(TypeError, eval, 'Decimal(5) + "3"', globals()) def test_from_float(self): '''Implicit construction with float.''' #just any float ! self.assertRaises(TypeError, eval, 'Decimal(5) + 2.2', globals()) def test_from_Decimal(self): '''Implicit construction with Decimal.''' ! self.assertEqual(Decimal(5) + Decimal(45), Decimal(50)) *************** *** 1281,1288 **** test_classes = [] ! if which == "Arithmetic" or which is None: test_classes.extend([DecimalTest]) ! if which == "Behaviour" or which is None: test_classes.extend([ DecimalExplicitConstructionTest, --- 1211,1218 ---- test_classes = [] ! if which is None or which.lower().startswith("arith"): test_classes.extend([DecimalTest]) ! if which is None or which.lower().startswith("behav"): test_classes.extend([ DecimalExplicitConstructionTest,
participants (1)
-
rhettingerīŧ users.sourceforge.net