anchor.diff:    [#card{value=?tarabish_ACE, suit=1}|Rest] = Sorted,
     [#card{value=?tarabish_KING, suit=1}|_Rest2] = Rest.
   
  +split_runs_test_() ->
  +  M = fun (Value) -> #card{value=Value} end,
  +  ML = fun (VList) -> lists:map(M, VList) end,
  +
  +  [
  +    ?_assertEqual([ML([12, 11, 10]), ML([8, 7, 6])],
  +      split_runs(ML([14, 12, 11, 10, 8, 7, 6]))),
  +    ?_assertEqual([ML([14, 13, 12, 11]), ML([9, 8, 7, 6])],
  +      split_runs(ML([14, 13, 12, 11, 9, 8, 7, 6]))),
  +    ?_assertEqual([],
  +      split_runs(ML([14, 13, 11, 10, 8, 7])))
  +  ].
  +
   % J, Q, K, A --> 11, 12, 13, 14
   score_suit_test_() ->
     M = fun (Value) -> #card{value=Value} end,
  
positive.code: make_best_run(Type, High, Score) ->
    #best_run{type=Type, high=High, score=Score, trump=false}.
  
  % The last run, if it was a fifty, would be counted already
  % Count the last run, it's the best twenty:
  score_suit(_ExpectedValue, FirstValue, [], 3, none, _High, Score) ->
  
negative.code:   Runs = lists:map(fun (Hand) -> new_run_record(Hand, TrumpSuit) end, Hands),
    Runs.
  
  % TODO: could use split_runs before score_suit to make it cleaner
  % TODO: move score out of best_run, add new record with cards
  new_run_record(Cards, TrumpSuit) ->
    SortedCards = sort_cards_by_value(Cards),
    SplitBySuit = split_by_suit(SortedCards),
    {CardsBySuit, Suits} = lists:unzip(SplitBySuit),
  
    _CardsToShow = lists:flatten(lists:foldl(fun lists:append/2,
        lists:map(fun split_runs/1, CardsBySuit))),
  
    % {suit, #best_fun{}}
    Runs = lists:zip(Suits, lists:map(fun score_suit/1, CardsBySuit)),
  
    Folder = fun({Suit, Run}, Acc) -> fold_runs(Suit, Run, Acc, TrumpSuit) end,
  