anchor.diff:      ].
   
   normalize_test_() ->
  +    Normalize = fun(S) -> {N, _, _, _} = normalize(S), N end,
       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]))].
  +    [?_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)),
  
positive.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
      lists:map(fun(S) -> consolidate(S, Step div S#series.step) end, Series).
  
  
  normalize_stats([Hd | Tl]) ->
  
negative.code:                                           Step = lcm(Step0, S#series.step),
                                            {Start, End, Step}
                                    end, Acc, Tl),
      End = End0 + ((End0 - S) rem Step),
      {S, End, Step}.
  
  
  