anchor.diff:  
   normalize(SeriesLst) ->
       Series = lists:flatten(SeriesLst),
  -    {_Start, _End, Step} = normalize_stats(Series),
  +    {Start, End, Step} = normalize_stats(Series),
       % TODO: properly handle start/stop
       % TODO: this is sufficient for now as most of the time start/end are the same over all series
  -    lists:map(fun(S) -> consolidate(S, Step div S#series.step) end, Series).
  +    Ss = lists:map(fun(S) -> consolidate(S, Step div S#series.step) end, Series),
  +    {Ss, Start, End, Step}.
   
   
   normalize_stats([Hd | Tl]) ->
  
positive.code:      ?_assertEqual([pseudo_series([null,null])], evaluate_call(<<"integral">>, [[pseudo_series([null,null])]], 0, 0, 0))
      ].
  
  offset_to_zero_test_() ->
      Series = [pseudo_series([102, 101, 104, 101, 100, 111])],
      Expected = [pseudo_series([2, 1, 4, 1, 0, 11])],
  
negative.code:     lists:map(fun(S) ->
                        S#series{values=process_series_values(S#series.values, fun safe_square_root/1)}
                end, Series);
  
  % sumSeries
  evaluate_call(<<"sumSeries">>, Series, _From, _Until, _Now) ->
      {Norm, _Start, _End, _Step} = normalize(Series),
      zip_series(Norm, fun safe_sum/1);
  
  evaluate_call(Unknown, _Args, _From, _Until, _Now) ->
      lager:error("unknown function call ~p or invalid arguments", [Unknown]),
  