File: test_sample.py

package info (click to toggle)
python-pytest-benchmark 5.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,072 kB
  • sloc: python: 5,232; makefile: 12
file content (72 lines) | stat: -rw-r--r-- 1,573 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from functools import partial

import pytest

empty = object()


class cached_property:
    def __init__(self, func):
        self.func = func

    def __get__(self, obj, cls):
        value = obj.__dict__[self.func.__name__] = self.func(obj)
        return value


class SimpleProxy:
    def __init__(self, factory):
        self.factory = factory
        self.object = empty

    def __str__(self):
        if self.object is empty:
            self.object = self.factory()
        return str(self.object)


class CachedPropertyProxy:
    def __init__(self, factory):
        self.factory = factory

    @cached_property
    def object(self):
        return self.factory()

    def __str__(self):
        return str(self.object)


class LocalsSimpleProxy:
    def __init__(self, factory):
        self.factory = factory
        self.object = empty

    def __str__(self, func=str):
        if self.object is empty:
            self.object = self.factory()
        return func(self.object)


class LocalsCachedPropertyProxy:
    def __init__(self, factory):
        self.factory = factory

    @cached_property
    def object(self):
        return self.factory()

    def __str__(self, func=str):
        return func(self.object)


@pytest.fixture(scope='module', params=['SimpleProxy', 'CachedPropertyProxy', 'LocalsSimpleProxy', 'LocalsCachedPropertyProxy'])
def impl(request):
    return globals()[request.param]


def test_proto(benchmark, impl):
    obj = 'foobar'
    proxied = impl(lambda: obj)
    result = benchmark(partial(str, proxied))
    assert result == obj