anchor.diff:                  riak_kv_lru:put(C, BKey2, X, X) end,
       [F(X) || X <- lists:seq(1, 5)],
       riak_kv_lru:clear_bkey(C, BKey2),
  -    notfound = riak_kv_lru:fetch(C, BKey1, 3),
  -    3 = riak_kv_lru:fetch(C, BKey2, 3).
  +    notfound = riak_kv_lru:fetch(C, BKey2, 3),
  +    3 = riak_kv_lru:fetch(C, BKey1, 3),
  +    riak_kv_lru:destroy(C).
  +
  +zero_size_test() ->
  +    BKey = {<<"test">>, <<"foo">>},
  +    C = riak_kv_lru:new(0),
  +    ok = riak_kv_lru:put(C, BKey, 1, 1),
  +    notfound = riak_kv_lru:fetch(C, BKey, 1),
  +    0 = riak_kv_lru:size(C),
  +    riak_kv_lru:destroy(C).
   
   -endif.
  
positive.code:     Cache = ets:new(list_to_atom(CacheName), [private, {keypos, 2}]),
      #kv_lru{max_size=Size, age_idx=Idx, bucket_idx=BucketIdx, cache=Cache}.
  
  put(#kv_lru{max_size=MaxSize, age_idx=Idx, bucket_idx=BucketIdx,
              cache=Cache}, BKey, Key, Value) ->
      remove_existing(Idx, BucketIdx, Cache, BKey, Key),
      insert_value(Idx, BucketIdx, Cache, BKey, Key, Value),
      prune_oldest_if_needed(MaxSize, Idx, BucketIdx, Cache).
  
  fetch(#kv_lru{cache=Cache}=LRU, BKey, Key) ->
      case fetch_value(Cache, BKey, Key) of
          notfound ->
  
negative.code:             Value
      end.
  
  remove(#kv_lru{max_size=0}, _BKey, _Key) ->
      ok;
  remove(#kv_lru{age_idx=Idx, bucket_idx=BucketIdx, cache=Cache}, BKey, Key) ->
      remove_existing(Idx, BucketIdx, Cache, BKey, Key),
      ok.
  
  size(#kv_lru{max_size=0}) ->
      0;
  size(#kv_lru{age_idx=Idx}) ->
      ets:info(Idx, size).
  
  max_size(#kv_lru{max_size=MaxSize}) ->
      MaxSize.
  
  clear(#kv_lru{max_size=0}) ->
      ok;
  clear(#kv_lru{age_idx=Idx, cache=Cache}) ->
      ets:delete_all_objects(Idx),
      ets:delete_all_objects(Cache),
      ok.
  
  clear_bkey(#kv_lru{max_size=0}, _BKey) ->
      ok;
  clear_bkey(#kv_lru{bucket_idx=BucketIdx}=LRU, BKey) ->
      R = ets:match(BucketIdx, {BKey, '$1'}),
      case R of
  