Skip to content

Commit a510f46

Browse files
committed
Add benchmark
1 parent d589754 commit a510f46

File tree

4 files changed

+45
-39
lines changed

4 files changed

+45
-39
lines changed

dev-requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pytest
2+
pytest-benchmark
23
coverage
34
cython
45
tox

tests/test_decode.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,52 +10,52 @@
1010
)
1111

1212

13-
def test_decode_str():
14-
assert bdecode(b'6:WWWWWW') == b"WWWWWW"
13+
def test_decode_str(benchmark):
14+
assert benchmark(bdecode, b'6:WWWWWW') == b"WWWWWW"
1515

1616

17-
def test_decode_int():
18-
assert bdecode(b'i233e') == 233
17+
def test_decode_int(benchmark):
18+
assert benchmark(bdecode, b'i233e') == 233
1919

2020

21-
def test_decode_large_int():
21+
def test_decode_large_int(benchmark):
2222
assert bdecode(b'i1455189890e') == 1455189890
2323
assert bdecode(b'i25735241490e') == 25735241490
24-
assert bdecode(('i%de' % sys.maxsize).encode()) == sys.maxsize
24+
assert benchmark(bdecode, ('i%de' % sys.maxsize).encode()) == sys.maxsize
2525

2626

27-
def test_decode_list():
28-
assert bdecode(b'l1:a1:bi3ee') == [b'a', b'b', 3]
27+
def test_decode_list(benchmark):
28+
assert benchmark(bdecode, b'l1:a1:bi3ee') == [b'a', b'b', 3]
2929

3030

31-
def test_decode_dict():
31+
def test_decode_dict(benchmark):
3232
od = dict()
3333
od[b'ka'] = b'va'
3434
od[b'kb'] = 2
35-
assert bdecode(b'd2:ka2:va2:kbi2ee') == od
35+
assert benchmark(bdecode, b'd2:ka2:va2:kbi2ee') == od
3636

3737

38-
def test_ordered_dict():
38+
def test_ordered_dict(benchmark):
3939
from bencoder import OrderedDict
40-
rv = bdecode(b'd2:ka2:va2:kbi2ee')
40+
rv = benchmark(bdecode, b'd2:ka2:va2:kbi2ee')
4141
assert isinstance(rv, OrderedDict)
4242
assert list(rv.keys()) == [b'ka', b'kb']
4343
assert list(bdecode(b'd2:kc2:va2:kei2ee').keys()) == [b'kc', b'ke']
4444
assert list(bdecode(b'd2:ke2:va2:kci2ee').keys()) == [b'ke', b'kc']
4545

4646

47-
def test_encode_complex():
47+
def test_encode_complex(benchmark):
4848
od = dict()
4949
od[b'KeyA'] = [b'listitemA', {b'k': b'v'}, 3]
5050
od[b'KeyB'] = {b'k': b'v'}
5151
od[b'KeyC'] = 3
5252
od[b'KeyD'] = b'AString'
5353
expected_result = b'd4:KeyAl9:listitemAd1:k1:vei3ee4:KeyBd1:k1:ve4:KeyCi3e4:KeyD7:AStringe'
54-
assert bdecode(expected_result) == od
54+
assert benchmark(bdecode, expected_result) == od
5555

5656

57-
def test_decode_debian_torrent():
57+
def test_decode_debian_torrent(benchmark):
5858
with open(TORRENT_PATH, "rb") as f:
59-
torrent = bdecode(f.read())
59+
torrent = benchmark(bdecode, f.read())
6060
assert torrent[b'announce'] == b'http://bttracker.debian.org:6969/announce'
6161
assert torrent[b'comment'] == b'"Debian CD from cdimage.debian.org"'

tests/test_encode.py

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,70 +10,73 @@
1010
)
1111

1212

13-
def test_encode_str():
14-
assert bencode("WWWWWW") == b'6:WWWWWW'
13+
def test_encode_str(benchmark):
14+
assert benchmark(bencode, "WWWWWW") == b'6:WWWWWW'
1515

1616

