anchor.diff:      {ConnectedFails, SymmetryFails}.
   
   %% @private
  -verify_leave(Nodes, Manager) ->
  +verify_self_leave(Nodes, Manager) ->
       %% Pause for gossip interval * node exchanges + gossip interval for full convergence.
       timer:sleep(?PERIODIC_INTERVAL * length(Nodes) + ?PERIODIC_INTERVAL),
   
  
positive.code:                           end
                    end, Nodes),
  
      %% Remove a node from the cluster.
      [{_, _}, {_, Node2}, {_, _}, {_, Node4}] = Nodes,
      ct:pal("Removing node ~p from the cluster.", [Node4]),
      ok = rpc:call(Node2, partisan_peer_service, leave, [Node4]),
      
      %% Pause for gossip interval * node exchanges + gossip interval for full convergence.
      timer:sleep(?PERIODIC_INTERVAL * length(Nodes) + ?PERIODIC_INTERVAL),
  
negative.code: 
  ok.
  
  %% @private
  verify_leave(Nodes, Manager) ->
      %% Pause for gossip interval * node exchanges + gossip interval for full convergence.
      timer:sleep(?PERIODIC_INTERVAL * length(Nodes) + ?PERIODIC_INTERVAL),
  
      %% Verify membership.
      %%
      %% Every node should know about every other node in this topology.
      %%
      VerifyInitialFun = fun({_, Node}) ->
              {ok, Members} = rpc:call(Node, Manager, members, []),
              SortedNodes = lists:usort([N || {_, N} <- Nodes]),
              SortedMembers = lists:usort(Members),
              case SortedMembers =:= SortedNodes of
                  true ->
                      true;
                  false ->
                      ct:pal("Membership incorrect; node ~p should have ~p but has ~p",
                             [Node, SortedNodes, SortedMembers]),
                      {false, {Node, SortedNodes, SortedMembers}}
              end
      end,
  
      %% Verify the membership is correct.
      lists:foreach(fun(Node) ->
                            VerifyNodeFun = fun() -> VerifyInitialFun(Node) end,
  
                            case wait_until(VerifyNodeFun, 60 * 2, 100) of
                                ok ->
                                    ok;
                                {fail, {false, {IncorrenectNode, Expected, Contains}}} ->
                                   ct:fail("Membership incorrect; node ~p should have ~p but has ~p",
                                           [IncorrenectNode, Expected, Contains])
                            end
                    end, Nodes),
  
      %% Remove a node from the cluster.
      [{_, _}, {_, Node2}, {_, _}, {_, Node4}] = Nodes,
      ct:pal("Removing node ~p from the cluster.", [Node4]),
      ok = rpc:call(Node2, partisan_peer_service, leave, [Node4]),
      
      %% Pause for gossip interval * node exchanges + gossip interval for full convergence.
      timer:sleep(?PERIODIC_INTERVAL * length(Nodes) + ?PERIODIC_INTERVAL),
  
      %% Verify membership.
      %%
      %% Every node should know about every other node in this topology.
      %%
      VerifyRemoveFun = fun({_, Node}) ->
              {ok, Members} = rpc:call(Node, Manager, members, []),
              SortedNodes = case Node of
                  Node4 ->
                      [Node4];
                  _ ->
                      lists:usort([N || {_, N} <- Nodes]) -- [Node4]
              end,
              SortedMembers = lists:usort(Members),
              case SortedMembers =:= SortedNodes of
                  true ->
                      true;
                  false ->
                      ct:pal("Membership incorrect; node ~p should have ~p but has ~p",
                             [Node, SortedNodes, SortedMembers]),
                      {false, {Node, SortedNodes, SortedMembers}}
              end
      end,
  
      %% Verify the membership is correct.
      lists:foreach(fun(Node) ->
                            VerifyNodeFun = fun() -> VerifyRemoveFun(Node) end,
  
                            case wait_until(VerifyNodeFun, 60 * 2, 100) of
                                ok ->
                                    ok;
                                {fail, {false, {IncorrectNode, Expected, Contains}}} ->
                                   ct:fail("Membership incorrect; node ~p should have ~p but has ~p",
                                           [IncorrectNode, Expected, Contains])
                            end
                    end, Nodes),
  
  ok.
  
  
  %% @private
  rand_bits(Bits) ->
  