如何使用 python 假设创建复杂的数据结构
How to create complex data structure with python hypothesis
我正在尝试使用假设来生成具有复杂格式的文本策略。我不确定如何建立这种数据结构。
我尝试将各种元素构建为复合材料,然后将它们用作其他复合材料的策略。然而,列表策略中的元素参数需要一个 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
@st.composite
装饰器为您提供了一个函数,其中 returns 一个策略 - 您只需调用它们就可以了。
我正在尝试使用假设来生成具有复杂格式的文本策略。我不确定如何建立这种数据结构。
我尝试将各种元素构建为复合材料,然后将它们用作其他复合材料的策略。然而,列表策略中的元素参数需要一个 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
@st.composite
装饰器为您提供了一个函数,其中 returns 一个策略 - 您只需调用它们就可以了。