anchor.diff:       ?_assertEqual([pseudo_series([null,null])], evaluate_call(<<"integral">>, [[pseudo_series([null,null])]], 0, 0, 0))
       ].
   
  +sum_series_test_() ->
  +    Series1 = [pseudo_series([1,2,3])],
  +    Series2 = [pseudo_series([1,2,3], 20)],
  +    Series3 = [pseudo_series([1,1,2,2,3,3])],
  +    [?_assertEqual([pseudo_series([2,4,6])], evaluate_call(<<"sumSeries">>, [Series1, Series1], 0, 0, 0)),
  +     ?_assertEqual([pseudo_series([2,4,6])], evaluate_call(<<"sumSeries">>, [[Series1 ++ Series1]], 0, 0, 0)),
  +     ?_assertEqual([pseudo_series([2.0,4.0,6.0], 20)], evaluate_call(<<"sumSeries">>, [[Series2 ++ Series3]], 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])],
  
positive.code:     ].
  
  normalize_test_() ->
      Series = [pseudo_series([1,1,1], 20), pseudo_series([2,2,2,2,2,2])],
      [?_assertEqual([pseudo_series([1,1,1], 20), pseudo_series([2.0,2.0,2.0], 20)], normalize([Series]))].
  
  zip_lists_test_() ->
      [?_assertEqual([], zip_lists([], fun lists:sum/1)),
  
negative.code: 
  normalize(SeriesLst) ->
      Series = lists:flatten(SeriesLst),
      {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
      Ss = lists:map(fun(S) -> consolidate(S, Step div S#series.step) end, Series),
      {Ss, Start, End, Step}.
  
  
  normalize_stats([Hd | Tl]) ->
  