Skip to content

Commit f6b4db1

Browse files
authored
Add benchmarks for updating/extending multidict with kwargs (#1103)
1 parent f59d8d4 commit f6b4db1

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

tests/test_multidict_benchmarks.py

+77
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,31 @@ def _run() -> None:
144144
md.update(items)
145145

146146

147+
def test_multidict_update_str_with_kwargs(
148+
benchmark: BenchmarkFixture, any_multidict_class: Type[MultiDict[str]]
149+
) -> None:
150+
md = any_multidict_class((str(i), str(i)) for i in range(100))
151+
items = {str(i): str(i) for i in range(100, 200)}
152+
kwargs = {str(i): str(i) for i in range(200, 300)}
153+
154+
@benchmark
155+
def _run() -> None:
156+
md.update(items, **kwargs)
157+
158+
159+
def test_cimultidict_update_istr_with_kwargs(
160+
benchmark: BenchmarkFixture,
161+
case_insensitive_multidict_class: Type[CIMultiDict[istr]],
162+
) -> None:
163+
md = case_insensitive_multidict_class((istr(i), istr(i)) for i in range(100))
164+
items: Dict[Union[str, istr], istr] = {istr(i): istr(i) for i in range(100, 200)}
165+
kwargs = {str(i): istr(i) for i in range(200, 300)}
166+
167+
@benchmark
168+
def _run() -> None:
169+
md.update(items, **kwargs)
170+
171+
147172
def test_multidict_extend_str(
148173
benchmark: BenchmarkFixture, any_multidict_class: Type[MultiDict[str]]
149174
) -> None:
@@ -171,6 +196,35 @@ def _run() -> None:
171196
md.extend(items)
172197

173198

199+
def test_multidict_extend_str_with_kwargs(
200+
benchmark: BenchmarkFixture, any_multidict_class: Type[MultiDict[str]]
201+
) -> None:
202+
base_md = any_multidict_class((str(i), str(i)) for i in range(100))
203+
items = {str(i): str(i) for i in range(200)}
204+
kwargs = {str(i): str(i) for i in range(200, 300)}
205+
206+
@benchmark
207+
def _run() -> None:
208+
for j in range(100):
209+
md = base_md.copy()
210+
md.extend(items, **kwargs)
211+
212+
213+
def test_cimultidict_extend_istr_with_kwargs(
214+
benchmark: BenchmarkFixture,
215+
case_insensitive_multidict_class: Type[CIMultiDict[istr]],
216+
) -> None:
217+
base_md = case_insensitive_multidict_class((istr(i), istr(i)) for i in range(100))
218+
items = {istr(i): istr(i) for i in range(200)}
219+
kwargs = {str(i): istr(i) for i in range(200, 300)}
220+
221+
@benchmark
222+
def _run() -> None:
223+
for _ in range(100):
224+
md = base_md.copy()
225+
md.extend(items, **kwargs)
226+
227+
174228
def test_multidict_delitem_str(
175229
benchmark: BenchmarkFixture, any_multidict_class: Type[MultiDict[str]]
176230
) -> None:
@@ -396,6 +450,29 @@ def _run() -> None:
396450
case_insensitive_multidict_class(items)
397451

398452

453+
def test_create_multidict_with_items_with_kwargs(
454+
benchmark: BenchmarkFixture, any_multidict_class: Type[MultiDict[str]]
455+
) -> None:
456+
items = [(str(i), str(i)) for i in range(100)]
457+
kwargs = {str(i): str(i) for i in range(100)}
458+
459+
@benchmark
460+
def _run() -> None:
461+
any_multidict_class(items, **kwargs)
462+
463+
464+
def test_create_cimultidict_with_items_istr_with_kwargs(
465+
benchmark: BenchmarkFixture,
466+
case_insensitive_multidict_class: Type[CIMultiDict[istr]],
467+
) -> None:
468+
items = [(istr(i), istr(i)) for i in range(100)]
469+
kwargs = {str(i): istr(i) for i in range(100)}
470+
471+
@benchmark
472+
def _run() -> None:
473+
case_insensitive_multidict_class(items, **kwargs)
474+
475+
399476
def test_create_empty_multidictproxy(benchmark: BenchmarkFixture) -> None:
400477
md: MultiDict[str] = MultiDict()
401478

tests/test_pickle.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def test_pickle_proxy(
3535
def test_pickle_istr(
3636
case_insensitive_str_class: type[istr], pickle_protocol: int
3737
) -> None:
38-
s = case_insensitive_str_class('str')
38+
s = case_insensitive_str_class("str")
3939
pbytes = pickle.dumps(s, pickle_protocol)
4040
obj = pickle.loads(pbytes)
4141
assert s == obj

0 commit comments

Comments
 (0)