diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2020-10-18 22:20:16 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2020-10-18 22:20:16 +0300 |
commit | c26297063aa2dad0fecd28791a47a8bffcfc9925 (patch) | |
tree | 964990a4dd3c62bf0f25f248518b729403eb3c1a /tests | |
parent | a7f3e6adb0ffbe56d9b521522d22cf758ee6acb7 (diff) | |
download | pies-c26297063aa2dad0fecd28791a47a8bffcfc9925.tar.gz pies-c26297063aa2dad0fecd28791a47a8bffcfc9925.tar.bz2 |
Fix cyclic dependecy detection and reporting.
Use modified Floyd-Warshall algorithm for cyclic dependecy detection.
The computed next vertex indices are used when reporting the cycles
found.
This fixes dead loops that occurred in earlier versions when trying to
report cycles. One of inputs that caused such behavior is used as a
new test in cyclic.at.
* src/depmap.c: Rewrite using modified Floyd-Warshall algorithm.
(depmap_cycle_detect,depmap_path_free): New functions.
* src/comp.c (report_cyclic_dependency): Take struct depmap_path *
as argument.
(component_build_depmap): Use depmap_cycle_detect to detect cyclic
dependencies.
(depmap_dump): Special handling for zero-sized depmap.
* tests/cyclic.at: Add new test.
* src/pies.h (depmap_dim, depmap_free)
(depmap_cycle_detect,depmap_path_free): New protos.
* NEWS: Document changes.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/cyclic.at | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/tests/cyclic.at b/tests/cyclic.at index 7c24acf..1cc542d 100644 --- a/tests/cyclic.at +++ b/tests/cyclic.at @@ -15,6 +15,7 @@ # along with GNU pies. If not, see <http://www.gnu.org/licenses/>. AT_SETUP([Detecting cyclic dependencies]) + AT_CHECK([ PIES_XFAIL_CHECK # The following matrices describe the test.conf configuration file below. @@ -105,10 +106,38 @@ Legend: 1: g 2: h ], -[pies: component a depends on itself +[pies: cyclic dependencies detected: pies: a -> d -> c -> e -> a -pies: component b depends on itself pies: b -> b ]) +AT_CHECK([ +AT_DATA([test.conf],[ +component a { + command "a"; + prerequisites (b,c); +} +component b { + command "b"; + prerequisites (c); +} +component c { + command "c"; + prerequisites (d); +} +component d { + command "d"; + prerequisites (a); +} +]) +pies --config-file test.conf --dump-depmap | trimws +], +[0], +[No components defined +], +[pies: cyclic dependencies detected: +pies: a -> c -> d -> a +pies: a -> b -> c -> d -> a +]) + AT_CLEANUP |