test_data_structures_fuzzing.py
121 lines
| 2.9 KiB
| text/x-python
|
PythonLexer
Gregory Szorc
|
r31796 | import io | ||
import os | ||||
Gregory Szorc
|
r37513 | import sys | ||
import unittest | ||||
Gregory Szorc
|
r31796 | |||
try: | ||||
import hypothesis | ||||
import hypothesis.strategies as strategies | ||||
except ImportError: | ||||
Gregory Szorc
|
r44446 | raise unittest.SkipTest("hypothesis not available") | ||
Gregory Szorc
|
r31796 | |||
Gregory Szorc
|
r37513 | import zstandard as zstd | ||
Gregory Szorc
|
r31796 | |||
from .common import ( | ||||
make_cffi, | ||||
Gregory Szorc
|
r44446 | TestCase, | ||
) | ||||
s_windowlog = strategies.integers( | ||||
min_value=zstd.WINDOWLOG_MIN, max_value=zstd.WINDOWLOG_MAX | ||||
) | ||||
s_chainlog = strategies.integers( | ||||
min_value=zstd.CHAINLOG_MIN, max_value=zstd.CHAINLOG_MAX | ||||
) | ||||
Gregory Szorc
|
r44605 | s_hashlog = strategies.integers( | ||
min_value=zstd.HASHLOG_MIN, max_value=zstd.HASHLOG_MAX | ||||
) | ||||
Gregory Szorc
|
r44446 | s_searchlog = strategies.integers( | ||
min_value=zstd.SEARCHLOG_MIN, max_value=zstd.SEARCHLOG_MAX | ||||
) | ||||
s_minmatch = strategies.integers( | ||||
min_value=zstd.MINMATCH_MIN, max_value=zstd.MINMATCH_MAX | ||||
) | ||||
s_targetlength = strategies.integers( | ||||
min_value=zstd.TARGETLENGTH_MIN, max_value=zstd.TARGETLENGTH_MAX | ||||
) | ||||
s_strategy = strategies.sampled_from( | ||||
( | ||||
zstd.STRATEGY_FAST, | ||||
zstd.STRATEGY_DFAST, | ||||
zstd.STRATEGY_GREEDY, | ||||
zstd.STRATEGY_LAZY, | ||||
zstd.STRATEGY_LAZY2, | ||||
zstd.STRATEGY_BTLAZY2, | ||||
zstd.STRATEGY_BTOPT, | ||||
zstd.STRATEGY_BTULTRA, | ||||
zstd.STRATEGY_BTULTRA2, | ||||
) | ||||
Gregory Szorc
|
r31796 | ) | ||
Gregory Szorc
|
r44446 | @make_cffi | ||
@unittest.skipUnless("ZSTD_SLOW_TESTS" in os.environ, "ZSTD_SLOW_TESTS not set") | ||||
class TestCompressionParametersHypothesis(TestCase): | ||||
@hypothesis.given( | ||||
s_windowlog, | ||||
s_chainlog, | ||||
s_hashlog, | ||||
s_searchlog, | ||||
s_minmatch, | ||||
s_targetlength, | ||||
s_strategy, | ||||
) | ||||
def test_valid_init( | ||||
Gregory Szorc
|
r44605 | self, | ||
windowlog, | ||||
chainlog, | ||||
hashlog, | ||||
searchlog, | ||||
minmatch, | ||||
targetlength, | ||||
strategy, | ||||
Gregory Szorc
|
r44446 | ): | ||
zstd.ZstdCompressionParameters( | ||||
window_log=windowlog, | ||||
chain_log=chainlog, | ||||
hash_log=hashlog, | ||||
search_log=searchlog, | ||||
min_match=minmatch, | ||||
target_length=targetlength, | ||||
strategy=strategy, | ||||
) | ||||
Gregory Szorc
|
r31796 | |||
Gregory Szorc
|
r44446 | @hypothesis.given( | ||
s_windowlog, | ||||
s_chainlog, | ||||
s_hashlog, | ||||
s_searchlog, | ||||
s_minmatch, | ||||
s_targetlength, | ||||
s_strategy, | ||||
) | ||||
def test_estimated_compression_context_size( | ||||
Gregory Szorc
|
r44605 | self, | ||
windowlog, | ||||
chainlog, | ||||
hashlog, | ||||
searchlog, | ||||
minmatch, | ||||
targetlength, | ||||
strategy, | ||||
Gregory Szorc
|
r44446 | ): | ||
if minmatch == zstd.MINMATCH_MIN and strategy in ( | ||||
zstd.STRATEGY_FAST, | ||||
zstd.STRATEGY_GREEDY, | ||||
): | ||||
Gregory Szorc
|
r42237 | minmatch += 1 | ||
elif minmatch == zstd.MINMATCH_MAX and strategy != zstd.STRATEGY_FAST: | ||||
minmatch -= 1 | ||||
Gregory Szorc
|
r31796 | |||
Gregory Szorc
|
r44446 | p = zstd.ZstdCompressionParameters( | ||
window_log=windowlog, | ||||
chain_log=chainlog, | ||||
hash_log=hashlog, | ||||
search_log=searchlog, | ||||
min_match=minmatch, | ||||
target_length=targetlength, | ||||
strategy=strategy, | ||||
) | ||||
Gregory Szorc
|
r37513 | size = p.estimated_compression_context_size() | ||