summaryrefslogtreecommitdiffabout
path: root/tests
authorSergey Poznyakoff <gray@gnu.org>2020-10-18 19:20:16 (GMT)
committer Sergey Poznyakoff <gray@gnu.org>2020-10-18 19:20:16 (GMT)
commitc26297063aa2dad0fecd28791a47a8bffcfc9925 (patch) (side-by-side diff)
tree964990a4dd3c62bf0f25f248518b729403eb3c1a /tests
parenta7f3e6adb0ffbe56d9b521522d22cf758ee6acb7 (diff)
downloadpies-c26297063aa2dad0fecd28791a47a8bffcfc9925.tar.gz
pies-c26297063aa2dad0fecd28791a47a8bffcfc9925.tar.bz2
Fix cyclic dependecy detection and reporting.HEADmaster
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') (more/less context) (ignore whitespace changes)
-rw-r--r--tests/cyclic.at33
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

Return to:

Send suggestions and report system problems to the System administrator.