Skip to content

Commit f4a55fc

Browse files
authored
Add more benchmarks (#106)
1 parent 5339064 commit f4a55fc

File tree

12 files changed

+1059
-501
lines changed

12 files changed

+1059
-501
lines changed

tests/compression/__init__.py

Whitespace-only changes.

tests/compression/test_lz4.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from __future__ import annotations
2+
3+
import hashlib
4+
from typing import TYPE_CHECKING
5+
6+
import pytest
7+
8+
if TYPE_CHECKING:
9+
from types import ModuleType
10+
11+
from pytest_benchmark.fixture import BenchmarkFixture
12+
13+
14+
@pytest.mark.parametrize(
15+
("data", "digest"),
16+
[
17+
pytest.param(
18+
"ff0c4c5a3420636f6d7072657373696f6e207465737420737472696e671b00db507472696e67",
19+
"5ec59b1b60247178b260e145ae888c318e1fa3ee4466cf0e145de8f24c4b1501",
20+
id="basic",
21+
),
22+
pytest.param(
23+
"ffffa94c6f72656d20697073756d20646f6c6f722073697420616d657420636f"
24+
"6e73656374657475722061646970697363696e6720656c69742e205175697371"
25+
"75652066617563696275732065782073617069656e2076697461652070656c6c"
26+
"656e7465737175652073656d20706c6163657261742e20496e20696420637572"
27+
"737573206d69207072657469756d2074656c6c7573206475697320636f6e7661"
28+
"6c6c69732e2054656d707573206c656f2065752061656e65616e207365642064"
29+
"69616d2075726e612074656d706f722e2050756c76696e617220766976616d75"
30+
"73206672696e67696c6c61206c61637573206e6563206d657475732062696265"
31+
"6e64756d20656765737461732e20496163756c6973206d61737361206e69736c"
32+
"206d616c657375616461206c6163696e696120696e7465676572206e756e6320"
33+
"706f73756572652e2055742068656e6472657269742073656d7065722076656c"
34+
"20636c61737320617074656e742074616369746920736f63696f7371752e2041"
35+
"64206c69746f726120746f727175656e742070657220636f6e75626961206e6f"
36+
"7374726120696e636570746f732068696d656e61656f732e0a0ab701ffffffff"
37+
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
38+
"ffffffffffffffffffffffffffffffffff4550656f732e0a",
39+
"73d3dd96ca2e2f0144a117019256d770ee7c6febeaee09b24956c723ae22b529",
40+
id="large",
41+
),
42+
],
43+
)
44+
def test_lz4_decompress(lz4: ModuleType, data: str, digest: str) -> None:
45+
assert hashlib.sha256(lz4.decompress(bytes.fromhex(data))).hexdigest() == digest
46+
47+
48+
@pytest.mark.benchmark
49+
def test_benchmark_lz4_decompress(lz4: ModuleType, benchmark: BenchmarkFixture) -> None:
50+
buf = bytes.fromhex("ff0c4c5a3420636f6d7072657373696f6e207465737420737472696e671b00db507472696e67")
51+
assert benchmark(lz4.decompress, buf) == b"LZ4 compression test string" * 10
52+
53+
54+
@pytest.mark.benchmark
55+
def test_benchmark_large_lz4_decompress(lz4: ModuleType, benchmark: BenchmarkFixture) -> None:
56+
buf = bytes.fromhex(
57+
"ffffa94c6f72656d20697073756d20646f6c6f722073697420616d657420636f"
58+
"6e73656374657475722061646970697363696e6720656c69742e205175697371"
59+
"75652066617563696275732065782073617069656e2076697461652070656c6c"
60+
"656e7465737175652073656d20706c6163657261742e20496e20696420637572"
61+
"737573206d69207072657469756d2074656c6c7573206475697320636f6e7661"
62+
"6c6c69732e2054656d707573206c656f2065752061656e65616e207365642064"
63+
"69616d2075726e612074656d706f722e2050756c76696e617220766976616d75"
64+
"73206672696e67696c6c61206c61637573206e6563206d657475732062696265"
65+
"6e64756d20656765737461732e20496163756c6973206d61737361206e69736c"
66+
"206d616c657375616461206c6163696e696120696e7465676572206e756e6320"
67+
"706f73756572652e2055742068656e6472657269742073656d7065722076656c"
68+
"20636c61737320617074656e742074616369746920736f63696f7371752e2041"
69+
"64206c69746f726120746f727175656e742070657220636f6e75626961206e6f"
70+
"7374726120696e636570746f732068696d656e61656f732e0a0ab701ffffffff"
71+
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
72+
"ffffffffffffffffffffffffffffffffff4550656f732e0a"
73+
)
74+
assert (
75+
hashlib.sha256(benchmark(lz4.decompress, buf)).hexdigest()
76+
== "73d3dd96ca2e2f0144a117019256d770ee7c6febeaee09b24956c723ae22b529"
77+
)

tests/compression/test_lzbitmap.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
from __future__ import annotations
2+
3+
import hashlib
4+
from typing import TYPE_CHECKING
5+
6+
import pytest
7+
8+
from dissect.util.compression import lzbitmap
9+
10+
if TYPE_CHECKING:
11+
from pytest_benchmark.fixture import BenchmarkFixture
12+
13+
14+
@pytest.mark.parametrize(
15+
("data", "digest"),
16+
[
17+
pytest.param(
18+
"5a424d093100002b0000536d616c6c2066696c657320646f6e2774206765"
19+
"7420636f6d7072657373656420617420616c6c2e2e2e0a060000000000",
20+
"8c929efb5fd28b5b82385b67b408f5e775a4756d7cc6373eebddb8668343ad40",
21+
id="uncompressed",
22+
),
23+
pytest.param(
24+
"5a424d092d0000a0000018000018000018000061616161616161617835ef"
25+
"340f0000f10f00000000000000000000000000060000000000",
26+
"ef56118ff333a8bfeffc346c4987a1a178762570b3eb1d704a2c1e9b3a877561",
27+
id="small",
28+
),
29+
pytest.param(
30+
"5a424d09d80100df36002301005001007601004c6f72656d20697073756d"
31+
"20646f6c6f722073742061657420636e7365636574757220616469706973"
32+
"696e67656c69742e517573716566617563627520657820736170656e7661"
33+
"6570656c6c6e6573656d6c61637261496e20696475727573206d69707269"
34+
"74656c757364206f76616c7354656d7075206c656f7561656e6561646469"
35+
"6d206e2074656d706f72506c6e7276697675736672696c61206c636e636d"
36+
"657473626962656e64756d67657461732e496c696d6173206e6c6d616c75"
37+
"64616c696e616e746567726e6e63707365722e5574206864726572697473"
38+
"6d7072766c637373207074656e74747469736f6f73712e41646c696f7261"
39+
"6f7175657465727562696f74726370746f686d6f732e0a0a4c0d2c341b41"
40+
"3e26113c5f6e805b6b7c65529d967ec4b310edb922ca7b1deca5faf4434a"
41+
"fbfa52fb8272b2ffb7016f7fcbc1b9f1373af99e3eb4e94fa9b3bafe39d3"
42+
"6959add6f36b55eecdb59d2ec3d1d029fc0055a9cbed016111718114103f"
43+
"480147110116011040f125f3ffffffffffffffffffffffffffffffffffff"
44+
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
45+
"ffffffffffffffff1f002cf68f57d9c576d73bfd7cd3d756000006000000"
46+
"0000",
47+
"73d3dd96ca2e2f0144a117019256d770ee7c6febeaee09b24956c723ae22b529",
48+
id="large",
49+
),
50+
],
51+
)
52+
def test_lzbitmap_decompress(data: str, digest: str) -> None:
53+
assert hashlib.sha256(lzbitmap.decompress(bytes.fromhex(data))).hexdigest() == digest
54+
55+
56+
@pytest.mark.benchmark
57+
def test_benchmark_lzbitmap_decompress(benchmark: BenchmarkFixture) -> None:
58+
buf = bytes.fromhex(
59+
"5a424d092d0000a0000018000018000018000061616161616161617835ef"
60+
"340f0000f10f00000000000000000000000000060000000000",
61+
)
62+
assert benchmark(lzbitmap.decompress, buf) == b"a" * 158 + b"xa"
63+
64+
65+
@pytest.mark.benchmark
66+
def test_benchmark_large_lzbitmap_decompress(benchmark: BenchmarkFixture) -> None:
67+
buf = bytes.fromhex(
68+
"5a424d09d80100df36002301005001007601004c6f72656d20697073756d"
69+
"20646f6c6f722073742061657420636e7365636574757220616469706973"
70+
"696e67656c69742e517573716566617563627520657820736170656e7661"
71+
"6570656c6c6e6573656d6c61637261496e20696475727573206d69707269"
72+
"74656c757364206f76616c7354656d7075206c656f7561656e6561646469"
73+
"6d206e2074656d706f72506c6e7276697675736672696c61206c636e636d"
74+
"657473626962656e64756d67657461732e496c696d6173206e6c6d616c75"
75+
"64616c696e616e746567726e6e63707365722e5574206864726572697473"
76+
"6d7072766c637373207074656e74747469736f6f73712e41646c696f7261"
77+
"6f7175657465727562696f74726370746f686d6f732e0a0a4c0d2c341b41"
78+
"3e26113c5f6e805b6b7c65529d967ec4b310edb922ca7b1deca5faf4434a"
79+
"fbfa52fb8272b2ffb7016f7fcbc1b9f1373af99e3eb4e94fa9b3bafe39d3"
80+
"6959add6f36b55eecdb59d2ec3d1d029fc0055a9cbed016111718114103f"
81+
"480147110116011040f125f3ffffffffffffffffffffffffffffffffffff"
82+
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
83+
"ffffffffffffffff1f002cf68f57d9c576d73bfd7cd3d756000006000000"
84+
"0000",
85+
)
86+
assert (
87+
hashlib.sha256(benchmark(lzbitmap.decompress, buf)).hexdigest()
88+
== "73d3dd96ca2e2f0144a117019256d770ee7c6febeaee09b24956c723ae22b529"
89+
)

tests/compression/test_lzfse.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
from __future__ import annotations
2+
3+
import hashlib
4+
from typing import TYPE_CHECKING
5+
6+
import pytest
7+
8+
from dissect.util.compression import lzfse
9+
10+
if TYPE_CHECKING:
11+
from pytest_benchmark.fixture import BenchmarkFixture
12+
13+
14+
@pytest.mark.parametrize(
15+
("data", "digest"),
16+
[
17+
pytest.param(
18+
"6276786e2c01000013000000c803616263f0fff005e163060000000000000062767824",
19+
"d9f5aeb06abebb3be3f38adec9a2e3b94228d52193be923eb4e24c9b56ee0930",
20+
id="basic",
21+
),
22+
pytest.param(
23+
"62767832df360000a401200e000d0030b92c8bef56220070a50000003984"
24+
"70085f00b0000000383e59c0f1090000005fc027710c0000fc031c1f03c7"
25+
"700cc70000000000000000006c00003600000000005f07000000e7000000"
26+
"00100060418004120000e06338f9061e8067629dacdf013e836fe041f807"
27+
"be80fd14fc0e3fc29f704700000000000000000000000000000000000000"
28+
"000000000000000000000000000000000000101288d24318d9f446277ac6"
29+
"885a4b5dea360854e4c4616262d667f9f1ff53187e598fe2f5ddf7b768f4"
30+
"bcc1f6441b9e55e0d1be84b4b91544337f11c4d0d615068c79817f5d19f2"
31+
"09c83975cf9669b7f3d1024d9cc795e8ac449090696a7660585fac1a891c"
32+
"40557bb46c1b62a35ab2608d574e82ba9f3956d0f811370c78d69b24240f"
33+
"fd80ec4eccb6dc1e7f1c6f2f276a71e9c73183844c3dce83088eeed6c77c"
34+
"3e35316f414db430fcd2e22d0c07998d601addd5907f852df080386fe69e"
35+
"b78675198704b4bf5361caaf482e9333c6de0d46fbf87b4387fc6ac57116"
36+
"0300000000000000000066b7fffffff3fffa3ff7ff1fd2273e1f85c5f04f"
37+
"0f4945ab8462767824",
38+
"73d3dd96ca2e2f0144a117019256d770ee7c6febeaee09b24956c723ae22b529",
39+
id="large",
40+
),
41+
],
42+
)
43+
def test_lzfse_decompress(data: str, digest: str) -> None:
44+
assert hashlib.sha256(lzfse.decompress(bytes.fromhex(data))).hexdigest() == digest
45+
46+
47+
@pytest.mark.benchmark
48+
def test_benchmark_lzfse_decompress(benchmark: BenchmarkFixture) -> None:
49+
buf = bytes.fromhex("6276786e2c01000013000000c803616263f0fff005e163060000000000000062767824")
50+
assert benchmark(lzfse.decompress, buf) == b"abc" * 100
51+
52+
53+
@pytest.mark.benchmark
54+
def test_benchmark_large_lzfse_decompress(benchmark: BenchmarkFixture) -> None:
55+
buf = bytes.fromhex(
56+
"62767832df360000a401200e000d0030b92c8bef56220070a50000003984"
57+
"70085f00b0000000383e59c0f1090000005fc027710c0000fc031c1f03c7"
58+
"700cc70000000000000000006c00003600000000005f07000000e7000000"
59+
"00100060418004120000e06338f9061e8067629dacdf013e836fe041f807"
60+
"be80fd14fc0e3fc29f704700000000000000000000000000000000000000"
61+
"000000000000000000000000000000000000101288d24318d9f446277ac6"
62+
"885a4b5dea360854e4c4616262d667f9f1ff53187e598fe2f5ddf7b768f4"
63+
"bcc1f6441b9e55e0d1be84b4b91544337f11c4d0d615068c79817f5d19f2"
64+
"09c83975cf9669b7f3d1024d9cc795e8ac449090696a7660585fac1a891c"
65+
"40557bb46c1b62a35ab2608d574e82ba9f3956d0f811370c78d69b24240f"
66+
"fd80ec4eccb6dc1e7f1c6f2f276a71e9c73183844c3dce83088eeed6c77c"
67+
"3e35316f414db430fcd2e22d0c07998d601addd5907f852df080386fe69e"
68+
"b78675198704b4bf5361caaf482e9333c6de0d46fbf87b4387fc6ac57116"
69+
"0300000000000000000066b7fffffff3fffa3ff7ff1fd2273e1f85c5f04f"
70+
"0f4945ab8462767824"
71+
)
72+
assert (
73+
hashlib.sha256(benchmark(lzfse.decompress, buf)).hexdigest()
74+
== "73d3dd96ca2e2f0144a117019256d770ee7c6febeaee09b24956c723ae22b529"
75+
)

0 commit comments

Comments
 (0)