Compare commits

...

2 Commits

Author SHA1 Message Date
Joshua Bronson 3d9aa43243 Daily CI job with --hypothesis-profile=more-examples
Enabled for Python 3.10, since coverage is enabled for 3.11,
which already slows down the tests enough.

Also, rm unused HYPOTHESIS_GEN_MAX_SIZE logic.
2022-12-26 16:25:53 -05:00
Joshua Bronson 23ae1fdecb Bump GitHub Actions Version Updater version. 2022-12-25 17:40:23 -05:00
6 changed files with 44 additions and 55 deletions

View File

@ -3,8 +3,7 @@ name: Test
"on": "on":
workflow_dispatch: workflow_dispatch:
schedule: schedule:
# Every Friday at noon - cron: "30 21 * * *"
- cron: "0 12 * * 5"
push: push:
branches: branches:
- main - main
@ -29,6 +28,7 @@ jobs:
- pyversion: "3.11" - pyversion: "3.11"
enable_coverage: true enable_coverage: true
- pyversion: "3.10" - pyversion: "3.10"
crank_up_hypothesis_if_nightly: true
- pyversion: "3.9" - pyversion: "3.9"
- pyversion: "3.8" - pyversion: "3.8"
- pyversion: "3.7" - pyversion: "3.7"
@ -42,6 +42,10 @@ jobs:
python-version: ${{ matrix.pyversion }} python-version: ${{ matrix.pyversion }}
cache: pip cache: pip
cache-dependency-path: dev-deps/test.txt cache-dependency-path: dev-deps/test.txt
- name: Set --hypothesis-profile=more-examples # See tests/conftest.py
if: ${{ github.event_name == 'schedule' && matrix.crank_up_hypothesis_if_nightly }}
run: |
echo PYTEST_ADDOPTS="${PYTEST_ADDOPTS} --hypothesis-profile=more-examples" >> "${GITHUB_ENV}"
- run: python -m pip install -U pip setuptools wheel tox==4.0.16 - run: python -m pip install -U pip setuptools wheel tox==4.0.16
- name: cache .hypothesis dir - name: cache .hypothesis dir
uses: actions/cache@c1a5de879eb890d062a85ee0252d6036480b1fe2 uses: actions/cache@c1a5de879eb890d062a85ee0252d6036480b1fe2

View File

@ -15,9 +15,7 @@ jobs:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b
with: with:
token: ${{ secrets.ACTIONS_VERSION_UPDATER_TOKEN }} token: ${{ secrets.ACTIONS_VERSION_UPDATER_TOKEN }}
# https://github.com/saadmk11/github-actions-version-updater/issues/49#issuecomment-1356182123 - uses: saadmk11/github-actions-version-updater@5d7d1286cb239c77a611861d710cfffaeea05fd2
# - uses: saadmk11/github-actions-version-updater@v0.7.1
- uses: saadmk11/github-actions-version-updater@66922a38bf9dfb2afa06dee9592da2d8a158ceec
with: with:
token: ${{ secrets.ACTIONS_VERSION_UPDATER_TOKEN }} token: ${{ secrets.ACTIONS_VERSION_UPDATER_TOKEN }}
update_version_with: release-commit-sha update_version_with: release-commit-sha

View File

@ -4,20 +4,9 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this # License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/. # file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""Set up hypothesis.""" """Set up Hypothesis."""
from datetime import timedelta
from os import getenv
from hypothesis import settings from hypothesis import settings
MAX_EXAMPLES_DEFAULT = 200 settings.register_profile('more-examples', max_examples=10_000)
DEADLINE_DEFAULT = 200
SETTINGS = {
'max_examples': int(getenv('HYPOTHESIS_MAX_EXAMPLES') or MAX_EXAMPLES_DEFAULT),
'deadline': timedelta(milliseconds=int(getenv('HYPOTHESIS_DEADLINE') or DEADLINE_DEFAULT)),
}
settings.register_profile('custom', **SETTINGS)
settings.load_profile('custom')

View File

