def test_associativity(multisegments_triplet: MultisegmentsTriplet) -> None:
    first, second, third = multisegments_triplet

    first_second_intersection = intersect_multisegments(first, second)
    second_third_intersection = intersect_multisegments(second, third)
    assert (not is_multisegment(first_second_intersection)
            or not is_multisegment(second_third_intersection)
            or (intersect_multisegments(first_second_intersection, third)
                == intersect_multisegments(first, second_third_intersection)))
def test_difference_operand(multisegments_triplet: MultisegmentsTriplet
                            ) -> None:
    first, second, third = multisegments_triplet

    first_second_difference = subtract_multisegments(first, second)
    first_third_intersection = intersect_multisegments(first, third)
    assert (not is_multisegment(first_second_difference)
            or not is_multisegment(first_third_intersection)
            or (intersect_multisegments(first_second_difference, third)
                == subtract_multisegments(first_third_intersection, second)))
def test_intersection_minuend(
        multisegments_triplet: MultisegmentsTriplet) -> None:
    first, second, third = multisegments_triplet

    first_second_intersection = intersect_multisegments(first, second)
    second_third_difference = subtract_multisegments(second, third)
    assert (not is_multisegment(first_second_intersection)
            or not is_multisegment(second_third_difference)
            or (subtract_multisegments(first_second_intersection, third)
                == intersect_multisegments(first, second_third_difference)))
def test_equivalents(multisegments_pair: MultisegmentsPair) -> None:
    first, second = multisegments_pair

    result = unite_multisegments(first, second)

    first_second_symmetric_difference = symmetric_subtract_multisegments(
        first, second)
    first_second_intersection = intersect_multisegments(first, second)
    assert (not is_multisegment(first_second_symmetric_difference)
            or not is_multisegment(first_second_intersection)
            or result == symmetric_subtract_multisegments(
                first_second_symmetric_difference, first_second_intersection))
def test_difference_operand(
        multisegments_triplet: MultisegmentsTriplet) -> None:
    first, second, third = multisegments_triplet

    first_second_difference = subtract_multisegments(first, second)
    second_third_difference = subtract_multisegments(second, third)
    assert (not is_multisegment(first_second_difference)
            or not is_multisegment(second_third_difference)
            or are_multisegments_equivalent(
                unite_multisegments(first_second_difference, third),
                subtract_multisegments(unite_multisegments(first, third),
                                       second_third_difference)))
def test_union_subtrahend(multisegments_triplet: MultisegmentsTriplet) -> None:
    first, second, third = multisegments_triplet

    first_second_difference = subtract_multisegments(first, second)
    first_third_difference = subtract_multisegments(first, third)
    assert (not is_multisegment(first_second_difference)
            or not is_multisegment(first_third_difference)
            or are_compounds_similar(
                subtract_multisegments(first, unite_multisegments(
                    second, third)),
                intersect_multisegments(first_second_difference,
                                        first_third_difference)))
def test_distribution_over_union(multisegments_triplet: MultisegmentsTriplet
                                 ) -> None:
    first, second, third = multisegments_triplet

    first_second_intersection = intersect_multisegments(first, second)
    first_third_intersection = intersect_multisegments(first, third)
    assert (not is_multisegment(first_second_intersection)
            or not is_multisegment(first_third_intersection)
            or are_multisegments_equivalent(
                    intersect_multisegments(first, unite_multisegments(second,
                                                                       third)),
                    unite_multisegments(first_second_intersection,
                                        first_third_intersection)))
def test_intersection_subtrahend(
        multisegments_triplet: MultisegmentsTriplet) -> None:
    first, second, third = multisegments_triplet

    first_second_difference = subtract_multisegments(first, second)
    first_third_difference = subtract_multisegments(first, third)
    second_third_intersection = intersect_multisegments(second, third)
    assert (not is_multisegment(first_second_difference)
            or not is_multisegment(first_third_difference)
            or not is_multisegment(second_third_intersection)
            or are_multisegments_equivalent(
                subtract_multisegments(first, second_third_intersection),
                unite_multisegments(first_second_difference,
                                    first_third_difference)))
def test_repeated(multisegments_triplet: MultisegmentsTriplet) -> None:
    first, second, third = multisegments_triplet

    first_second_symmetric_difference = symmetric_subtract_multisegments(
        first, second)
    second_third_symmetric_difference = symmetric_subtract_multisegments(
        second, third)
    assert (not is_multisegment(first_second_symmetric_difference)
            or not is_multisegment(second_third_symmetric_difference)
            or are_multisegments_equivalent(
                symmetric_subtract_multisegments(
                    first_second_symmetric_difference,
                    second_third_symmetric_difference),
                symmetric_subtract_multisegments(first, third)))
Пример #10
0
def test_basic(multisegments_pair: MultisegmentsPair) -> None:
    left_multisegment, right_multisegment = multisegments_pair

    result = symmetric_subtract_multisegments(left_multisegment,
                                              right_multisegment)

    assert is_multisegment(result)
def test_absorption_identity(multisegments_pair: MultisegmentsPair) -> None:
    first, second = multisegments_pair

    first_second_intersection = intersect_multisegments(first, second)
    assert (not is_multisegment(first_second_intersection)
            or are_multisegments_equivalent(
                unite_multisegments(first, first_second_intersection), first))
