anchor.diff:  -include_lib("eunit/include/eunit.hrl").
   %% -endif.
   
  --type vertex() :: {any(), any()}.
  +-type vertex() :: {atom(), any(), number()}.
   
   -type rga_op() :: {addRight, vertex(), atom()} | {remove, vertex()}.
   
  --type rga_result() :: {ok, vertex(), rga()} | rga() .
  +-type rga_result() :: {ok, vertex(), rga()} | rga().
   
   -type rga() :: list().
   
  
positive.code: %% Private
  %% @doc recursively looks for the Vertex where the new element should be put to the right of.
  recursive_insert(_, Value, [], []) ->
      Inserted = {Value, os:timestamp()},
      {ok, Inserted, [Inserted]};
  recursive_insert(Vertex, Value, [Vertex | T], L) ->
      add_element({Value, os:timestamp()}, T, L ++ [Vertex]);
  recursive_insert(Vertex, Value, [H | T], L) ->
      recursive_insert(Vertex, Value, T, L ++ [H]).
  
  %% Private
  %% @doc the place for the insertion has been found, so now the TimeStamps are compared to see where to insert.
  add_element({Value, TimeStamp}, [{Value1, TimeStamp1} | T], L) ->
      case TimeStamp >= TimeStamp1 of
          true ->
              {ok, {Value, TimeStamp}, L ++ [{Value, TimeStamp}] ++ [{Value1, TimeStamp1} | T]};
          _ ->
              add_element({Value, TimeStamp}, T, L ++ [{Value1, TimeStamp1}])
      end;
  add_element(Insert, [], L) ->
      {ok, Insert, L ++ [Insert]}.
  
negative.code: 
  insert_returns_same_element_test() ->
      L = new(),
      {ok, V1, L1} = update({addRight, {ok, 0, 0}, 1}, L),
      ?assertEqual([V1], L1).
  
  consecutive_inserts_test() ->
      L = new(),
      {ok, V1, L1} = update({addRight, {ok, 0, 0}, 1}, L),
      {ok, V2, L2} = update({addRight, V1, 2}, L1),
      {ok, _, L3} = update({addRight, V2, 3}, L2),
      ?assertMatch([{ok, 1, _}, {ok, 2, _}, {ok, 3, _}], L3).
  
  insert_in_the_middle_test() ->
      L = new(),
      {ok, V1, L1} = update({addRight, {ok, 0, 0}, 1}, L),
      {ok, _, L2} = update({addRight, V1, 2}, L1),
      {ok, _, L3} = update({addRight, V1, 3}, L2),
      ?assertMatch([{ok, 1, _}, {ok, 3, _}, {ok, 2, _}], L3).
  
  remove_first_element_test() ->
      L = new(),
  