anchor.diff:  -type epoch() :: float().
   -type clock() :: {node(), epoch()}.
   -type vector_clock() :: [clock()].
  +-type ping_node() :: node() | nil.
   
   %%====================================================================
   %% API
  
positive.code:                          "for ping node: ~p", [JoinType, PingNode]),
      {error, unknown_join_type}.
  
  
  int_join(ExtNodes, #mem{nodes=Nodes, clock=Clock} = State) ->
      NewNodes = lists:foldl(fun({Pos, N, _Options}=New, AccIn) ->
          check_pos(Pos, N, Nodes),
  
negative.code:     proplists:get_value(test, Args).
  
  
  %% @doc handle_init starts a node
  %%      Most of the time, this puts the node in a single-node cluster setup,
  %%      But, we could be automatically rejoining a cluster after some downtime.
  %%      See handle_join for initing, joining, leaving a cluster, or replacing a
  %%      node.
  %% @end
  handle_init(Test, nil) ->
      int_reset(Test);
  
  