Last active
July 27, 2018 15:28
-
-
Save rbdixon/24f7713fbc5f3d882bdc695cc18f8f86 to your computer and use it in GitHub Desktop.
Attempt to noodle out how to generate mutated dict subsets.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ''' | |
| The goal I have is to generate test dictionaries from an example. | |
| The test dictionaries should vary in terms of which keys are present. | |
| The values should be chosen from one of the provided options. | |
| For example the dict: | |
| { | |
| 'A': one of 'A1' or 'A2', | |
| 'B': one of 'B1' or 'B2' | |
| } | |
| Goal: Produce all possible dictionaries without duplication. | |
| Should produce 9 variations. One of them is an empty dict. | |
| The problem is that hypothesis "blows up" the number of generated | |
| dicts. If there are just two alternatives for each key some of the | |
| approaches below work. None of them work once there are three | |
| alternatives for any one of the keys. | |
| Run as : pytest -s -v | |
| ''' | |
| import pytest | |
| import hypothesis.strategies as st | |
| from frozendict import frozendict | |
| from hypothesis import given | |
| from collections import ChainMap | |
| NUM = 'num' | |
| SEEN = 'seen' | |
| DICT = {'A': st.sampled_from(['A1', 'A2']), 'B': st.sampled_from(['B1', 'B2'])} | |
| KEYS = list(DICT) | |
| @pytest.fixture | |
| def count(): | |
| 'Provide a dict to keep track of the number of test iterations and the set of generated values.' | |
| res = {NUM: 0, SEEN: set()} | |
| yield res | |
| def update_count(count, d): | |
| 'Update the count and generated values set.' | |
| count[NUM] += 1 | |
| dhash = hash(frozendict(d)) | |
| dupe = '' | |
| if dhash in count[SEEN]: | |
| dupe = 'DUPE' | |
| count[SEEN].add(dhash) | |
| total = len(count[SEEN]) | |
| print(f'\nd = {d}, total = {total} {dupe}') | |
| print(f'COUNT = {count[NUM]}') | |
| @given(st.fixed_dictionaries(DICT)) | |
| def test_how_many(count, d): | |
| 'Runs 5 times, one duplicate' | |
| update_count(count, d) | |
| @given(data=st.data()) | |
| def test_how_many_drawn(count, data): | |
| 'Runs four times, no duplicaets' | |
| d = data.draw(st.fixed_dictionaries(DICT)) | |
| update_count(count, d) | |
| @given(data=st.data()) | |
| def test_how_many_drawn_subsets(count, data): | |
| 'Runs 100 times, many duplicates' | |
| keys = data.draw(st.sets(st.sampled_from(KEYS))) | |
| st_dict = {k: DICT[k] for k in keys} | |
| d = data.draw(st.fixed_dictionaries(st_dict)) | |
| update_count(count, d) | |
| @given(data=st.data()) | |
| def test_how_many_drawn_subsets_2(count, data): | |
| 'Runs 100 times, many duplicates' | |
| base = data.draw(st.fixed_dictionaries(DICT)) | |
| keys = data.draw(st.sets(st.sampled_from(KEYS))) | |
| d = {k: base[k] for k in keys} | |
| update_count(count, d) | |
| @st.composite | |
| def varied_dict(draw): | |
| keys = draw(st.sets(st.sampled_from(KEYS))) | |
| st_dict = {k: DICT[k] for k in keys} | |
| return draw(st.fixed_dictionaries(st_dict)) | |
| @given(d=varied_dict()) | |
| def test_composite(count, d): | |
| 'Runs 100 times, many duplicates' | |
| update_count(count, d) | |
| @given(data=st.data()) | |
| def test_fixed_dictionaries(count, data): | |
| 'Does not generated {} or dicts with less than the full set of keys.' | |
| ds = [ | |
| data.draw(st.fixed_dictionaries({k: data.draw(st.just(DICT[k]))})) for k in KEYS | |
| ] | |
| d = dict(ChainMap(*ds)) | |
| update_count(count, d) | |
| @st.composite | |
| def varied_dict_permutation(draw): | |
| keys = draw(st.permutations(KEYS)) | |
| st_dict = {k: DICT[k] for k in keys} | |
| return draw(st.fixed_dictionaries(st_dict)) | |
| @given(data=st.data()) | |
| def test_permutations(count, data): | |
| 'Does not generated {}, duplicates' | |
| d = data.draw(varied_dict_permutation()) | |
| update_count(count, d) | |
| @st.composite | |
| def varied_dict_subsets(draw, st_dict): | |
| keys = [k for k in sorted(st_dict.keys()) if draw(st.booleans())] | |
| draw_dict = {k: st_dict[k] for k in keys} | |
| strategy = st.fixed_dictionaries(draw_dict) | |
| return draw(strategy) | |
| @given(data=st.data()) | |
| def test_varied_dict_subsets(count, data): | |
| 'Gets pretty close with only one dupe. Add a third value choice and it blows up, too.' | |
| d = data.draw(varied_dict_subsets(DICT)) | |
| update_count(count, d) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ============================= test session starts ============================== | |
| platform darwin -- Python 3.6.5, pytest-3.6.3, py-1.5.4, pluggy-0.6.0 -- /Users/rbdixon/src/restrike-project/pytest-hypothesis/.direnv/python-3.6.5/bin/python3.6 | |
| cachedir: .pytest_cache | |
| rootdir: /Users/rbdixon/src/restrike-project/pytest-hypothesis, inifile: | |
| plugins: hypothesis-3.66.8 | |
| collecting ... collected 8 items | |
| test_how_many_runs.py::test_how_many | |
| d = {'A': 'A1', 'B': 'B1'}, total = 1 | |
| COUNT = 1 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 1 DUPE | |
| COUNT = 2 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 2 | |
| COUNT = 3 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 3 | |
| COUNT = 4 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 4 | |
| COUNT = 5 | |
| PASSED | |
| test_how_many_runs.py::test_how_many_drawn | |
| d = {'A': 'A1', 'B': 'B1'}, total = 1 | |
| COUNT = 1 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 2 | |
| COUNT = 2 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 3 | |
| COUNT = 3 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 4 | |
| COUNT = 4 | |
| PASSED | |
| test_how_many_runs.py::test_how_many_drawn_subsets | |
| d = {}, total = 1 | |
| COUNT = 1 | |
| d = {}, total = 1 DUPE | |
| COUNT = 2 | |
| d = {'A': 'A1'}, total = 2 | |
| COUNT = 3 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 3 | |
| COUNT = 4 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 4 | |
| COUNT = 5 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 5 | |
| COUNT = 6 | |
| d = {'A': 'A1'}, total = 5 DUPE | |
| COUNT = 7 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 5 DUPE | |
| COUNT = 8 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 6 | |
| COUNT = 9 | |
| d = {'A': 'A2'}, total = 7 | |
| COUNT = 10 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 7 DUPE | |
| COUNT = 11 | |
| d = {}, total = 7 DUPE | |
| COUNT = 12 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 7 DUPE | |
| COUNT = 13 | |
| d = {}, total = 7 DUPE | |
| COUNT = 14 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 7 DUPE | |
| COUNT = 15 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 7 DUPE | |
| COUNT = 16 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 7 DUPE | |
| COUNT = 17 | |
| d = {'A': 'A2'}, total = 7 DUPE | |
| COUNT = 18 | |
| d = {}, total = 7 DUPE | |
| COUNT = 19 | |
| d = {'A': 'A2'}, total = 7 DUPE | |
| COUNT = 20 | |
| d = {}, total = 7 DUPE | |
| COUNT = 21 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 7 DUPE | |
| COUNT = 22 | |
| d = {'B': 'B2'}, total = 8 | |
| COUNT = 23 | |
| d = {'A': 'A2'}, total = 8 DUPE | |
| COUNT = 24 | |
| d = {}, total = 8 DUPE | |
| COUNT = 25 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 26 | |
| d = {'A': 'A2'}, total = 8 DUPE | |
| COUNT = 27 | |
| d = {'A': 'A2'}, total = 8 DUPE | |
| COUNT = 28 | |
| d = {'B': 'B2'}, total = 8 DUPE | |
| COUNT = 29 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 30 | |
| d = {}, total = 8 DUPE | |
| COUNT = 31 | |
| d = {}, total = 8 DUPE | |
| COUNT = 32 | |
| d = {}, total = 8 DUPE | |
| COUNT = 33 | |
| d = {'A': 'A1'}, total = 8 DUPE | |
| COUNT = 34 | |
| d = {}, total = 8 DUPE | |
| COUNT = 35 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 36 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 37 | |
| d = {'A': 'A2'}, total = 8 DUPE | |
| COUNT = 38 | |
| d = {'B': 'B1'}, total = 9 | |
| COUNT = 39 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 40 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 41 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 42 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 43 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 44 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 45 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 46 | |
| d = {}, total = 9 DUPE | |
| COUNT = 47 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 48 | |
| d = {}, total = 9 DUPE | |
| COUNT = 49 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 50 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 51 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 52 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 53 | |
| d = {}, total = 9 DUPE | |
| COUNT = 54 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 55 | |
| d = {}, total = 9 DUPE | |
| COUNT = 56 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 57 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 58 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 59 | |
| d = {}, total = 9 DUPE | |
| COUNT = 60 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 61 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 62 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 63 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 64 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 65 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 66 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 67 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 68 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 69 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 70 | |
| d = {}, total = 9 DUPE | |
| COUNT = 71 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 72 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 73 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 74 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 75 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 76 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 77 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 78 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 79 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 80 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 81 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 82 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 83 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 84 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 85 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 86 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 87 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 88 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 89 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 90 | |
| d = {}, total = 9 DUPE | |
| COUNT = 91 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 92 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 93 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 94 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 95 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 96 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 97 | |
| d = {}, total = 9 DUPE | |
| COUNT = 98 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 99 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 100 | |
| PASSED | |
| test_how_many_runs.py::test_how_many_drawn_subsets_2 | |
| d = {}, total = 1 | |
| COUNT = 1 | |
| d = {'A': 'A1'}, total = 2 | |
| COUNT = 2 | |
| d = {}, total = 2 DUPE | |
| COUNT = 3 | |
| d = {}, total = 2 DUPE | |
| COUNT = 4 | |
| d = {}, total = 2 DUPE | |
| COUNT = 5 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 3 | |
| COUNT = 6 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 3 DUPE | |
| COUNT = 7 | |
| d = {'B': 'B1'}, total = 4 | |
| COUNT = 8 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 5 | |
| COUNT = 9 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 6 | |
| COUNT = 10 | |
| d = {}, total = 6 DUPE | |
| COUNT = 11 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 7 | |
| COUNT = 12 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 7 DUPE | |
| COUNT = 13 | |
| d = {'A': 'A2'}, total = 8 | |
| COUNT = 14 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 15 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 16 | |
| d = {'B': 'B1'}, total = 8 DUPE | |
| COUNT = 17 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 18 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 19 | |
| d = {'A': 'A2'}, total = 8 DUPE | |
| COUNT = 20 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 21 | |
| d = {'A': 'A2'}, total = 8 DUPE | |
| COUNT = 22 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 23 | |
| d = {'B': 'B1'}, total = 8 DUPE | |
| COUNT = 24 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 25 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 26 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 27 | |
| d = {'A': 'A2'}, total = 8 DUPE | |
| COUNT = 28 | |
| d = {}, total = 8 DUPE | |
| COUNT = 29 | |
| d = {'A': 'A1'}, total = 8 DUPE | |
| COUNT = 30 | |
| d = {'B': 'B2'}, total = 9 | |
| COUNT = 31 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 32 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 33 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 34 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 35 | |
| d = {}, total = 9 DUPE | |
| COUNT = 36 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 37 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 38 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 39 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 40 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 41 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 42 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 43 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 44 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 45 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 46 | |
| d = {}, total = 9 DUPE | |
| COUNT = 47 | |
| d = {}, total = 9 DUPE | |
| COUNT = 48 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 49 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 50 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 51 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 52 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 53 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 54 | |
| d = {}, total = 9 DUPE | |
| COUNT = 55 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 56 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 57 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 58 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 59 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 60 | |
| d = {}, total = 9 DUPE | |
| COUNT = 61 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 62 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 63 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 64 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 65 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 66 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 67 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 68 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 69 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 70 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 71 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 72 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 73 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 74 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 75 | |
| d = {}, total = 9 DUPE | |
| COUNT = 76 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 77 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 78 | |
| d = {}, total = 9 DUPE | |
| COUNT = 79 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 80 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 81 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 82 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 83 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 84 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 85 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 86 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 87 | |
| d = {}, total = 9 DUPE | |
| COUNT = 88 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 89 | |
| d = {}, total = 9 DUPE | |
| COUNT = 90 | |
| d = {}, total = 9 DUPE | |
| COUNT = 91 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 92 | |
| d = {}, total = 9 DUPE | |
| COUNT = 93 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 94 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 95 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 96 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 97 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 98 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 99 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 100 | |
| PASSED | |
| test_how_many_runs.py::test_composite | |
| d = {}, total = 1 | |
| COUNT = 1 | |
| d = {}, total = 1 DUPE | |
| COUNT = 2 | |
| d = {'B': 'B1'}, total = 2 | |
| COUNT = 3 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 3 | |
| COUNT = 4 | |
| d = {}, total = 3 DUPE | |
| COUNT = 5 | |
| d = {'A': 'A2'}, total = 4 | |
| COUNT = 6 | |
| d = {}, total = 4 DUPE | |
| COUNT = 7 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 5 | |
| COUNT = 8 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 5 DUPE | |
| COUNT = 9 | |
| d = {'A': 'A2'}, total = 5 DUPE | |
| COUNT = 10 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 6 | |
| COUNT = 11 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 7 | |
| COUNT = 12 | |
| d = {'A': 'A1'}, total = 8 | |
| COUNT = 13 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 14 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 15 | |
| d = {'B': 'B1'}, total = 8 DUPE | |
| COUNT = 16 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 17 | |
| d = {'B': 'B1'}, total = 8 DUPE | |
| COUNT = 18 | |
| d = {}, total = 8 DUPE | |
| COUNT = 19 | |
| d = {'B': 'B1'}, total = 8 DUPE | |
| COUNT = 20 | |
| d = {'A': 'A1'}, total = 8 DUPE | |
| COUNT = 21 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 22 | |
| d = {'A': 'A1'}, total = 8 DUPE | |
| COUNT = 23 | |
| d = {'B': 'B1'}, total = 8 DUPE | |
| COUNT = 24 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 25 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 26 | |
| d = {'A': 'A2'}, total = 8 DUPE | |
| COUNT = 27 | |
| d = {}, total = 8 DUPE | |
| COUNT = 28 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 29 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 30 | |
| d = {}, total = 8 DUPE | |
| COUNT = 31 | |
| d = {'B': 'B1'}, total = 8 DUPE | |
| COUNT = 32 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 33 | |
| d = {'B': 'B1'}, total = 8 DUPE | |
| COUNT = 34 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 35 | |
| d = {'A': 'A1'}, total = 8 DUPE | |
| COUNT = 36 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 37 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 38 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 39 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 8 DUPE | |
| COUNT = 40 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 DUPE | |
| COUNT = 41 | |
| d = {'B': 'B2'}, total = 9 | |
| COUNT = 42 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 43 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 44 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 45 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 46 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 47 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 48 | |
| d = {}, total = 9 DUPE | |
| COUNT = 49 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 50 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 51 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 52 | |
| d = {}, total = 9 DUPE | |
| COUNT = 53 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 54 | |
| d = {}, total = 9 DUPE | |
| COUNT = 55 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 56 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 57 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 58 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 59 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 60 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 61 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 62 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 63 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 64 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 65 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 66 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 67 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 68 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 69 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 70 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 71 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 72 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 73 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 74 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 75 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 76 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 77 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 78 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 79 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 80 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 81 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 82 | |
| d = {}, total = 9 DUPE | |
| COUNT = 83 | |
| d = {}, total = 9 DUPE | |
| COUNT = 84 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 85 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 86 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 87 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 88 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 89 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 9 DUPE | |
| COUNT = 90 | |
| d = {'A': 'A1'}, total = 9 DUPE | |
| COUNT = 91 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 92 | |
| d = {}, total = 9 DUPE | |
| COUNT = 93 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 9 DUPE | |
| COUNT = 94 | |
| d = {}, total = 9 DUPE | |
| COUNT = 95 | |
| d = {}, total = 9 DUPE | |
| COUNT = 96 | |
| d = {'B': 'B1'}, total = 9 DUPE | |
| COUNT = 97 | |
| d = {'A': 'A2'}, total = 9 DUPE | |
| COUNT = 98 | |
| d = {}, total = 9 DUPE | |
| COUNT = 99 | |
| d = {'B': 'B2'}, total = 9 DUPE | |
| COUNT = 100 | |
| PASSED | |
| test_how_many_runs.py::test_fixed_dictionaries | |
| d = {'A': 'A1', 'B': 'B1'}, total = 1 | |
| COUNT = 1 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 2 | |
| COUNT = 2 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 2 DUPE | |
| COUNT = 3 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 3 | |
| COUNT = 4 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 4 | |
| COUNT = 5 | |
| PASSED | |
| test_how_many_runs.py::test_permutations | |
| d = {'A': 'A1', 'B': 'B1'}, total = 1 | |
| COUNT = 1 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 2 | |
| COUNT = 2 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 3 | |
| COUNT = 3 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 4 | |
| COUNT = 4 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 4 DUPE | |
| COUNT = 5 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 4 DUPE | |
| COUNT = 6 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 4 DUPE | |
| COUNT = 7 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 4 DUPE | |
| COUNT = 8 | |
| PASSED | |
| test_how_many_runs.py::test_varied_dict_subsets | |
| d = {}, total = 1 | |
| COUNT = 1 | |
| d = {'B': 'B1'}, total = 2 | |
| COUNT = 2 | |
| d = {'B': 'B1'}, total = 2 DUPE | |
| COUNT = 3 | |
| d = {'A': 'A1'}, total = 3 | |
| COUNT = 4 | |
| d = {'B': 'B2'}, total = 4 | |
| COUNT = 5 | |
| d = {'A': 'A1', 'B': 'B1'}, total = 5 | |
| COUNT = 6 | |
| d = {'A': 'A2'}, total = 6 | |
| COUNT = 7 | |
| d = {'A': 'A2', 'B': 'B1'}, total = 7 | |
| COUNT = 8 | |
| d = {'A': 'A1', 'B': 'B2'}, total = 8 | |
| COUNT = 9 | |
| d = {'A': 'A2', 'B': 'B2'}, total = 9 | |
| COUNT = 10 | |
| PASSED | |
| =========================== 8 passed in 1.98 seconds =========================== |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment