From c9a1e95e918f60c6b464a12ba954a8b7b07be26b Mon Sep 17 00:00:00 2001 From: Magnus Jacobsson Date: Wed, 14 Sep 2022 11:45:52 +0200 Subject: [PATCH] tests: test_edge_node_overlap_utilities: check max edge stem/arrow overlap --- tests/test_edge_node_overlap_utilities.cpp | 22 +++++++++++++++++++ tests/test_edge_node_overlap_utilities.h | 8 +++++++ ..._edge_node_overlap_polygon_node_shapes.cpp | 1 + tests/test_max_edge_node_overlap_simple.cpp | 9 ++++---- ..._edge_node_overlap_polygon_node_shapes.cpp | 1 + tests/test_min_edge_node_overlap_simple.cpp | 9 ++++---- ...est_min_edge_stem_arrow_overlap_simple.cpp | 9 ++++---- 7 files changed, 47 insertions(+), 12 deletions(-) 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(); -- 2.50.1