Как создать сложную структуру данных с гипотезой Python - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь использовать гипотезу для генерации текстовой стратегии со сложным форматом. Я не уверен, как создать такую ​​структуру данных.

Я пытался создать различные элементы в виде композитов, чтобы затем использовать их в качестве стратегий для других композитов. Однако аргумент elements в стратегии списков требует SearchStrategy вместо составного, как я надеялся. Просматривая документы, я не смог разобраться, помогут ли в этом случае сборки, отображение или плоская карта.

Моя (упрощенная) попытка приведена ниже.

@st.composite
def composite_coords(draw):
    lat = draw(st.decimals(min_value=-10, max_value=-1, allow_nan=False, places=16))
    long = draw(st.decimals(min_value=50, max_value=90, allow_nan=False, places=16))
    return [float(long), float(lat)]


@st.composite
def composite_polygon_coords(draw):
    polygon_coords = draw(st.lists(
        elements=composite_coords, min_size=3
    ))
    return polygon_coords.append(polygon_coords[0])


@st.composite
def composite_polygons(draw):
    polygons = draw(st.lists(
        elements=composite_polygon_coords, min_size=1
    ))
    polygon = {
        'type': 'Polygon',
        'coordinates': polygons
    }
    return poly.dumps(polygon)


@given(composite_polygons())
def test_valid_polygon(polygon):
    result = validate(polygon)
    assert result == polygon

1 Ответ

1 голос
/ 25 октября 2019

Декоратор @st.composite предоставляет вам функцию, которая возвращает стратегию - вам просто нужно вызвать их, и все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...