0

我正在尝试使用假设来生成具有复杂格式的文本策略。我不确定如何建立这种数据结构。

我尝试将各种元素构建为复合材料,然后将它们用作其他复合材料的策略。然而,列表策略中的元素参数需要一个 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
4

1 回答 1

1

装饰器为您提供了一个返回策略的@st.composite函数 - 您只需要调用它们就可以了。

于 2019-10-25T14:31:21.863 回答