Merge pull request #6292 from ThomasWaldmann/fix-setdefault-master

implement more standard hashindex.setdefault behaviour
This commit is contained in:
TW 2022-02-13 13:54:13 +01:00 committed by GitHub
commit aafb22ecf7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 0 deletions

View file

@ -129,6 +129,7 @@ cdef class IndexBase:
def setdefault(self, key, value):
if not key in self:
self[key] = value
return self[key]
def __delitem__(self, key):
assert len(key) == self.key_size

View file

@ -70,6 +70,21 @@ class HashIndexTestCase(BaseTestCase):
idx.write(filepath)
del idx
self.assert_equal(len(cls.read(filepath)), 0)
idx = cls()
# Test setdefault - set non-existing key
idx.setdefault(H(0), make_value(42))
assert H(0) in idx
assert idx[H(0)] == make_value(42)
# Test setdefault - do not set existing key
idx.setdefault(H(0), make_value(23))
assert H(0) in idx
assert idx[H(0)] == make_value(42)
# Test setdefault - get-like return value, key not present
assert idx.setdefault(H(1), make_value(23)) == make_value(23)
# Test setdefault - get-like return value, key present
assert idx.setdefault(H(0), make_value(23)) == make_value(42)
# clean up setdefault test
del idx
def test_nsindex(self):
self._generic_test(NSIndex, lambda x: (x, x),