anchor.diff:  %% Config0 = Config1 = [tuple()]
   %% Reason = any()
   %% -------------------------------------------------------------------
  -init_per_group(two_nodes_process_registration, Config) ->
  +init_per_group(two_nodes_groups, Config) ->
       %% start slave
       {ok, SlaveNode} = syn_test_suite_helper:start_slave(syn_slave),
       %% config
       [{slave_node, SlaveNode} | Config];
  -init_per_group(three_nodes_process_registration, Config) ->
  +init_per_group(three_nodes_groups, Config) ->
       %% start slave
       {ok, SlaveNode1} = syn_test_suite_helper:start_slave(syn_slave_1),
       {ok, SlaveNode2} = syn_test_suite_helper:start_slave(syn_slave_2),
  
positive.code: %% -------------------------------------------------------------------
  all() ->
      [
          {group, single_node_groups}
      ].
  
  %% -------------------------------------------------------------------
  
negative.code:     {error, not_alive} = syn:join(GroupName, Pid2),
      %% kill processes
      syn_test_suite_helper:kill_process(Pid).
  
  two_nodes_join_monitor_and_unregister(Config) ->
      GroupName = "my group",
      %% get slave
      SlaveNode = proplists:get_value(slave_node, Config),
      %% start
      ok = syn:start(),
      ok = rpc:call(SlaveNode, syn, start, []),
      timer:sleep(100),
      %% start processes
      LocalPid = syn_test_suite_helper:start_process(),
      RemotePid = syn_test_suite_helper:start_process(SlaveNode),
      RemotePidJoinRemote = syn_test_suite_helper:start_process(SlaveNode),
      OtherPid = syn_test_suite_helper:start_process(),
      %% retrieve
      [] = syn:get_members("group-1"),
      [] = syn:get_members(GroupName, with_meta),
      false = syn:member(LocalPid, GroupName),
      false = syn:member(RemotePid, GroupName),
      false = syn:member(RemotePidJoinRemote, GroupName),
      false = syn:member(OtherPid, GroupName),
      %% join
      ok = syn:join(GroupName, LocalPid),
      ok = syn:join(GroupName, RemotePid),
      ok = rpc:call(SlaveNode, syn, join, [GroupName, RemotePidJoinRemote]),
      ok = syn:join("other-group", OtherPid),
      timer:sleep(200),
      %% retrieve
      true = syn:member(LocalPid, GroupName),
      true = syn:member(RemotePid, GroupName),
      true = syn:member(RemotePidJoinRemote, GroupName),
      false = syn:member(OtherPid, GroupName),
      true = rpc:call(SlaveNode, syn, member, [LocalPid, GroupName]),
      true = rpc:call(SlaveNode, syn, member, [RemotePid, GroupName]),
      true = rpc:call(SlaveNode, syn, member, [RemotePidJoinRemote, GroupName]),
      false = rpc:call(SlaveNode, syn, member, [OtherPid, GroupName]),
      %% leave & kill
      ok = rpc:call(SlaveNode, syn, leave, [GroupName, LocalPid]),
      ok = syn:leave(GroupName, RemotePid),
      syn_test_suite_helper:kill_process(RemotePidJoinRemote),
      syn_test_suite_helper:kill_process(OtherPid),
      timer:sleep(200),
      %% retrieve
      [] = syn:get_members("group-1"),
      [] = syn:get_members(GroupName, with_meta),
      false = syn:member(LocalPid, GroupName),
      false = syn:member(RemotePid, GroupName),
      false = syn:member(RemotePidJoinRemote, GroupName),
      false = syn:member(OtherPid, GroupName),
      %% kill processes
      syn_test_suite_helper:kill_process(LocalPid),
      syn_test_suite_helper:kill_process(RemotePid).
  