@ -8,7 +8,6 @@
from collections import OrderedDict from collections import OrderedDict
from operator import attrgetter, itemgetter, methodcaller from operator import attrgetter, itemgetter, methodcaller
from os import getenv
import hypothesis.strategies as st import hypothesis.strategies as st
from bidict import DROP_NEW, DROP_OLD, RAISE, OnDup, OrderedBidictBase, namedbidict from bidict import DROP_NEW, DROP_OLD, RAISE, OnDup, OrderedBidictBase, namedbidict
@ -16,9 +15,6 @@ from bidict import DROP_NEW, DROP_OLD, RAISE, OnDup, OrderedBidictBase, namedbid
from . import _types as t from . import _types as t
MAX = int(getenv('HYPOTHESIS_GEN_MAX_SIZE', '0')) or None
def one_of(items): def one_of(items):
"""Create a one_of strategy using the given items.""" """Create a one_of strategy using the given items."""
return st.one_of((st.just(i) for i in items)) return st.one_of((st.just(i) for i in items))
@ -47,21 +43,21 @@ PAIRS = st.tuples(ATOMS, ATOMS)
NON_MAPPINGS = ATOMS | st.iterables(ATOMS) NON_MAPPINGS = ATOMS | st.iterables(ATOMS)
ALPHABET = tuple(chr(i) for i in range(0x10ffff) if chr(i).isidentifier()) ALPHABET = tuple(chr(i) for i in range(0x10ffff) if chr(i).isidentifier())
VALID_NAMES = st.text(ALPHABET, min_size=1, max_size=16) VALID_NAMES = st.text(ALPHABET, min_size=1, max_size=16)
DICTS_KW_PAIRS = st.dictionaries(VALID_NAMES, ATOMS, max_size=MAX) DICTS_KW_PAIRS = st.dictionaries(VALID_NAMES, ATOMS)
L_PAIRS = st.lists(PAIRS, max_size=MAX) L_PAIRS = st.lists(PAIRS)
I_PAIRS = st.iterables(PAIRS, max_size=MAX) I_PAIRS = st.iterables(PAIRS)
FST_SND = (itemgetter(0), itemgetter(1)) FST_SND = (itemgetter(0), itemgetter(1))
L_PAIRS_NODUP = st.lists(PAIRS, unique_by=FST_SND, max_size=MAX) L_PAIRS_NODUP = st.lists(PAIRS, unique_by=FST_SND)
I_PAIRS_NODUP = st.iterables(PAIRS, unique_by=FST_SND, max_size=MAX) I_PAIRS_NODUP = st.iterables(PAIRS, unique_by=FST_SND)
# Reserve a disjoint set of atoms as a source of values guaranteed not to have been # Reserve a disjoint set of atoms as a source of values guaranteed not to have been
# inserted into a test bidict already. # inserted into a test bidict already.
DIFF_ATOMS = st.characters() DIFF_ATOMS = st.characters()
DIFF_PAIRS = st.tuples(DIFF_ATOMS, DIFF_ATOMS) DIFF_PAIRS = st.tuples(DIFF_ATOMS, DIFF_ATOMS)
L_DIFF_PAIRS_NODUP = st.lists(DIFF_PAIRS, unique_by=FST_SND, min_size=1, max_size=MAX) L_DIFF_PAIRS_NODUP = st.lists(DIFF_PAIRS, unique_by=FST_SND, min_size=1)
DIFF_ITEMS = st.tuples(L_PAIRS_NODUP, L_DIFF_PAIRS_NODUP) DIFF_ITEMS = st.tuples(L_PAIRS_NODUP, L_DIFF_PAIRS_NODUP)
RANDOMS = st.randoms(use_true_random=False) RANDOMS = st.randoms(use_true_random=False)
SAME_ITEMS_DIFF_ORDER = st.tuples( SAME_ITEMS_DIFF_ORDER = st.tuples(
st.lists(PAIRS, unique_by=FST_SND, min_size=2, max_size=MAX), RANDOMS st.lists(PAIRS, unique_by=FST_SND, min_size=2), RANDOMS
).map( ).map(
lambda i: (i[0], i[1].sample(i[0], len(i[0]))) # (seq, shuffled seq) lambda i: (i[0], i[1].sample(i[0], len(i[0]))) # (seq, shuffled seq)
).filter(lambda i: i[0] != i[1]) ).filter(lambda i: i[0] != i[1])

View File

@ -0,0 +1,28 @@
import typing as t
from hypothesis import assume, given, settings
from hypothesis.stateful import RuleBasedStateMachine, initialize, invariant, precondition, rule
from hypothesis.strategies import integers, data, sampled_from
from ._strategies import BIDICT_TYPES, I_PAIRS_NODUP
import bidict
from bidict._typing import KT, VT
class BidictStateMachine(RuleBasedStateMachine):
@initialize(bidict_type=BIDICT_TYPES, init_items=I_PAIRS_NODUP)
def init_lfu(
self,
bidict_type: t.Type[bidict.BidirectionalMapping[KT, VT]],
init_items: t.Any,
) -> None:
self.bi = bidict_type(init_items)
@invariant()
def bijectivity(self):
for b in (self.bi, self.bi.inv):
assert all(b.inv[v] == k for (k, v) in b.items())
# @rule(item=)
# def put(self, item)

26
tox.ini
View File

@ -1,26 +0,0 @@
[tox]
envlist =
py3{11,10,9,8,7}
pypy3{9,8,7}
lint
docs
skip_missing_interpreters = true
isolated_build = true
[testenv]
deps = -r dev-deps/test.txt
passenv =
PYTEST_ADDOPTS
FORCE_COLOR
allowlist_externals = ./run_tests.py
commands = ./run_tests.py
[testenv:lint]
deps = -r dev-deps/lint.txt
skip_install = true
commands = pre-commit run --all-files --verbose --show-diff-on-failure
[testenv:docs]
deps = -r dev-deps/docs.txt
commands = sphinx-build -W --keep-going -b html -d {envtmpdir}/doctrees docs {envtmpdir}/html