let sequential_runner conf logger chooser test_cases =
  let shared = OUnitShared.create () in
  let rec iter state =
    match OUnitState.next_test_case conf logger state with
      | OUnitState.Finished, state ->
          OUnitState.get_results state
      | OUnitState.Next_test_case (test_path, test_fun, worker), state ->
          iter
            (OUnitState.test_finished conf
               (run_one_test conf logger shared test_path test_fun)
               worker state)
      | (OUnitState.Try_again | OUnitState.Not_enough_worker), _ ->
          assert false
  in
  let state =
    OUnitState.add_worker () (OUnitState.create conf chooser test_cases)
  in
  iter state