sg3-141-592 / dictgen

Generate random Python dictionaries for testing

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

dictgen

Generate random Python dictionaries for testing.

import dictgen
dictgen.generate()

### Outputs
{
    "": [
        280633528141071517,
        [
            -4279251701116042058
        ]
    ],
    "X": 957269515550119532
}

Control the number of keys allowed at a single level in the library using max_height.

import dictgen
dictgen.generate(max_height=2)

### Outputs
{
    "PZ70": "BD3X3",
    "M6": {}
}

dictgen.generate(max_height=5)

### Outputs
{
    "PZ70": "BD3X3",
    "M6": {},
    123 : None,
    "B1223S3S": [9243, None],
    "XLXSM35PW3": "1AHLFB06"
}

Control the maximum number of nested dictionaries and arrays using max_depth.

print( dictgen.generate(max_depth=3) )

### Outputs
{
    "POARS2": 2.6720361072638525e+18,
    "6": {
        "BZVADP": -1.646104091641211e+18,
        "V": []
    }
}

You can reproduce the same dictionary consistently using the seed parameter.

dictgen.generate(rand_seed=1)

### Outputs
{'4YNG5BY': -7.048155888731118e+18}

dictgen.generate(rand_seed=1)

### Outputs
{'4YNG5BY': -7.048155888731118e+18}

You can control the different functions that are used to generate your dictionaries.

key_generators, val_generators, nested_generators arguments

# Generate a dictionary with only strings as keys and values
dictgen.generate(key_generators=(dictgen.random_string,), val_generators=(dictgen.random_string,))

### Outputs
{'QM':
    {
        '57S': 'MBBO6XZP',
        '': '5WWU8AY'
    },
    '': [{'M0ISLL4': '8'}, 'XE0'],
    'EHEOL1I5': {}
}

# Generate a dictionary with a custom generator method
from uuid import uuid4

def generate_uuid(**kwargs):
    return uuid4()

dictgen.generate(key_generators=(generate_uuid,), val_generators=(dictgen.random_string,))

### Outputs
{UUID('2f85cf3e-b8f4-4750-ac3d-8ce84b9f7ed1'): [[]], UUID('a840fd05-daba-49ce-a695-fad8c1fd3675'): 'EeuM0N', UUID('6dab8e6d-35f1-479e-8763-b671b46a86b0'): 'aj'}

Examples

./examples/fuzz_tomlkit.py - an example of fuzz testing a popular toml encoder library

...

Test 5 -------------
test_data: {'HX': [[]], 'YiG': datetime.time(15, 55)}
result:
HX = [[]]
YiG = 15:55:00

CONTRIBUTING

Make sure all unit tests are passing

pip install -e .
python -m unittest

About

Generate random Python dictionaries for testing

License:MIT License


Languages

Language:Python 100.0%