summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_types.py
diff options
context:
space:
mode:
authorWalter Dörwald <walter@livinglogic.de>2004-05-31 16:29:04 (GMT)
committerWalter Dörwald <walter@livinglogic.de>2004-05-31 16:29:04 (GMT)
commit0a6d0ff8d9ad27d66eb8195b9366e5b49dbb69b6 (patch)
treeac27098581c6e50a7776b6853950670aaa48473f /Lib/test/test_types.py
parentcbd0b365c1f27d390827e74a88a96f3a13034e0e (diff)
downloadcpython-0a6d0ff8d9ad27d66eb8195b9366e5b49dbb69b6.zip
cpython-0a6d0ff8d9ad27d66eb8195b9366e5b49dbb69b6.tar.gz
cpython-0a6d0ff8d9ad27d66eb8195b9366e5b49dbb69b6.tar.bz2
Port the dictionary tests from test_types.py to unittest. Collect as much
mapping tests as possible in mapping_test.py and reuse the tests in test_dict.py, test_userdict.py, test_weakref.py, test_os.py and test_shelve.py. From SF patch #736962.
Diffstat (limited to 'Lib/test/test_types.py')
-rw-r--r--Lib/test/test_types.py228
1 files changed, 1 insertions, 227 deletions
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index 4b4e19c..31466b7 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -10,7 +10,6 @@ if 0: raise TestFailed, '0 is true instead of false'
if 0L: raise TestFailed, '0L is true instead of false'
if 0.0: raise TestFailed, '0.0 is true instead of false'
if '': raise TestFailed, '\'\' is true instead of false'
-if {}: raise TestFailed, '{} is true instead of false'
if not 1: raise TestFailed, '1 is false instead of true'
if not 1L: raise TestFailed, '1L is false instead of true'
if not 1.0: raise TestFailed, '1.0 is false instead of true'
@@ -215,233 +214,8 @@ print '6.5.2 Tuples [see test_tuple.py]'
print '6.5.3 Lists [see test_list.py]'
+print '6.6 Mappings == Dictionaries [see test_dict.py]'
-print '6.6 Mappings == Dictionaries'
-# calling built-in types without argument must return empty
-if dict() != {}: raise TestFailed,'dict() does not return {}'
-d = {}
-if d.keys() != []: raise TestFailed, '{}.keys()'
-if d.values() != []: raise TestFailed, '{}.values()'
-if d.items() != []: raise TestFailed, '{}.items()'
-if d.has_key('a') != 0: raise TestFailed, '{}.has_key(\'a\')'
-if ('a' in d) != 0: raise TestFailed, "'a' in {}"
-if ('a' not in d) != 1: raise TestFailed, "'a' not in {}"
-if len(d) != 0: raise TestFailed, 'len({})'
-d = {'a': 1, 'b': 2}
-if len(d) != 2: raise TestFailed, 'len(dict)'
-k = d.keys()
-k.sort()
-if k != ['a', 'b']: raise TestFailed, 'dict keys()'
-if d.has_key('a') and d.has_key('b') and not d.has_key('c'): pass
-else: raise TestFailed, 'dict keys()'
-if 'a' in d and 'b' in d and 'c' not in d: pass
-else: raise TestFailed, 'dict keys() # in/not in version'
-if d['a'] != 1 or d['b'] != 2: raise TestFailed, 'dict item'
-d['c'] = 3
-d['a'] = 4
-if d['c'] != 3 or d['a'] != 4: raise TestFailed, 'dict item assignment'
-del d['b']
-if d != {'a': 4, 'c': 3}: raise TestFailed, 'dict item deletion'
-# dict.clear()
-d = {1:1, 2:2, 3:3}
-d.clear()
-if d != {}: raise TestFailed, 'dict clear'
-# dict.update()
-d.update({1:100})
-d.update({2:20})
-d.update({1:1, 2:2, 3:3})
-if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict update'
-d.clear()
-try: d.update(None)
-except (TypeError, AttributeError): pass
-else: raise TestFailed, 'dict.update(None), AttributeError expected'
-class SimpleUserDict:
- def __init__(self):
- self.d = {1:1, 2:2, 3:3}
- def keys(self):
- return self.d.keys()
- def __getitem__(self, i):
- return self.d[i]
-d.update(SimpleUserDict())
-if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict.update(instance)'
-d.clear()
-class FailingUserDict:
- def keys(self):
- raise ValueError
-try: d.update(FailingUserDict())
-except ValueError: pass
-else: raise TestFailed, 'dict.keys() expected ValueError'
-class FailingUserDict:
- def keys(self):
- class BogonIter:
- def __iter__(self):
- raise ValueError
- return BogonIter()
-try: d.update(FailingUserDict())
-except ValueError: pass
-else: raise TestFailed, 'iter(dict.keys()) expected ValueError'
-class FailingUserDict:
- def keys(self):
- class BogonIter:
- def __init__(self):
- self.i = 1
- def __iter__(self):
- return self
- def next(self):
- if self.i:
- self.i = 0
- return 'a'
- raise ValueError
- return BogonIter()
- def __getitem__(self, key):
- return key
-try: d.update(FailingUserDict())
-except ValueError: pass
-else: raise TestFailed, 'iter(dict.keys()).next() expected ValueError'
-class FailingUserDict:
- def keys(self):
- class BogonIter:
- def __init__(self):
- self.i = ord('a')
- def __iter__(self):
- return self
- def next(self):
- if self.i <= ord('z'):
- rtn = chr(self.i)
- self.i += 1
- return rtn
- raise StopIteration
- return BogonIter()
- def __getitem__(self, key):
- raise ValueError
-try: d.update(FailingUserDict())
-except ValueError: pass
-else: raise TestFailed, 'dict.update(), __getitem__ expected ValueError'
-# dict.fromkeys()
-if dict.fromkeys('abc') != {'a':None, 'b':None, 'c':None}:
- raise TestFailed, 'dict.fromkeys did not work as a class method'
-d = {}
-if d.fromkeys('abc') is d:
- raise TestFailed, 'dict.fromkeys did not return a new dict'
-if d.fromkeys('abc') != {'a':None, 'b':None, 'c':None}:
- raise TestFailed, 'dict.fromkeys failed with default value'
-if d.fromkeys((4,5),0) != {4:0, 5:0}:
- raise TestFailed, 'dict.fromkeys failed with specified value'
-if d.fromkeys([]) != {}:
- raise TestFailed, 'dict.fromkeys failed with null sequence'
-def g():
- yield 1
-if d.fromkeys(g()) != {1:None}:
- raise TestFailed, 'dict.fromkeys failed with a generator'
-try: {}.fromkeys(3)
-except TypeError: pass
-else: raise TestFailed, 'dict.fromkeys failed to raise TypeError'
-class dictlike(dict): pass
-if dictlike.fromkeys('a') != {'a':None}:
- raise TestFailed, 'dictsubclass.fromkeys did not inherit'
-if dictlike().fromkeys('a') != {'a':None}:
- raise TestFailed, 'dictsubclass.fromkeys did not inherit'
-if type(dictlike.fromkeys('a')) is not dictlike:
- raise TestFailed, 'dictsubclass.fromkeys created wrong type'
-if type(dictlike().fromkeys('a')) is not dictlike:
- raise TestFailed, 'dictsubclass.fromkeys created wrong type'
-from UserDict import UserDict
-class mydict(dict):
- def __new__(cls):
- return UserDict()
-ud = mydict.fromkeys('ab')
-if ud != {'a':None, 'b':None} or not isinstance(ud,UserDict):
- raise TestFailed, 'fromkeys did not instantiate using __new__'
-# dict.copy()
-d = {1:1, 2:2, 3:3}
-if d.copy() != {1:1, 2:2, 3:3}: raise TestFailed, 'dict copy'
-if {}.copy() != {}: raise TestFailed, 'empty dict copy'
-# dict.get()
-d = {}
-if d.get('c') is not None: raise TestFailed, 'missing {} get, no 2nd arg'
-if d.get('c', 3) != 3: raise TestFailed, 'missing {} get, w/ 2nd arg'
-d = {'a' : 1, 'b' : 2}
-if d.get('c') is not None: raise TestFailed, 'missing dict get, no 2nd arg'
-if d.get('c', 3) != 3: raise TestFailed, 'missing dict get, w/ 2nd arg'
-if d.get('a') != 1: raise TestFailed, 'present dict get, no 2nd arg'
-if d.get('a', 3) != 1: raise TestFailed, 'present dict get, w/ 2nd arg'
-# dict.setdefault()
-d = {}
-if d.setdefault('key0') is not None:
- raise TestFailed, 'missing {} setdefault, no 2nd arg'
-if d.setdefault('key0') is not None:
- raise TestFailed, 'present {} setdefault, no 2nd arg'
-d.setdefault('key', []).append(3)
-if d['key'][0] != 3:
- raise TestFailed, 'missing {} setdefault, w/ 2nd arg'
-d.setdefault('key', []).append(4)
-if len(d['key']) != 2:
- raise TestFailed, 'present {} setdefault, w/ 2nd arg'
-# dict.popitem()
-for copymode in -1, +1:
- # -1: b has same structure as a
- # +1: b is a.copy()
- for log2size in range(12):
- size = 2**log2size
- a = {}
- b = {}
- for i in range(size):
- a[repr(i)] = i
- if copymode < 0:
- b[repr(i)] = i
- if copymode > 0:
- b = a.copy()
- for i in range(size):
- ka, va = ta = a.popitem()
- if va != int(ka): raise TestFailed, "a.popitem: %s" % str(ta)
- kb, vb = tb = b.popitem()
- if vb != int(kb): raise TestFailed, "b.popitem: %s" % str(tb)
- if copymode < 0 and ta != tb:
- raise TestFailed, "a.popitem != b.popitem: %s, %s" % (
- str(ta), str(tb))
- if a: raise TestFailed, 'a not empty after popitems: %s' % str(a)
- if b: raise TestFailed, 'b not empty after popitems: %s' % str(b)
-
-d.clear()
-try: d.popitem()
-except KeyError: pass
-else: raise TestFailed, "{}.popitem doesn't raise KeyError"
-
-# Tests for pop with specified key
-d.clear()
-k, v = 'abc', 'def'
-d[k] = v
-try: d.pop('ghi')
-except KeyError: pass
-else: raise TestFailed, "{}.pop(k) doesn't raise KeyError when k not in dictionary"
-
-if d.pop(k) != v: raise TestFailed, "{}.pop(k) doesn't find known key/value pair"
-if len(d) > 0: raise TestFailed, "{}.pop(k) failed to remove the specified pair"
-
-try: d.pop(k)
-except KeyError: pass
-else: raise TestFailed, "{}.pop(k) doesn't raise KeyError when dictionary is empty"
-
-# verify longs/ints get same value when key > 32 bits (for 64-bit archs)
-# see SF bug #689659
-x = 4503599627370496L
-y = 4503599627370496
-h = {x: 'anything', y: 'something else'}
-if h[x] != h[y]:
- raise TestFailed, "long/int key should match"
-
-if d.pop(k, v) != v: raise TestFailed, "{}.pop(k, v) doesn't return default value"
-d[k] = v
-if d.pop(k, 1) != v: raise TestFailed, "{}.pop(k, v) doesn't find known key/value pair"
-
-d[1] = 1
-try:
- for i in d:
- d[i+1] = 1
-except RuntimeError:
- pass
-else:
- raise TestFailed, "changing dict size during iteration doesn't raise Error"
try: type(1, 2)
except TypeError: pass