anchor.diff:  -spec entry_learning_and_filtering(node:node_type(), entry_type(), rt()) -> rt().
   entry_learning_and_filtering(Entry, Type, RT) ->
       IntermediateRT = entry_learning(Entry, Type, RT),
  -
  -    %% TODO DELETE ASSERT
  -    Ns = gb_trees:values(get_rt_tree(IntermediateRT)),
  -    Adjs = [tuple_to_list(adjacent_fingers(N)) || N <- Ns],
  -    Ids = lists:flatten(Adjs),
  -    false = lists:any(fun (none) -> true; (_) -> false end, [gb_trees:lookup(N,
  -                get_rt_tree(IntermediateRT)) || N <- Ids]),
   
       SizeOfRT = get_size(IntermediateRT),
       MaxEntries = maximum_entries(),
  
positive.code:     .
  
  % @doc Delete an entry from the routing table
  % TODO stale fingers, delete pointers
  -spec entry_delete(EntryKey :: key(), RT :: rt()) -> RefinedRT :: rt().
  entry_delete(EntryKey, RT) ->
      Tree = gb_trees:delete(EntryKey, get_rt_tree(RT)),
  
negative.code: %% @doc Creates an "empty" routing table.
  -spec empty(nodelist:neighborhood()) -> rt().
  empty(Neighbors) ->
      EmptyRT = add_source_entry(nodelist:node(Neighbors), #rt_t{}),
      remove_and_ping_entries(Neighbors, EmptyRT)
      .
  %% userdevguide-end rt_frtchord:empty
  
  