anchor.diff:  
   is_edge_error(_) ->
       false.
  +
  +to_dot(Graph) ->
  +    Start = ["digraph dag {\n"],
  +    VertexList = digraph_utils:topsort(Graph),
  +    DrawedVertices =  lists:foldl(fun(V, Acc) ->
  +        Acc ++ v_str(V) ++ ";\n"
  +    end, Start, VertexList),
  +    unicode:characters_to_list(write_edges(Graph, VertexList, [], DrawedVertices) ++ "}\n").
  +
  +write_edges(G, [V | Vs], Visited, Result) ->
  +    Edges = lists:map(fun(E) -> digraph:edge(G, E) end, digraph:out_edges(G, V)),
  +    R = lists:foldl(fun({_, _, To, Label}, Acc) ->
  +        case lists:member(To, Visited) of
  +            true -> Acc;
  +            false ->
  +                Acc ++ v_str(V) ++ " -> " ++ v_str(To) ++
  +                " [label=" ++ erlang:pid_to_list(Label) ++ "];\n"
  +        end
  +    end, Result, Edges),
  +    write_edges(G, Vs, [V | Visited], R);
  +
  +write_edges(_G, [], _Visited, Result) ->
  +    Result.
  +
  +%% @doc Generate an unique identifier for a vertex.
  +v_str({Id, _}) ->
  +  erlang:integer_to_list(erlang:phash2(Id)).
  
positive.code: add_edges(Src, Dst, Pid) ->
      gen_server:call(?MODULE, {add_edges, Src, Dst, Pid}, infinity).
  
  n_vertices() ->
      gen_server:call(?MODULE, n_vertices, infinity).
  
  
negative.code:          add_edges/3,
           add_vertex/1,
           add_vertices/1]).
  
  %% Utility
  -export([to_dot/0,
           export_dot/1]).
  
  %% Test
  -export([n_vertices/0,
  