anchor.diff:      end.
   
   is_owner(Node, Seq, Epochs) ->
  +    validate_epochs(Epochs),
       Node =:= owner_of(Seq, Epochs).
   
   owner_of(_Seq, []) ->
  
positive.code:     ?assert(is_owner(foo, 2, [{foo, 1}])),
      ?assert(is_owner(foo, 50, [{bar, 100}, {foo, 1}])),
      ?assert(is_owner(foo, 50, [{baz, 200}, {bar, 100}, {foo, 1}])),
      ?assert(is_owner(bar, 150, [{baz, 200}, {bar, 100}, {foo, 1}])).
  
  -endif.
  
negative.code:     EpochNode;
  owner_of(Seq, [_ | Rest]) ->
      owner_of(Seq, Rest).
  
  validate_epochs(Epochs) ->
      %% Assert uniqueness.
      case length(Epochs) == length(lists:ukeysort(2, Epochs)) of
          true  -> ok;
          false -> erlang:error(duplicate_epoch)
      end,
      %% Assert order.
      case Epochs == lists:sort(fun({_, A}, {_, B}) -> B =< A end, Epochs) of
          true  -> ok;
          false -> erlang:error(epoch_order)
      end.
  
  -ifdef(TEST).
  -include_lib("eunit/include/eunit.hrl").
  