summaryrefslogtreecommitdiffstatshomepage
path: root/tests
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-04-05 17:17:19 +0100
committerDamien George <damien.p.george@gmail.com>2014-04-05 17:17:19 +0100
commit95004e5114bd40cea256c3228ffac682d231855d (patch)
tree520edc9372b1e26e1e21c8e8c4a66f8ad93773da /tests
parente20b6b418ce5272c1945e4dabc02de0336b99697 (diff)
downloadmicropython-95004e5114bd40cea256c3228ffac682d231855d.tar.gz
micropython-95004e5114bd40cea256c3228ffac682d231855d.zip
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.
Diffstat (limited to 'tests')
-rw-r--r--tests/basics/dict-del.py29
-rw-r--r--tests/basics/set_remove.py24
2 files changed, 45 insertions, 8 deletions
diff --git a/tests/basics/dict-del.py b/tests/basics/dict-del.py
index 012ed0caea..d908fea424 100644
--- a/tests/basics/dict-del.py
+++ b/tests/basics/dict-del.py
@@ -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')
diff --git a/tests/basics/set_remove.py b/tests/basics/set_remove.py
index 208ab137f3..5627516c43 100644
--- a/tests/basics/set_remove.py
+++ b/tests/basics/set_remove.py
@@ -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')