5
5
from data_structures .hashing .hash_map import HashMap
6
6
7
7
8
- def get (k ):
8
+ def _get (k ):
9
9
return getitem , k
10
10
11
11
12
- def set_ (k , v ):
12
+ def _set (k , v ):
13
13
return setitem , k , v
14
14
15
15
16
- def delete (k ):
16
+ def _del (k ):
17
17
return delitem , k
18
18
19
19
20
- add_items = (
21
- set_ ("key_a" , "val_a" ),
22
- set_ ("key_b" , "val_b" ),
20
+ def _run_operation (obj , fun , * args ):
21
+ try :
22
+ return fun (obj , * args ), None
23
+ except Exception as e :
24
+ return None , e
25
+
26
+
27
+ _add_items = (
28
+ _set ("key_a" , "val_a" ),
29
+ _set ("key_b" , "val_b" ),
23
30
)
24
31
25
- overwrite_items = [
26
- set_ ("key_a" , "val_a" ),
27
- set_ ("key_a" , "val_b" ),
32
+ _overwrite_items = [
33
+ _set ("key_a" , "val_a" ),
34
+ _set ("key_a" , "val_b" ),
28
35
]
29
36
30
- delete_items = [
31
- set_ ("key_a" , "val_a" ),
32
- set_ ("key_b" , "val_b" ),
33
- delete ("key_a" ),
34
- delete ("key_b" ),
35
- set_ ("key_a" , "val_a" ),
36
- delete ("key_a" ),
37
+ _delete_items = [
38
+ _set ("key_a" , "val_a" ),
39
+ _set ("key_b" , "val_b" ),
40
+ _del ("key_a" ),
41
+ _del ("key_b" ),
42
+ _set ("key_a" , "val_a" ),
43
+ _del ("key_a" ),
37
44
]
38
45
39
- access_not_existing_items = [
40
- get ("key_a" ),
41
- delete ("key_a" ),
42
- set_ ("key_a" , "val_a" ),
43
- delete ("key_a" ),
44
- delete ("key_a" ),
45
- get ("key_a" ),
46
+ _access_absent_items = [
47
+ _get ("key_a" ),
48
+ _del ("key_a" ),
49
+ _set ("key_a" , "val_a" ),
50
+ _del ("key_a" ),
51
+ _del ("key_a" ),
52
+ _get ("key_a" ),
46
53
]
47
54
48
- with_resize_up = [
49
- * [set_ (x , x ) for x in range (5 )], # guaranteed upsize
55
+ _add_with_resize_up = [
56
+ * [_set (x , x ) for x in range (5 )], # guaranteed upsize
50
57
]
51
58
52
- with_resize_down = [
53
- * [set_ (x , x ) for x in range (5 )], # guaranteed upsize
54
- * [delete (x ) for x in range (5 )],
55
- set_ ("key_a" , "val_b" ),
59
+ _add_with_resize_down = [
60
+ * [_set (x , x ) for x in range (5 )], # guaranteed upsize
61
+ * [_del (x ) for x in range (5 )],
62
+ _set ("key_a" , "val_b" ),
56
63
]
57
64
58
65
59
66
@pytest .mark .parametrize (
60
67
"operations" ,
61
68
(
62
- pytest .param (add_items , id = "add items" ),
63
- pytest .param (overwrite_items , id = "overwrite items" ),
64
- pytest .param (delete_items , id = "delete items" ),
65
- pytest .param (access_not_existing_items , id = "access none existing items" ),
66
- pytest .param (with_resize_up , id = "with resize up" ),
67
- pytest .param (with_resize_down , id = "with resize down" ),
69
+ pytest .param (_add_items , id = "add items" ),
70
+ pytest .param (_overwrite_items , id = "overwrite items" ),
71
+ pytest .param (_delete_items , id = "delete items" ),
72
+ pytest .param (_access_absent_items , id = "access absent items" ),
73
+ pytest .param (_add_with_resize_up , id = "add with resize up" ),
74
+ pytest .param (_add_with_resize_down , id = "add with resize down" ),
68
75
),
69
76
)
70
77
def test_hash_map_is_the_same_as_dict (operations ):
@@ -80,8 +87,11 @@ def test_hash_map_is_the_same_as_dict(operations):
80
87
assert set (my .items ()) == set (py .items ())
81
88
82
89
83
- def _run_operation (obj , fun , * args ):
84
- try :
85
- return fun (obj , * args ), None
86
- except Exception as e :
87
- return None , e
90
+ def test_no_new_methods_was_added_to_api ():
91
+ def is_public (name : str ) -> bool :
92
+ return not name .startswith ("_" )
93
+
94
+ dict_public_names = {name for name in dir ({}) if is_public (name )}
95
+ hash_public_names = {name for name in dir (HashMap ()) if is_public (name )}
96
+
97
+ assert dict_public_names > hash_public_names
0 commit comments