pykello / racket-graphviz

Library to enable using graphviz in Racket programs
BSD 3-Clause "New" or "Revised" License
25 stars 3 forks source link

dot->pict doesn't always terminate #6

Closed srfoster closed 4 years ago

srfoster commented 4 years ago

Occasionally, I find input strings that seem to cause dot->pict to run forever -- even when graphviz itself handles the input fine.

This package dependency graph, for example, does not complete on my machine:

#lang racket
(require graphviz)

(dot->pict
 "digraph G {
    node0 [label=\"healer-farm-foods\"];
    node1 [label=\"english\"];
    node2 [label=\"ts-kata-util\"];
    node3 [label=\"healer-sea-enemies\"];
    node4 [label=\"healer-zoo-foods\"];
    node5 [label=\"game-engine-rpg\"];
    node6 [label=\"healer-sea-friends\"];
    node7 [label=\"healer-zoo-enemies\"];
    node8 [label=\"healer-sea-foods\"];
    node9 [label=\"healer-sea-lib\"];
    node10 [label=\"racket-chipmunk\"];
    node11 [label=\"image-coloring\"];
    node12 [label=\"colors-as-strings\"];
    node13 [label=\"healer-lib\"];
    node14 [label=\"ratchet\"];
    node15 [label=\"define-assets-from\"];
    node16 [label=\"animal-assets\"];
    node17 [label=\"healer-zoo-friends\"];
    node18 [label=\"ts-icons\"];
    node19 [label=\"game-engine-demos-common\"];
    node20 [label=\"ts-k2-healer\"];
    node21 [label=\"survival\"];
    node22 [label=\"healer-farm-lib\"];
    node23 [label=\"game-engine\"];
    node24 [label=\"healer-farm-enemies\"];
    node25 [label=\"healer-farm-friends\"];
    node26 [label=\"healer-zoo-lib\"];
    subgraph U {
        edge [dir=none];
    }
    subgraph D {
        node0 -> node13;
        node0 -> node16;
        node0 -> node22;
        node2 -> node14;
        node2 -> node15;
        node2 -> node11;
        node3 -> node13;
        node3 -> node16;
        node3 -> node9;
        node4 -> node13;
        node4 -> node16;
        node4 -> node26;
        node5 -> node2;
        node5 -> node23;
        node6 -> node13;
        node6 -> node16;
        node6 -> node9;
        node7 -> node13;
        node7 -> node16;
        node7 -> node26;
        node8 -> node13;
        node8 -> node16;
        node8 -> node9;
        node9 -> node13;
        node9 -> node21;
        node13 -> node18;
        node13 -> node16;
        node13 -> node14;
        node13 -> node1;
        node13 -> node21;
        node13 -> node12;
        node17 -> node13;
        node17 -> node16;
        node17 -> node26;
        node19 -> node5;
        node19 -> node23;
        node20 -> node7;
        node20 -> node0;
        node20 -> node2;
        node20 -> node3;
        node20 -> node17;
        node20 -> node4;
        node20 -> node25;
        node20 -> node6;
        node20 -> node8;
        node20 -> node24;
        node21 -> node19;
        node21 -> node2;
        node21 -> node23;
        node22 -> node13;
        node22 -> node21;
        node23 -> node10;
        node24 -> node13;
        node24 -> node16;
        node24 -> node22;
        node25 -> node13;
        node25 -> node16;
        node25 -> node22;
        node26 -> node13;
        node26 -> node21;
    }
}")
pykello commented 4 years ago

thanks. looking into it.