17-
def test_encode_int():
18-
assert bencode(233) == b'i233e'
17+
def test_encode_int(benchmark):
18+
assert benchmark(bencode, 233) == b'i233e'
1919

2020

21-
def test_encode_large_int():
21+
def test_encode_large_int(benchmark):
2222
assert bencode(1455189890) == b'i1455189890e'
2323
assert bencode(25735241490) == b'i25735241490e'
24-
assert bencode(sys.maxsize) == ('i%de' % sys.maxsize).encode()
24+
assert benchmark(bencode, sys.maxsize) == ('i%de' % sys.maxsize).encode()
2525

2626

27-
def test_encode_bytes():
27+
def test_encode_bytes(benchmark):
2828
b = b"TheseAreSomeBytes"
29-
coded = bencode(b)
29+
coded = benchmark(bencode, b)
3030
l = str(len(b)).encode()
3131
assert coded == l + b':' + b
3232

3333

34-
def test_encode_list():
35-
assert bencode(['a', 'b', 3]) == b'l1:a1:bi3ee'
34+
def test_encode_list(benchmark):
35+
assert benchmark(bencode, ['a', 'b', 3]) == b'l1:a1:bi3ee'
3636

3737

38-
def test_encode_tuple():
39-
assert bencode(('a', 'b', 3)) == b'l1:a1:bi3ee'
38+
def test_encode_tuple(benchmark):
39+
assert benchmark(bencode, ('a', 'b', 3)) == b'l1:a1:bi3ee'
4040

4141

42-
def test_encode_bool():
43-
assert bencode(True) == bencode(1)
44-
assert bencode(False) == bencode(0)
42+
def test_encode_true(benchmark):
43+
assert benchmark(bencode, True) == bencode(1)
4544

4645

47-
def test_encode_dict():
46+
def test_encode_false(benchmark):
47+
assert benchmark(bencode, False) == bencode(0)
48+
49+
50+
def test_encode_dict(benchmark):
4851
od = dict()
4952
od['ka'] = 'va'
5053
od['kb'] = 2
51-
assert bencode(od) == b'd2:ka2:va2:kbi2ee'
54+
assert benchmark(bencode, od) == b'd2:ka2:va2:kbi2ee'
5255

5356

54-
def test_encode_dict_subclass():
57+
def test_encode_dict_subclass(benchmark):
5558
class AAA(dict):
5659
pass
5760

5861
od = dict()
5962
od['ka'] = 'va'
6063
od['kb'] = 2
61-
assert bencode(od) == b'd2:ka2:va2:kbi2ee'
64+
assert benchmark(bencode, od) == b'd2:ka2:va2:kbi2ee'
6265

6366

64-
def test_encode_complex():
67+
def test_encode_complex(benchmark):
6568
od = dict()
6669
od['KeyA'] = ['listitemA', {'k': 'v'}, 3]
6770
od['KeyB'] = {'k': 'v'}
6871
od['KeyC'] = 3
6972
od['KeyD'] = 'AString'
7073
expected_result = b'd4:KeyAl9:listitemAd1:k1:vei3ee4:KeyBd1:k1:ve4:KeyCi3e4:KeyD7:AStringe'
71-
assert bencode(od) == expected_result
74+
assert benchmark(bencode, od) == expected_result
7275

7376

74-
def test_infohash():
77+
def test_infohash(benchmark):
7578
import hashlib
7679
with open(TORRENT_PATH, "rb") as f:
7780
torrent = bdecode(f.read())
78-
infohash = hashlib.sha1(bencode(torrent[b'info'])).hexdigest()
81+
infohash = hashlib.sha1(benchmark(bencode, torrent[b'info'])).hexdigest()
7982
assert infohash == "4194e473d6c49630e1c6247d6716076809bb96ae"

tox.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ deps =
1111
cython
1212
pytest
1313
coverage
14+
pytest-benchmark
1415
codecov
1516

1617
[testenv:pypy]
1718
skip_install = False
1819
deps =
1920
cython
2021
pytest
22+
pytest-benchmark
2123
commands = py.test

0 commit comments

Comments
 (0)