let test_unif         (unifier : bool -> Types_unify.term -> Types_unify.term -> Types_unify.t_subst list -> Types_unify.t_subst list) 
                (tab : (int * string) list) (str : string) (u : Types_unify.term) (v : Types_unify.term) (sub : Types_unify.t_subst) :  Types_unify.t_subst list =
  let () = print_string ("\n\n\n===== "^str^
             " ==========================================\n"); flush stdout
  in
  let t_start = Sys.time () in
  let subs = unifier true u v [sub] in
  let t_stop = Sys.time () in
  let t_diff = t_stop -. t_start in
  let size = string_of_int (List.length subs) in
  let () = print_string ("number of unifiers: "^size^"\n"in
  let () = print_string ("time needed: "^(if t_diff=0. then "<0.01"
                                          else string_of_float t_diff)^"s\n"in
  (* debug ---> *)
  let () = print_string (
        "std unif alg: "^(if !light_unif then "unif_light" else "unif_cmp")^
        "\n\n==== given problem ===="^
        "\nu = "^(str_term_dbg tab u)^
        "\nv = "^(str_term_dbg tab v)^
        "\n---- sub ----\n"^(str_sub_dbg tab sub)^
        "\n===== solution(s) =========================================\n"^
        (str_subs_dbg tab subs size)^
        "\n===== solution(s) clot ====================================\n"^
        (str_subs_clot_dbg tab subs size u v)^"\n")
  in
  (* <--- debug *)
  let () = print_string (
        "===== /"^str^
        " =========================================\n\n")
  in
  flush stdout; subs