mirror of
https://github.com/python/cpython.git
synced 2025-07-19 09:15:34 +00:00

Add support for the iterator and mapping protocols. For Py2.3, this was done for shelve, dumbdbm and other mapping objects, but not for bsddb and dbhash which were inadvertently missed.
94 lines
2.4 KiB
Python
Executable file
94 lines
2.4 KiB
Python
Executable file
#! /usr/bin/env python
|
|
"""Test script for the bsddb C module
|
|
Roger E. Masse
|
|
"""
|
|
import os
|
|
import bsddb
|
|
import dbhash # Just so we know it's imported
|
|
from test.test_support import verbose, verify, TESTFN
|
|
|
|
def test(openmethod, what, ondisk=1):
|
|
|
|
if verbose:
|
|
print '\nTesting: ', what, (ondisk and "on disk" or "in memory")
|
|
|
|
if ondisk:
|
|
fname = TESTFN
|
|
else:
|
|
fname = None
|
|
f = openmethod(fname, 'c')
|
|
verify(f.keys() == [])
|
|
if verbose:
|
|
print 'creation...'
|
|
keys = ['0', 'a', 'b', 'c', 'd', 'e', 'f']
|
|
values = ['', 'Guido', 'van', 'Rossum', 'invented', 'Python']
|
|
items = zip(keys, values)
|
|
for k, v in items:
|
|
f[k] = v
|
|
|
|
# test mapping iteration methods
|
|
from sets import Set
|
|
def verifyset(s1, s2):
|
|
verify(Set(s1) == Set(s2))
|
|
verify(keys, f.keys())
|
|
verify(values, f.values())
|
|
verify(items, f.items())
|
|
verify(keys, f)
|
|
verify(keys, f.iterkeys())
|
|
verify(values, f.itervalues())
|
|
verify(items, f.iteritems())
|
|
|
|
if verbose:
|
|
print '%s %s %s' % (f['a'], f['b'], f['c'])
|
|
|
|
if what == 'BTree' :
|
|
if verbose:
|
|
print 'key ordering...'
|
|
f.set_location(f.first()[0])
|
|
while 1:
|
|
try:
|
|
rec = f.next()
|
|
except KeyError:
|
|
if rec != f.last():
|
|
print 'Error, last != last!'
|
|
f.previous()
|
|
break
|
|
if verbose:
|
|
print rec
|
|
if not f.has_key('a'):
|
|
print 'Error, missing key!'
|
|
|
|
f.sync()
|
|
f.close()
|
|
if ondisk:
|
|
# if we're using an in-memory only db, we can't reopen it
|
|
# so finish here.
|
|
if verbose:
|
|
print 'modification...'
|
|
f = openmethod(fname, 'w')
|
|
f['d'] = 'discovered'
|
|
|
|
if verbose:
|
|
print 'access...'
|
|
for key in f.keys():
|
|
word = f[key]
|
|
if verbose:
|
|
print word
|
|
|
|
f.close()
|
|
try:
|
|
os.remove(fname)
|
|
except os.error:
|
|
pass
|
|
|
|
types = [(bsddb.btopen, 'BTree'),
|
|
(bsddb.hashopen, 'Hash Table'),
|
|
(bsddb.btopen, 'BTree', 0),
|
|
(bsddb.hashopen, 'Hash Table', 0),
|
|
# (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85
|
|
# appears broken... at least on
|
|
# Solaris Intel - rmasse 1/97
|
|
]
|
|
|
|
for type in types:
|
|
test(*type)
|