anchor.diff:           segments/1,
            width/1,
            mem_levels/1]).
  +-export([compare2/4]).
   
   -ifdef(TEST).
   -export([local_compare/2]).
  
positive.code:     Remote = fun(get_bucket, {L, B}) ->
                       Other ! {get_bucket, self(), L, B},
                       receive {remote, X} -> X end;
                  (key_hashes, Segment) ->
                       Other ! {key_hashes, self(), Segment},
                       receive {remote, X} -> X end
  
negative.code: local_compare(T1, T2) ->
      Remote = fun(get_bucket, {L, B}) ->
                       get_bucket(L, B, T2);
                  (start_exchange_level, {_Level, _Buckets}) ->
                       ok;
                  (start_exchange_segments, _Segments) ->
                       ok;
                  (key_hashes, Segment) ->
                       [{_, KeyHashes2}] = key_hashes(T2, Segment),
                       KeyHashes2
               end,
      AccFun = fun(Keys, KeyAcc) ->
                       Keys ++ KeyAcc
               end,
      compare2(T1, Remote, AccFun, []).
  
  -spec compare(hashtree(), remote_fun()) -> [keydiff()].
  compare(Tree, Remote) ->
  