def test_validity(multisegment_with_segment: MultisegmentWithSegment) -> None:
    multisegment, segment = multisegment_with_segment

    result = symmetric_subtract_multisegment_from_segment(
        segment, multisegment)

    assert not is_multisegment(result) or is_multisegment_valid(result)
Пример #13
0
def test_properties(data: DataObject,
                    coordinates_limits_type_pair: Tuple[ScalarsLimitsType,
                                                        ScalarsLimitsType],
                    sizes_pair: SizesPair) -> None:
    (x_coordinates_limits_type,
     y_coordinates_limits_type) = coordinates_limits_type_pair
    ((x_coordinates, (min_x_value, max_x_value)),
     x_type) = x_coordinates_limits_type
    ((y_coordinates, (min_y_value, max_y_value)),
     y_type) = y_coordinates_limits_type
    min_size, max_size = sizes_pair

    strategy = multisegments(x_coordinates,
                             y_coordinates,
                             min_size=min_size,
                             max_size=max_size)

    result = data.draw(strategy)

    assert is_multisegment(result)
    assert has_valid_size(result.segments,
                          min_size=min_size,
                          max_size=max_size)
    assert multisegment_has_coordinates_types(result,
                                              x_type=x_type,
                                              y_type=y_type)
    assert multisegment_has_coordinates_in_range(result,
                                                 min_x_value=min_x_value,
                                                 max_x_value=max_x_value,
                                                 min_y_value=min_y_value,
                                                 max_y_value=max_y_value)
    assert segments_do_not_cross_or_overlap(result.segments)
Пример #14
0
def test_basic(
        multipolygon_with_multisegment: MultipolygonWithMultisegment) -> None:
    multipolygon, multisegment = multipolygon_with_multisegment

    result = intersect_multisegment_with_multipolygon(multisegment,
                                                      multipolygon)

    assert is_multisegment(result)
Пример #15
0
def test_basic(
        multipolygon_with_multisegment: MultipolygonWithMultisegment) -> None:
    multipolygon, multisegment = multipolygon_with_multisegment

    result = subtract_multipolygon_from_multisegment(multisegment,
                                                     multipolygon)

    assert is_multisegment(result)
Пример #16
0
def test_properties(multisegment_with_segment: MultisegmentWithSegment
                    ) -> None:
    multisegment, segment = multisegment_with_segment

    result = unite_segment_with_multisegment(segment, multisegment)

    relation = segment_in_multisegment(segment, multisegment)
    assert equivalence(is_multisegment(result),
                       relation in (Relation.DISJOINT, Relation.TOUCH,
                                    Relation.CROSS, Relation.OVERLAP,
                                    Relation.COMPONENT))
    assert equivalence(is_segment(result),
                       relation is Relation.EQUAL
                       or relation is Relation.COMPOSITE)
def test_properties(multisegment_with_segment: MultisegmentWithSegment
                    ) -> None:
    multisegment, segment = multisegment_with_segment

    result = subtract_multisegment_from_segment(segment, multisegment)

    relation = segment_in_multisegment(segment, multisegment)
    assert equivalence(is_empty(result),
                       relation is Relation.EQUAL
                       or relation is Relation.COMPONENT)
    assert implication(is_multisegment(result),
                       relation in (Relation.TOUCH, Relation.CROSS,
                                    Relation.COMPOSITE, Relation.OVERLAP))
    assert implication(is_segment(result),
                       relation in (Relation.DISJOINT, Relation.TOUCH,
                                    Relation.CROSS, Relation.COMPOSITE,
                                    Relation.OVERLAP))
Пример #18
0
def test_same_coordinates(data: DataObject,
                          coordinates_limits_type: ScalarsLimitsType,
                          sizes_pair: SizesPair) -> None:
    (coordinates, (min_value, max_value)), type_ = coordinates_limits_type
    min_size, max_size = sizes_pair

    strategy = multisegments(coordinates, min_size=min_size, max_size=max_size)

    result = data.draw(strategy)

    assert is_multisegment(result)
    assert has_valid_size(result.segments,
                          min_size=min_size,
                          max_size=max_size)
    assert multisegment_has_coordinates_types(result,
                                              x_type=type_,
                                              y_type=type_)
    assert multisegment_has_coordinates_in_range(result,
                                                 min_x_value=min_value,
                                                 max_x_value=max_value,
                                                 min_y_value=min_value,
                                                 max_y_value=max_value)
    assert segments_do_not_cross_or_overlap(result.segments)
Пример #19
0
def test_validity(multisegment_with_segment: MultisegmentWithSegment) -> None:
    multisegment, segment = multisegment_with_segment

    result = unite_segment_with_multisegment(segment, multisegment)

    assert not is_multisegment(result) or is_multisegment_valid(result)
Пример #20
0
def test_validity(segments: List[Segment]) -> None:
    result = segments_to_multisegment(segments)

    assert not is_multisegment(result) or is_multisegment_valid(result)
Пример #21
0
def test_basic(segments: List[Segment]) -> None:
    result = segments_to_multisegment(segments)

    assert is_multisegment(result)
Пример #22
0
def test_basic(multisegments_pair: MultisegmentsPair) -> None:
    left_multisegment, right_multisegment = multisegments_pair

    result = unite_multisegments(left_multisegment, right_multisegment)

    assert is_multisegment(result)
def test_basic(multisegments_pair: MultisegmentsPair) -> None:
    first, second = multisegments_pair

    result = unite_multisegments(first, second)

    assert is_multisegment(result)