Я пытаюсь использовать гипотезу для создания текстовой стратегии со сложным форматом. Я не знаю, как построить такую структуру данных.
Я попытался построить различные элементы как композиты, чтобы затем использовать их как стратегии для других композитов. Однако аргумент 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