anchor.diff:  
       Collector = comm:make_global(collector(Count, self())),
   
  -    [learner:start_paxosid(hd(Learners), Id, Majority, Collector, chocolate_chip_cookie)
  -     || Id <- lists:seq(1, Count)],
  -    [acceptor:start_paxosid(X, Id, Learners)
  -     || X <- Acceptors,  Id <- lists:seq(1, Count)],
  -    [proposer:start_paxosid(hd(Proposers), Id, Acceptors, prepared,
  -                            Majority, CountProposers, 0)
  -     || Id <- lists:seq(1, Count)],
  -    receive
  -        done ->
  -            ok
  -    end,
  -    ok.
  -
  +    _ = [ learner:start_paxosid(hd(Learners), Id, Majority, Collector, chocolate_chip_cookie)
  +            || Id <- lists:seq(1, Count)],
  +    _ = [ acceptor:start_paxosid(X, Id, Learners)
  +            || X <- Acceptors,  Id <- lists:seq(1, Count)],
  +    _ = [ proposer:start_paxosid(hd(Proposers), Id, Acceptors, prepared,
  +                                 Majority, CountProposers, 0)
  +            || Id <- lists:seq(1, Count)],
  +    receive done -> ok
  +    end.
  +
  +-spec tester_paxos(CountAcceptors::pos_integer(), Count::pos_integer(), Prefix::string()) -> ok.
   tester_paxos(CountAcceptors, Count, Prefix) ->
       CountProposers = 1,
       Majority = CountAcceptors div 2 + 1,
  
positive.code:     CountAcceptors = 4,
      Majority = CountAcceptors div 2 + 1,
      {Proposers, Acceptors, Learners} =
          make(CountProposers, CountAcceptors, 1, two_proposers),
  
      %% start paxosids in the components
      learner:start_paxosid(hd(Learners), paxid123, Majority, comm:this(), cpaxid123),
      [ acceptor:start_paxosid(X, paxid123, Learners) || X <- Acceptors ],
      [ Proposer1, Proposer2 ] = Proposers,
  
      %% set some breakpoints
      gen_component:bp_set(element(3, Proposer1), acceptor_ack, bp1),
      %% initiate full paxos
      proposer:start_paxosid(Proposer1, paxid123, Acceptors,
                             prepared, Majority, length(Proposers), 3),
  
negative.code:     unittest_helper:end_per_suite(Config),
      ok.
  
  -spec make_groupname(Prefix::string(), Number::integer()) -> pid_groups:groupname().
  make_groupname(Prefix, Number) ->
      lists:flatten(io_lib:format("~s.~B", [Prefix, Number])).
  
  %% make proposers, acceptors, and learners
  -spec make(P::pos_integer(), A::pos_integer(), L::pos_integer(), Prefix::string())
          -> {Ps::[comm:mypid(),...], As::[comm:mypid(),...], Ls::[comm:mypid(),...]}.
  make(P, A, L, Prefix) ->
      NumMDs = lists:max([P,A,L]),
      _  = [ msg_delay:start_link(make_groupname(Prefix, X))
               || X <- lists:seq(1, NumMDs)],
      Ps = [ comm:make_global(element(2, proposer:start_link(make_groupname(Prefix, X))))
               || X <- lists:seq(1, P)],
      As = [ comm:make_global(element(2, acceptor:start_link(make_groupname(Prefix, X))))
               || X <- lists:seq(1, A)],
      Ls = [ comm:make_global(element(2, learner:start_link(make_groupname(Prefix, X))))
               || X <- lists:seq(1,L)],
      {Ps, As, Ls}.
  
  -spec collector(Count::pos_integer(), Owner::pid()) -> pid().
  collector(Count, Owner) ->
      spawn(fun() ->
                    collect(Count),
                    Owner ! done
            end).
  
  -spec collect(non_neg_integer()) -> ok.
  collect(0) ->
      ok;
  collect(Count) ->
  