~ chicken-core (chicken-5) b175ce65fe17c0887ed89f070dc4c16ef95d51f9


commit b175ce65fe17c0887ed89f070dc4c16ef95d51f9
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sun Apr 11 21:24:36 2021 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sun Apr 11 21:24:36 2021 +0200

    applied patch by Moritz Heidkamp for fixing #1185: normalize dag before sorting topologically
    
    Signed-off-by: felix <felix@call-with-current-continuation.org>

diff --git a/data-structures.scm b/data-structures.scm
index 09f11760..44dc6827 100644
--- a/data-structures.scm
+++ b/data-structures.scm
@@ -543,7 +543,16 @@
                             #f
                             (cons edge path)
                             state))))))))
-  (let loop ((dag dag)
+  (define normalized-dag
+    (foldl (lambda (result node)
+             (alist-update! (car node)
+                            (append (cdr node)
+                                    (or (alist-ref (car node) dag pred) '()))
+                            result
+                            pred))
+           '()
+           dag))
+  (let loop ((dag normalized-dag)
              (state (cons (list) (list))))
     (if (null? dag)
         (cdr state)
diff --git a/tests/data-structures-tests.scm b/tests/data-structures-tests.scm
index b1851857..1d7820df 100644
--- a/tests/data-structures-tests.scm
+++ b/tests/data-structures-tests.scm
@@ -79,5 +79,19 @@
 
 (assert (equal? '() (topological-sort '() eq?)))
 (assert (equal? '(a b c d) (topological-sort '((a b) (b c) (c d)) eq?)))
-(assert (equal? '(c d a b) (topological-sort '((a b) (c d)) eq?)))
+(assert (equal? '(a b c d) (topological-sort '((a b) (c d)) eq?)))
 (assert-error (topological-sort '((a b) (b a)) eq?))
+(assert 
+  (equal? 
+    (topological-sort
+     '((i am)
+       (not trying)
+       (confuse the)
+       (am trying)
+       (trying to)
+       (am not)
+       (trying the)
+       (to confuse)
+       (the issue))
+      eq?)
+    '(i am not trying to confuse the issue)))
Trap