File: 2434.c

package info (click to toggle)
graphviz 14.0.5-2
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 139,388 kB
  • sloc: ansic: 141,938; cpp: 11,957; python: 7,766; makefile: 4,043; yacc: 3,030; xml: 2,972; tcl: 2,495; sh: 1,388; objc: 1,159; java: 560; lex: 423; perl: 243; awk: 156; pascal: 139; php: 58; ruby: 49; cs: 31; sed: 1
file content (82 lines) | stat: -rw-r--r-- 1,940 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/// \file
/// \brief test ordering of \p agmemread and \p gvContext
///
/// See https://gitlab.com/graphviz/graphviz/-/issues/2434.

#ifdef NDEBUG
#error "this program is not intended to be compiled with assertions disabled"
#endif

#include <assert.h>
#include <graphviz/cgraph.h>
#include <graphviz/gvc.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>

static const char dotString[] = "\
digraph {\n\
    compound=true;\n\
    node [shape=Mrecord]\n\
    rankdir=\"LR\"\n\
\n\
    subgraph \"clusterOpen\"\n\
    {\n\
        label = \"Open\"\n\
        \"Assigned\" [label=\"Assigned|exit / OnDeassigned\"];\n\
    }\n\
    \"Deferred\" [label=\"Deferred|entry / Function\"];\n\
    \"Closed\" [label=\"Closed\"];\n\
\n\
    \"OpenNode\" -> \"Assigned\" [style=\"solid\", label=\"Assign / OnAssigned\"];\n\
    \"Assigned\" -> \"Assigned\" [style=\"solid\", label=\"Assign\"];\n\
    \"Assigned\" -> \"Closed\" [style=\"solid\", label=\"Close\"];\n\
    \"Assigned\" -> \"Deferred\" [style=\"solid\", label=\"Defer\"];\n\
    \"Deferred\" -> \"Assigned\" [style=\"solid\", label=\"Assign / OnAssigned\"];\n\
    init [label=\"\", shape=point];\n\
    init -> \"Open\"[style = \"solid\"]\n\
}\n\
";

int main(int argc, char **argv) {

  assert(argc == 2);
  assert(strcmp(argv[1], "before") == 0 || strcmp(argv[1], "after") == 0);

  GVC_t *gvc = NULL;
  if (strcmp(argv[1], "before") == 0) {
    gvc = gvContext();
    assert(gvc != NULL);
  }

  Agraph_t *graph = agmemread(dotString);
  assert(graph != NULL);

  if (strcmp(argv[1], "after") == 0) {
    assert(gvc == NULL);
    gvc = gvContext();
    assert(gvc != NULL);
  }

  {
    int rc = gvLayout(gvc, graph, "dot");
    assert(rc == 0);
  }

  {
    int rc = gvRender(gvc, graph, "svg", stdout);
    assert(rc == 0);
  }

  {
    int rc = gvFreeLayout(gvc, graph);
    assert(rc == 0);
  }

  {
    int rc = agclose(graph);
    assert(rc == 0);
  }

  return 0;
}