let perform_test conf logger runner chooser test =
let rec flatten_test path acc =
function
| TestCase(l, f) ->
(path, l, f) :: acc
| TestList (tests) ->
fold_lefti
(fun acc t cnt ->
flatten_test
((ListItem cnt)::path)
acc t)
acc tests
| TestLabel (label, t) ->
flatten_test ((Label label)::path) acc t
in
let test_cases =
List.rev (flatten_test [] [] test)
in
runner conf logger chooser test_cases