| """ |
| Benchmark attrs using CodSpeed. |
| """ |
| |
| from __future__ import annotations |
| |
| import pytest |
| |
| import attrs |
| |
| |
| pytestmark = pytest.mark.benchmark() |
| |
| ROUNDS = 1_000 |
| |
| |
| def test_create_simple_class(): |
| """ |
| Benchmark creating a simple class without any extras. |
| """ |
| for _ in range(ROUNDS): |
| |
| @attrs.define |
| class LocalC: |
| x: int |
| y: str |
| z: dict[str, int] |
| |
| |
| def test_create_frozen_class(): |
| """ |
| Benchmark creating a frozen class without any extras. |
| """ |
| for _ in range(ROUNDS): |
| |
| @attrs.frozen |
| class LocalC: |
| x: int |
| y: str |
| z: dict[str, int] |
| |
| LocalC(1, "2", {}) |
| |
| |
| def test_create_simple_class_make_class(): |
| """ |
| Benchmark creating a simple class using attrs.make_class(). |
| """ |
| for i in range(ROUNDS): |
| LocalC = attrs.make_class( |
| f"LocalC{i}", |
| { |
| "x": attrs.field(type=int), |
| "y": attrs.field(type=str), |
| "z": attrs.field(type=dict[str, int]), |
| }, |
| ) |
| |
| LocalC(1, "2", {}) |
| |
| |
| @attrs.define |
| class C: |
| x: int = 0 |
| y: str = "foo" |
| z: dict[str, int] = attrs.Factory(dict) |
| |
| |
| def test_instantiate_no_defaults(): |
| """ |
| Benchmark instantiating a class without using any defaults. |
| """ |
| for _ in range(ROUNDS): |
| C(1, "2", {}) |
| |
| |
| def test_instantiate_with_defaults(): |
| """ |
| Benchmark instantiating a class relying on defaults. |
| """ |
| for _ in range(ROUNDS): |
| C() |
| |
| |
| def test_eq_equal(): |
| """ |
| Benchmark comparing two equal instances for equality. |
| """ |
| c1 = C() |
| c2 = C() |
| |
| for _ in range(ROUNDS): |
| c1 == c2 |
| |
| |
| def test_eq_unequal(): |
| """ |
| Benchmark comparing two unequal instances for equality. |
| """ |
| c1 = C() |
| c2 = C(1, "bar", {"baz": 42}) |
| |
| for _ in range(ROUNDS): |
| c1 == c2 |
| |
| |
| @attrs.frozen |
| class HashableC: |
| x: int = 0 |
| y: str = "foo" |
| z: tuple[str] = ("bar",) |
| |
| |
| def test_hash(): |
| """ |
| Benchmark hashing an instance. |
| """ |
| c = HashableC() |
| |
| for _ in range(ROUNDS): |
| hash(c) |