anchor.diff:  
   
   %% @private
  -handle_call({add, {Key, _Value} = Entry}, _From, Cache) ->
  +handle_call({add, {Key, _Value} = Entry}, From, Cache) ->
       case ets:lookup(Cache#cache.items, Key) of
           [] ->
               %% add new item
  
positive.code:             EvictList = push_front(Cache#cache.evict_list, Entry),
              Cache1 = Cache#cache{evict_list=EvictList},
              %% check if the size is not exceeded
              {Evict, Cache2} = if
                                        length(EvictList) > Cache#cache.size ->
                                            {true, remove_oldest1(Cache1)};
                                        true ->
                                            {false, Cache1}
                                    end,
              {reply, Evict, Cache2};
          [{_Key, _Value}] ->
              %% add new value
              true = ets:insert(Cache#cache.items, Entry),
              %% move old entry to front
              EvictList = move_front(Cache#cache.evict_list, Entry),
              {reply, false, Cache#cache{evict_list=EvictList}}
      end;
  
  
  
negative.code: handle_call({contains, Key}, _From, Cache) ->
      {reply, ets:member(Cache#cache.items, Key), Cache};
  
  handle_call({contains_or_add, Entry}, From, Cache) ->
      case ets:insert_new(Cache#cache.items, Entry) of
          true ->
              EvictList = push_front(Cache#cache.evict_list, Entry),
              Cache1 = Cache#cache{evict_list=EvictList},
              % check if the size is not exceeded
              if
                  length(EvictList) > Cache#cache.size ->
                      gen_server:reply(From, {false, true}),
                      {noreply, remove_oldest1(Cache1)};
                  true ->
                      {reply, {false, false}, Cache1}
              end;
          false ->
              {reply, {true, false}, Cache}
      end;
  