122 lines
2.1 KiB
Python
122 lines
2.1 KiB
Python
"""
|
|
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)
|