anchor.diff:              timestamp,
               add_nonexisting_timeslots,
               reduce_timeslots,
  -            tester_empty_rrd
  +            tester_empty_rrd,
  +            tester_counter_rrd,
  +            tester_gauge_rrd
              ].
   suite() -> [ {timetrap, {seconds, 40}} ].
   
  
positive.code:     _ = [?equals(rrd:get_value_by_offset(R, Offset), undefined) || Offset <- Offsets],
      true.
  
  tester_empty_rrd(_Config) ->
      tester:test(?MODULE, prop_empty_rrd, 6, 1000, [{threads, 2}]).
  
negative.code:     _ = lists:foldl(fun(_, Old) -> rrd:add_now(1, Old) end, Init, lists:seq(1, 10000)),
      ok.
  
  %% @doc Converts a time (either a tuple as returned by erlang:now/0 or a number
  %%      representing the number of microseconds since epoch) to the number of
  %%      microseconds since epoch.
  -spec time2us(util:time() | rrd:internal_time()) -> rrd:internal_time().
  time2us({_, _, _} = Time) ->
      rrd:timestamp2us(Time);
  time2us(Time) ->
      Time.
  
  -spec prop_empty_rrd(SlotLength::rrd:timespan(), Count::1..10, Type::rrd:timeseries_type(),
                       StartTime::util:time() | rrd:internal_time(),
                       Offsets::[non_neg_integer(),...],
                       Times::[util:time() | rrd:internal_time(),...]) -> boolean().
  prop_empty_rrd(SlotLength, Count, Type, StartTime, Offsets, Times) ->
      R = rrd:create(SlotLength, Count, Type, StartTime),
      StartTime_us = time2us(StartTime),
      ?equals(rrd:get_slot_start(0, R), StartTime_us),
      ?equals(rrd:get_type(R), Type),
      ?equals(rrd:get_slot_length(R), SlotLength),
  