crosshair-tool 0.0.99__cp312-cp312-macosx_10_13_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- _crosshair_tracers.cpython-312-darwin.so +0 -0
- crosshair/__init__.py +42 -0
- crosshair/__main__.py +8 -0
- crosshair/_mark_stacks.h +790 -0
- crosshair/_preliminaries_test.py +18 -0
- crosshair/_tracers.h +94 -0
- crosshair/_tracers_pycompat.h +522 -0
- crosshair/_tracers_test.py +138 -0
- crosshair/abcstring.py +245 -0
- crosshair/auditwall.py +190 -0
- crosshair/auditwall_test.py +77 -0
- crosshair/codeconfig.py +113 -0
- crosshair/codeconfig_test.py +117 -0
- crosshair/condition_parser.py +1237 -0
- crosshair/condition_parser_test.py +497 -0
- crosshair/conftest.py +30 -0
- crosshair/copyext.py +155 -0
- crosshair/copyext_test.py +84 -0
- crosshair/core.py +1763 -0
- crosshair/core_and_libs.py +149 -0
- crosshair/core_regestered_types_test.py +82 -0
- crosshair/core_test.py +1316 -0
- crosshair/diff_behavior.py +314 -0
- crosshair/diff_behavior_test.py +261 -0
- crosshair/dynamic_typing.py +346 -0
- crosshair/dynamic_typing_test.py +210 -0
- crosshair/enforce.py +282 -0
- crosshair/enforce_test.py +182 -0
- crosshair/examples/PEP316/__init__.py +1 -0
- crosshair/examples/PEP316/bugs_detected/__init__.py +0 -0
- crosshair/examples/PEP316/bugs_detected/getattr_magic.py +16 -0
- crosshair/examples/PEP316/bugs_detected/hash_consistent_with_equals.py +31 -0
- crosshair/examples/PEP316/bugs_detected/shopping_cart.py +24 -0
- crosshair/examples/PEP316/bugs_detected/showcase.py +39 -0
- crosshair/examples/PEP316/correct_code/__init__.py +0 -0
- crosshair/examples/PEP316/correct_code/arith.py +60 -0
- crosshair/examples/PEP316/correct_code/chess.py +77 -0
- crosshair/examples/PEP316/correct_code/nesting_inference.py +17 -0
- crosshair/examples/PEP316/correct_code/numpy_examples.py +132 -0
- crosshair/examples/PEP316/correct_code/rolling_average.py +35 -0
- crosshair/examples/PEP316/correct_code/showcase.py +104 -0
- crosshair/examples/__init__.py +0 -0
- crosshair/examples/check_examples_test.py +146 -0
- crosshair/examples/deal/__init__.py +1 -0
- crosshair/examples/icontract/__init__.py +1 -0
- crosshair/examples/icontract/bugs_detected/__init__.py +0 -0
- crosshair/examples/icontract/bugs_detected/showcase.py +41 -0
- crosshair/examples/icontract/bugs_detected/wrong_sign.py +8 -0
- crosshair/examples/icontract/correct_code/__init__.py +0 -0
- crosshair/examples/icontract/correct_code/arith.py +51 -0
- crosshair/examples/icontract/correct_code/showcase.py +94 -0
- crosshair/fnutil.py +391 -0
- crosshair/fnutil_test.py +75 -0
- crosshair/fuzz_core_test.py +516 -0
- crosshair/libimpl/__init__.py +0 -0
- crosshair/libimpl/arraylib.py +161 -0
- crosshair/libimpl/binascii_ch_test.py +30 -0
- crosshair/libimpl/binascii_test.py +67 -0
- crosshair/libimpl/binasciilib.py +150 -0
- crosshair/libimpl/bisectlib_test.py +23 -0
- crosshair/libimpl/builtinslib.py +5228 -0
- crosshair/libimpl/builtinslib_ch_test.py +1191 -0
- crosshair/libimpl/builtinslib_test.py +3735 -0
- crosshair/libimpl/codecslib.py +86 -0
- crosshair/libimpl/codecslib_test.py +86 -0
- crosshair/libimpl/collectionslib.py +264 -0
- crosshair/libimpl/collectionslib_ch_test.py +252 -0
- crosshair/libimpl/collectionslib_test.py +332 -0
- crosshair/libimpl/copylib.py +23 -0
- crosshair/libimpl/copylib_test.py +18 -0
- crosshair/libimpl/datetimelib.py +2559 -0
- crosshair/libimpl/datetimelib_ch_test.py +354 -0
- crosshair/libimpl/datetimelib_test.py +112 -0
- crosshair/libimpl/decimallib.py +5257 -0
- crosshair/libimpl/decimallib_ch_test.py +78 -0
- crosshair/libimpl/decimallib_test.py +76 -0
- crosshair/libimpl/encodings/__init__.py +23 -0
- crosshair/libimpl/encodings/_encutil.py +187 -0
- crosshair/libimpl/encodings/ascii.py +44 -0
- crosshair/libimpl/encodings/latin_1.py +40 -0
- crosshair/libimpl/encodings/utf_8.py +93 -0
- crosshair/libimpl/encodings_ch_test.py +83 -0
- crosshair/libimpl/fractionlib.py +16 -0
- crosshair/libimpl/fractionlib_test.py +80 -0
- crosshair/libimpl/functoolslib.py +34 -0
- crosshair/libimpl/functoolslib_test.py +56 -0
- crosshair/libimpl/hashliblib.py +30 -0
- crosshair/libimpl/hashliblib_test.py +18 -0
- crosshair/libimpl/heapqlib.py +47 -0
- crosshair/libimpl/heapqlib_test.py +21 -0
- crosshair/libimpl/importliblib.py +18 -0
- crosshair/libimpl/importliblib_test.py +38 -0
- crosshair/libimpl/iolib.py +216 -0
- crosshair/libimpl/iolib_ch_test.py +128 -0
- crosshair/libimpl/iolib_test.py +19 -0
- crosshair/libimpl/ipaddresslib.py +8 -0
- crosshair/libimpl/itertoolslib.py +44 -0
- crosshair/libimpl/itertoolslib_test.py +44 -0
- crosshair/libimpl/jsonlib.py +984 -0
- crosshair/libimpl/jsonlib_ch_test.py +42 -0
- crosshair/libimpl/jsonlib_test.py +51 -0
- crosshair/libimpl/mathlib.py +179 -0
- crosshair/libimpl/mathlib_ch_test.py +44 -0
- crosshair/libimpl/mathlib_test.py +67 -0
- crosshair/libimpl/oslib.py +7 -0
- crosshair/libimpl/pathliblib_test.py +10 -0
- crosshair/libimpl/randomlib.py +178 -0
- crosshair/libimpl/randomlib_test.py +120 -0
- crosshair/libimpl/relib.py +846 -0
- crosshair/libimpl/relib_ch_test.py +169 -0
- crosshair/libimpl/relib_test.py +493 -0
- crosshair/libimpl/timelib.py +72 -0
- crosshair/libimpl/timelib_test.py +82 -0
- crosshair/libimpl/typeslib.py +15 -0
- crosshair/libimpl/typeslib_test.py +36 -0
- crosshair/libimpl/unicodedatalib.py +75 -0
- crosshair/libimpl/unicodedatalib_test.py +42 -0
- crosshair/libimpl/urlliblib.py +23 -0
- crosshair/libimpl/urlliblib_test.py +19 -0
- crosshair/libimpl/weakreflib.py +13 -0
- crosshair/libimpl/weakreflib_test.py +69 -0
- crosshair/libimpl/zliblib.py +15 -0
- crosshair/libimpl/zliblib_test.py +13 -0
- crosshair/lsp_server.py +261 -0
- crosshair/lsp_server_test.py +30 -0
- crosshair/main.py +973 -0
- crosshair/main_test.py +543 -0
- crosshair/objectproxy.py +376 -0
- crosshair/objectproxy_test.py +41 -0
- crosshair/opcode_intercept.py +601 -0
- crosshair/opcode_intercept_test.py +304 -0
- crosshair/options.py +218 -0
- crosshair/options_test.py +10 -0
- crosshair/patch_equivalence_test.py +75 -0
- crosshair/path_cover.py +209 -0
- crosshair/path_cover_test.py +138 -0
- crosshair/path_search.py +161 -0
- crosshair/path_search_test.py +52 -0
- crosshair/pathing_oracle.py +271 -0
- crosshair/pathing_oracle_test.py +21 -0
- crosshair/pure_importer.py +27 -0
- crosshair/pure_importer_test.py +16 -0
- crosshair/py.typed +0 -0
- crosshair/register_contract.py +273 -0
- crosshair/register_contract_test.py +190 -0
- crosshair/simplestructs.py +1165 -0
- crosshair/simplestructs_test.py +283 -0
- crosshair/smtlib.py +24 -0
- crosshair/smtlib_test.py +14 -0
- crosshair/statespace.py +1199 -0
- crosshair/statespace_test.py +108 -0
- crosshair/stubs_parser.py +352 -0
- crosshair/stubs_parser_test.py +43 -0
- crosshair/test_util.py +329 -0
- crosshair/test_util_test.py +26 -0
- crosshair/tools/__init__.py +0 -0
- crosshair/tools/check_help_in_doc.py +264 -0
- crosshair/tools/check_init_and_setup_coincide.py +119 -0
- crosshair/tools/generate_demo_table.py +127 -0
- crosshair/tracers.py +544 -0
- crosshair/tracers_test.py +154 -0
- crosshair/type_repo.py +151 -0
- crosshair/unicode_categories.py +589 -0
- crosshair/unicode_categories_test.py +27 -0
- crosshair/util.py +741 -0
- crosshair/util_test.py +173 -0
- crosshair/watcher.py +307 -0
- crosshair/watcher_test.py +107 -0
- crosshair/z3util.py +76 -0
- crosshair/z3util_test.py +11 -0
- crosshair_tool-0.0.99.dist-info/METADATA +144 -0
- crosshair_tool-0.0.99.dist-info/RECORD +176 -0
- crosshair_tool-0.0.99.dist-info/WHEEL +6 -0
- crosshair_tool-0.0.99.dist-info/entry_points.txt +3 -0
- crosshair_tool-0.0.99.dist-info/licenses/LICENSE +93 -0
- crosshair_tool-0.0.99.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from io import StringIO
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from crosshair.core import deep_realize
|
|
6
|
+
from crosshair.core_and_libs import standalone_statespace
|
|
7
|
+
from crosshair.libimpl.iolib import BackedStringIO
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.mark.parametrize("nl", [None, "", "\n", "\r\n", "\r"])
|
|
11
|
+
def test_StringIO_newlines(nl) -> None:
|
|
12
|
+
text = "CR\rCRNL\r\nNL\nEND"
|
|
13
|
+
concrete_input = StringIO(text, newline=nl)
|
|
14
|
+
concrete_output = concrete_input.readlines()
|
|
15
|
+
with standalone_statespace as space:
|
|
16
|
+
symbolic_input = BackedStringIO(text, newline=nl)
|
|
17
|
+
symbolic_output = deep_realize(symbolic_input.readlines())
|
|
18
|
+
print(nl, concrete_output)
|
|
19
|
+
assert symbolic_output == concrete_output
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import ipaddress
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def make_registrations():
|
|
5
|
+
# ipaddress uses a homegrown internal netmask cache.
|
|
6
|
+
# There aren't many netmasks - load all of them (to avoid nondeterminism):
|
|
7
|
+
[ipaddress.IPv6Network._make_netmask(sz) for sz in range(129)]
|
|
8
|
+
[ipaddress.IPv4Network._make_netmask(sz) for sz in range(33)]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import itertools as real_itertools
|
|
2
|
+
import operator
|
|
3
|
+
|
|
4
|
+
from crosshair import register_patch
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def identity(x):
|
|
8
|
+
return x
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _accumulate(iterable, func=operator.add, **kw):
|
|
12
|
+
return real_itertools.accumulate(iterable, lambda a, b: func(a, b), **kw)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _dropwhile(predicate, iterable):
|
|
16
|
+
return real_itertools.dropwhile(lambda x: predicate(x), iterable)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _filterfalse(predicate, iterable):
|
|
20
|
+
return real_itertools.filterfalse(lambda x: predicate(x), iterable)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _groupby(iterable, key=identity):
|
|
24
|
+
if key is identity:
|
|
25
|
+
return real_itertools.groupby(iterable)
|
|
26
|
+
else:
|
|
27
|
+
return real_itertools.groupby(iterable, lambda x: key(x))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _starmap(function, iterable):
|
|
31
|
+
return real_itertools.starmap(lambda *a: function(*a), iterable)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _takewhile(predicate, iterable):
|
|
35
|
+
return real_itertools.takewhile(lambda x: predicate(x), iterable)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def make_registrations():
|
|
39
|
+
register_patch(real_itertools.accumulate, _accumulate)
|
|
40
|
+
register_patch(real_itertools.dropwhile, _dropwhile)
|
|
41
|
+
register_patch(real_itertools.filterfalse, _filterfalse)
|
|
42
|
+
register_patch(real_itertools.groupby, _groupby)
|
|
43
|
+
register_patch(real_itertools.starmap, _starmap)
|
|
44
|
+
register_patch(real_itertools.takewhile, _takewhile)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import itertools
|
|
2
|
+
from typing import List, Tuple
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
from crosshair.core import proxy_for_type, standalone_statespace
|
|
7
|
+
from crosshair.statespace import POST_FAIL, MessageType
|
|
8
|
+
from crosshair.test_util import check_states
|
|
9
|
+
from crosshair.tracers import NoTracing
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_keyfn_is_intercepted():
|
|
13
|
+
with standalone_statespace as space:
|
|
14
|
+
with NoTracing():
|
|
15
|
+
two = proxy_for_type(int, "two")
|
|
16
|
+
space.add(two == 2)
|
|
17
|
+
ret = list((k, tuple(v)) for k, v in itertools.groupby([1, two, 3.0], type))
|
|
18
|
+
assert ret == [(int, (1, 2)), (float, (3.0,))]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@pytest.mark.demo
|
|
22
|
+
def test_accumulate():
|
|
23
|
+
def f(x: int) -> List[int]:
|
|
24
|
+
"""
|
|
25
|
+
Does any list of the form [1, x, 3] accumulate to 10?
|
|
26
|
+
|
|
27
|
+
post: __return__[-1] != 10 # (false when x == 6)
|
|
28
|
+
"""
|
|
29
|
+
return list(itertools.accumulate([1, x, 3]))
|
|
30
|
+
|
|
31
|
+
check_states(f, POST_FAIL)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@pytest.mark.demo
|
|
35
|
+
def test_product():
|
|
36
|
+
def f(n: int) -> List[Tuple[int, int]]:
|
|
37
|
+
"""
|
|
38
|
+
Can 2 rolls of an n-sided die result in 2 and 3?
|
|
39
|
+
|
|
40
|
+
post: (2, 3) not in _
|
|
41
|
+
"""
|
|
42
|
+
return list(itertools.product(range(1, n), range(1, n)))
|
|
43
|
+
|
|
44
|
+
check_states(f, POST_FAIL)
|