From: Magnus Jacobsson Date: Wed, 14 Sep 2022 09:45:52 +0000 (+0200) Subject: tests: test_edge_node_overlap_utilities: check max edge stem/arrow overlap X-Git-Tag: 6.0.2~34^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c9a1e95e918f60c6b464a12ba954a8b7b07be26b;p=graphviz tests: test_edge_node_overlap_utilities: check max edge stem/arrow overlap --- diff --git a/tests/test_edge_node_overlap_utilities.cpp b/tests/test_edge_node_overlap_utilities.cpp index 3be32b9f7..5bbd75c7c 100644 --- a/tests/test_edge_node_overlap_utilities.cpp +++ b/tests/test_edge_node_overlap_utilities.cpp @@ -274,6 +274,15 @@ static bool check_analyzed_svg(SVGAnalyzer &svg_analyzer, const auto edge_stem_arrowhead_overlap = overlap_in_rank_direction(overlap_bbox, rankdir); + // check maximum overlap of edge stem and arrowhead + if (check_options.check_max_edge_stem_arrow_overlap) { + const auto max_edge_stem_arrowhead_overlap = + check_options.max_edge_stem_arrow_overlap; + DO_CHECK(edge_stem_arrowhead_overlap <= + max_edge_stem_arrowhead_overlap + + check_options.svg_rounding_error * 2); + } + // check minimum overlap of edge stem and arrowhead if (check_options.check_min_edge_stem_arrow_overlap) { const auto min_edge_stem_arrowhead_overlap = @@ -295,6 +304,15 @@ static bool check_analyzed_svg(SVGAnalyzer &svg_analyzer, const auto edge_stem_arrowtail_overlap = overlap_in_rank_direction(overlap_bbox, rankdir); + // check maximum overlap of edge stem and arrowtail + if (check_options.check_max_edge_stem_arrow_overlap) { + const auto max_edge_stem_arrowtail_overlap = + check_options.max_edge_stem_arrow_overlap; + DO_CHECK(edge_stem_arrowtail_overlap <= + max_edge_stem_arrowtail_overlap + + check_options.svg_rounding_error * 2); + } + // check minimum overlap of edge stem and arrowtail if (check_options.check_min_edge_stem_arrow_overlap) { const auto min_edge_stem_arrowtail_overlap = @@ -384,10 +402,14 @@ void test_edge_node_overlap(const graph_options &graph_options, tc_check_options.check_max_edge_node_overlap, .check_min_edge_node_overlap = tc_check_options.check_min_edge_node_overlap, + .check_max_edge_stem_arrow_overlap = + tc_check_options.check_max_edge_stem_arrow_overlap, .check_min_edge_stem_arrow_overlap = tc_check_options.check_min_edge_stem_arrow_overlap, .max_node_edge_overlap = graphviz_bezier_clip_margin, .min_node_edge_overlap = 0, + .max_edge_stem_arrow_overlap = + graph_options.edge_penwidth / 2 + graphviz_bezier_clip_margin, .min_edge_stem_arrow_overlap = 0, .svg_rounding_error = graphviz_max_svg_rounding_error, }; diff --git a/tests/test_edge_node_overlap_utilities.h b/tests/test_edge_node_overlap_utilities.h index ea509caf7..03b769064 100644 --- a/tests/test_edge_node_overlap_utilities.h +++ b/tests/test_edge_node_overlap_utilities.h @@ -9,6 +9,9 @@ struct tc_check_options { bool check_max_edge_node_overlap = true; /// whether to check that there is enough overlap bool check_min_edge_node_overlap = true; + /// whether to check that there is not too much overlap between edge stem and + /// arrow + bool check_max_edge_stem_arrow_overlap = true; /// whether to check that there is enough overlap between edge stem and arrow bool check_min_edge_stem_arrow_overlap = true; }; @@ -18,12 +21,17 @@ struct check_options { bool check_max_edge_node_overlap = true; /// whether to check that there is enough overlap bool check_min_edge_node_overlap = true; + /// whether to check that there is not too much overlap between edge stem and + /// arrow + bool check_max_edge_stem_arrow_overlap = true; /// whether to check that there is enough overlap between edge stem and arrow bool check_min_edge_stem_arrow_overlap = true; /// maximum allowed overlap between edge and node double max_node_edge_overlap; /// minimum required overlap between edge and node double min_node_edge_overlap; + /// maximum allowed overlap between edge stem and arrow + double max_edge_stem_arrow_overlap; /// minimum required overlap between edge stem and arrow double min_edge_stem_arrow_overlap; /// rounding error caused by limited precision in SVG attribute values diff --git a/tests/test_max_edge_node_overlap_polygon_node_shapes.cpp b/tests/test_max_edge_node_overlap_polygon_node_shapes.cpp index b48ba659a..2a20a0d6a 100644 --- a/tests/test_max_edge_node_overlap_polygon_node_shapes.cpp +++ b/tests/test_max_edge_node_overlap_polygon_node_shapes.cpp @@ -21,6 +21,7 @@ TEST_CASE( const tc_check_options check_options = { .check_max_edge_node_overlap = true, .check_min_edge_node_overlap = false, + .check_max_edge_stem_arrow_overlap = false, .check_min_edge_stem_arrow_overlap = false, }; diff --git a/tests/test_max_edge_node_overlap_simple.cpp b/tests/test_max_edge_node_overlap_simple.cpp index 380850a18..a632ff893 100644 --- a/tests/test_max_edge_node_overlap_simple.cpp +++ b/tests/test_max_edge_node_overlap_simple.cpp @@ -15,10 +15,11 @@ TEST_CASE("Maximum edge node overlap", .edge_penwidth = 2, }; - const tc_check_options check_options = {.check_max_edge_node_overlap = true, - .check_min_edge_node_overlap = false, - .check_min_edge_stem_arrow_overlap = - false}; + const tc_check_options check_options = { + .check_max_edge_node_overlap = true, + .check_min_edge_node_overlap = false, + .check_max_edge_stem_arrow_overlap = false, + .check_min_edge_stem_arrow_overlap = false}; const auto filename_base = AUTO_NAME(); diff --git a/tests/test_min_edge_node_overlap_polygon_node_shapes.cpp b/tests/test_min_edge_node_overlap_polygon_node_shapes.cpp index 0dd6783c0..7115e8a90 100644 --- a/tests/test_min_edge_node_overlap_polygon_node_shapes.cpp +++ b/tests/test_min_edge_node_overlap_polygon_node_shapes.cpp @@ -20,6 +20,7 @@ TEST_CASE("Minimum edge and node overlap for polygon node shapes", const tc_check_options check_options = { .check_max_edge_node_overlap = false, .check_min_edge_node_overlap = true, + .check_max_edge_stem_arrow_overlap = false, .check_min_edge_stem_arrow_overlap = false, }; diff --git a/tests/test_min_edge_node_overlap_simple.cpp b/tests/test_min_edge_node_overlap_simple.cpp index 9a7b9b9a4..6b13ce913 100644 --- a/tests/test_min_edge_node_overlap_simple.cpp +++ b/tests/test_min_edge_node_overlap_simple.cpp @@ -14,10 +14,11 @@ TEST_CASE("Minimum edge node overlap", .edge_penwidth = 2, }; - const tc_check_options check_options = {.check_max_edge_node_overlap = false, - .check_min_edge_node_overlap = true, - .check_min_edge_stem_arrow_overlap = - false}; + const tc_check_options check_options = { + .check_max_edge_node_overlap = false, + .check_min_edge_node_overlap = true, + .check_max_edge_stem_arrow_overlap = false, + .check_min_edge_stem_arrow_overlap = false}; const auto filename_base = AUTO_NAME(); diff --git a/tests/test_min_edge_stem_arrow_overlap_simple.cpp b/tests/test_min_edge_stem_arrow_overlap_simple.cpp index d08a2130c..527d757de 100644 --- a/tests/test_min_edge_stem_arrow_overlap_simple.cpp +++ b/tests/test_min_edge_stem_arrow_overlap_simple.cpp @@ -14,10 +14,11 @@ TEST_CASE("Minimum edge stem and arrow overlap", .edge_penwidth = 2, }; - const tc_check_options check_options = {.check_max_edge_node_overlap = false, - .check_min_edge_node_overlap = false, - .check_min_edge_stem_arrow_overlap = - true}; + const tc_check_options check_options = { + .check_max_edge_node_overlap = false, + .check_min_edge_node_overlap = false, + .check_max_edge_stem_arrow_overlap = false, + .check_min_edge_stem_arrow_overlap = true}; const auto filename_base = AUTO_NAME();