mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
* Add __eq__ and __ne__ so that things like list.index() work properly
for lists of mixed types. * Test that sort works.
This commit is contained in:
parent
10959b1c2a
commit
0aeac107ca
2 changed files with 25 additions and 14 deletions
|
@ -8,10 +8,6 @@
|
||||||
# and Tim Peters
|
# and Tim Peters
|
||||||
|
|
||||||
|
|
||||||
# Todo:
|
|
||||||
# Add rich comparisons for equality testing with other types
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This is a Py2.3 implementation of decimal floating point arithmetic based on
|
This is a Py2.3 implementation of decimal floating point arithmetic based on
|
||||||
the General Decimal Arithmetic Specification:
|
the General Decimal Arithmetic Specification:
|
||||||
|
@ -644,6 +640,16 @@ class Decimal(object):
|
||||||
return -1
|
return -1
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
if not isinstance(other, (Decimal, int, long)):
|
||||||
|
return False
|
||||||
|
return self.__cmp__(other) == 0
|
||||||
|
|
||||||
|
def __ne__(self, other):
|
||||||
|
if not isinstance(other, (Decimal, int, long)):
|
||||||
|
return True
|
||||||
|
return self.__cmp__(other) != 0
|
||||||
|
|
||||||
def compare(self, other, context=None):
|
def compare(self, other, context=None):
|
||||||
"""Compares one to another.
|
"""Compares one to another.
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ import pickle, copy
|
||||||
from decimal import *
|
from decimal import *
|
||||||
from test.test_support import TestSkipped, run_unittest, run_doctest, is_resource_enabled
|
from test.test_support import TestSkipped, run_unittest, run_doctest, is_resource_enabled
|
||||||
import threading
|
import threading
|
||||||
|
import random
|
||||||
|
|
||||||
# Tests are built around these assumed context defaults
|
# Tests are built around these assumed context defaults
|
||||||
DefaultContext.prec=9
|
DefaultContext.prec=9
|
||||||
|
@ -841,17 +842,17 @@ class DecimalUsabilityTest(unittest.TestCase):
|
||||||
self.assertEqual(cmp(dc,45), 0)
|
self.assertEqual(cmp(dc,45), 0)
|
||||||
|
|
||||||
#a Decimal and uncomparable
|
#a Decimal and uncomparable
|
||||||
try: da == 'ugly'
|
self.assertNotEqual(da, 'ugly')
|
||||||
except TypeError: pass
|
self.assertNotEqual(da, 32.7)
|
||||||
else: self.fail('Did not raised an error!')
|
self.assertNotEqual(da, object())
|
||||||
|
self.assertNotEqual(da, object)
|
||||||
|
|
||||||
try: da == '32.7'
|
# sortable
|
||||||
except TypeError: pass
|
a = map(Decimal, xrange(100))
|
||||||
else: self.fail('Did not raised an error!')
|
b = a[:]
|
||||||
|
random.shuffle(a)
|
||||||
try: da == object
|
a.sort()
|
||||||
except TypeError: pass
|
self.assertEqual(a, b)
|
||||||
else: self.fail('Did not raised an error!')
|
|
||||||
|
|
||||||
def test_copy_and_deepcopy_methods(self):
|
def test_copy_and_deepcopy_methods(self):
|
||||||
d = Decimal('43.24')
|
d = Decimal('43.24')
|
||||||
|
@ -1078,6 +1079,10 @@ class ContextAPItests(unittest.TestCase):
|
||||||
v2 = vars(e)[k]
|
v2 = vars(e)[k]
|
||||||
self.assertEqual(v1, v2)
|
self.assertEqual(v1, v2)
|
||||||
|
|
||||||
|
def test_equality_with_other_types(self):
|
||||||
|
self.assert_(Decimal(10) in ['a', 1.0, Decimal(10), (1,2), {}])
|
||||||
|
self.assert_(Decimal(10) not in ['a', 1.0, (1,2), {}])
|
||||||
|
|
||||||
def test_main(arith=False, verbose=None):
|
def test_main(arith=False, verbose=None):
|
||||||
""" Execute the tests.
|
""" Execute the tests.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue