mirror of
https://github.com/micropython/micropython.git
synced 2026-01-08 05:00:26 +01:00
py: Fix delete operation on map/dict and set objects.
Hash table can now be completely full (ie now NULL entry) before a resize is triggered. Use sentinel value to indicate delete entry in the table.
This commit is contained in:
@@ -1,8 +1,21 @@
|
||||
for i in range(100):
|
||||
d = dict()
|
||||
for j in range(100):
|
||||
d[j] = j
|
||||
del d[i]
|
||||
for j in range(100):
|
||||
if j not in d:
|
||||
print(j, 'not in d')
|
||||
for n in range(20):
|
||||
print('testing dict with {} items'.format(n))
|
||||
for i in range(n):
|
||||
# create dict
|
||||
d = dict()
|
||||
for j in range(n):
|
||||
d[str(j)] = j
|
||||
print(len(d))
|
||||
|
||||
# delete an item
|
||||
del d[str(i)]
|
||||
print(len(d))
|
||||
|
||||
# check items
|
||||
for j in range(n):
|
||||
if str(j) in d:
|
||||
if j == i:
|
||||
print(j, 'in d, but it should not be')
|
||||
else:
|
||||
if j != i:
|
||||
print(j, 'not in d, but it should be')
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# basic test
|
||||
s = {1}
|
||||
print(s.remove(1))
|
||||
print(list(s))
|
||||
@@ -7,3 +8,26 @@ except KeyError:
|
||||
pass
|
||||
else:
|
||||
print("failed to raise KeyError")
|
||||
|
||||
# test sets of varying size
|
||||
for n in range(20):
|
||||
print('testing set with {} items'.format(n))
|
||||
for i in range(n):
|
||||
# create set
|
||||
s = set()
|
||||
for j in range(n):
|
||||
s.add(str(j))
|
||||
print(len(s))
|
||||
|
||||
# delete an item
|
||||
s.remove(str(i))
|
||||
print(len(s))
|
||||
|
||||
# check items
|
||||
for j in range(n):
|
||||
if str(j) in s:
|
||||
if j == i:
|
||||
print(j, 'in s, but it should not be')
|
||||
else:
|
||||
if j != i:
|
||||
print(j, 'not in s, but it should be')
|
||||
|
||||
Reference in New Issue
Block a user