anchor.diff:  
   subtract(Time, Timers) ->
       [E#timer{interval=(I - Time)} || #timer{interval=I}=E <- Timers].
  +
  +-ifdef(TEST).
  +-include_lib("eunit/include/eunit.hrl").
  +-define(timer, etorrent_timer).
  +
  +assertMessage(Msg) ->
  +    receive
  +        Msg ->
  +            ?assert(true);
  +        Other ->
  +            ?assertEqual(Msg, Other)
  +        after 0 ->
  +            ?assertEqual(Msg, make_ref())
  +    end.
  +
  +
  +instant_send_test() ->
  +    {ok, Pid} = ?timer:start_link(instant),
  +    Msg = make_ref(),
  +    Ref = ?timer:send_after(Pid, 1000, self(), Msg),
  +    assertMessage(Msg).
  +
  +
  +instant_timeout_test() ->
  +    {ok, Pid} = ?timer:start_link(instant),
  +    Msg = make_ref(),
  +    Ref = ?timer:start_timer(Pid, 1000, self(), Msg),
  +    assertMessage({timeout, Ref, Msg}).
  +
  +step_and_fire_test() ->
  +    {ok, Pid} = ?timer:start_link(queue),
  +    ?timer:send_after(Pid, 1000, self(), a),
  +    Ref = ?timer:start_timer(Pid, 3000, self(), b),
  +    ?timer:send_after(Pid, 6000, self(), c),
  +
  +    ?assertEqual(1000, ?timer:step(Pid)),
  +    ?assertEqual(0, ?timer:step(Pid)),
  +    ?assertEqual(1, ?timer:fire(Pid)),
  +    assertMessage(a),
  +
  +    ?assertEqual(2000, ?timer:step(Pid)),
  +    ?assertEqual(0, ?timer:step(Pid)),
  +    ?assertEqual(1, ?timer:fire(Pid)),
  +    assertMessage({timeout, Ref, b}),
  +
  +    ?assertEqual(3000, ?timer:step(Pid)),
  +    ?assertEqual(0, ?timer:step(Pid)),
  +    ?assertEqual(1, ?timer:fire(Pid)),
  +    assertMessage(c).
  +
  +
  +-endif.
  
positive.code: start_timer(Server, Time, Dest, Msg) ->
      case Server of
          native -> erlang:start_timer(Time, Dest, Msg);
          Server -> gen_server:call(Server, {start_timer, Time, Dest, Msg})
      end.
  
  
  
negative.code: delete_timer(Timer, Timers) ->
      #timer{reference=Ref} = Timer,
      lists:keydelete(Ref, #timer.reference, Timers).
  
  delete_timers(List, Timers) ->
      lists:foldl(fun(Timer, Acc) ->
          delete_timer(Timer, Acc)
      end, Timers, List).
  
  min_interval(Timers) ->
      %% Assume that timers are sorted by interval.
  