+ begin
+ let print_endline s = print_endline_to_channel (Lazy.force och) s in
+ if not eterm_ok then begin
+ print_endline "### Term mismatch ###";
+ print_endline "# expected:";
+ print_endline (" " ^ expected.eterm);
+ print_endline "# found:";
+ print_endline (" " ^ found.eterm);
+ end;
+ if not eenv_ok then begin
+ print_endline "### Disambiguation environment mismatch ###";
+ print_endline "# expected:";
+ print_endline (" " ^ expected.eenv);
+ print_endline "# found:";
+ print_endline (" " ^ found.eenv);
+ end;
+ if not emetasenv_ok then begin
+ print_endline "### Metasenv mismatch ###";
+ print_endline "# expected:";
+ print_endline (" " ^ expected.emetasenv);
+ print_endline "# found:";
+ print_endline (" " ^ found.emetasenv);
+ end;
+ if not etype_ok then begin
+ print_endline "### Type mismatch ###";
+ print_endline "# expected:";
+ print_endline (" " ^ expected.etype);
+ print_endline "# found:";
+ print_endline (" " ^ found.etype);
+ end;
+ if expected.ereduced <> found.ereduced then begin
+ print_endline "### Reduced term mismatch ###";
+ print_endline "# expected:";
+ print_endline (" " ^ expected.ereduced);
+ print_endline "# found:";
+ print_endline (" " ^ found.ereduced);
+ end;
+ end;
+ outcome
+
+let as_expected report_fname expected found =
+ (if Sys.file_exists report_fname then Sys.remove report_fname) ;
+ let och = lazy (open_out report_fname) in
+ let print_endline s = print_endline_to_channel (Lazy.force och) s in
+ let print_interpretation test =
+ print_endline "## Interpretation dump ##";
+ print_endline "# Disambiguation environment:";
+ print_endline test.eenv;
+ print_endline "# Metasenv:";
+ print_endline test.emetasenv;
+ print_endline "# Term:";
+ print_endline test.eterm;
+ print_endline "# Type:";
+ print_endline test.etype;
+ print_endline "# Reduced term:";
+ print_endline test.ereduced;
+ in
+ let rec aux =
+ function
+ [],[] -> true
+ | ex::extl, fo::fotl ->
+ let outcome1 = as_expected_one och ex fo in
+ let outcome2 = aux (extl,fotl) in
+ outcome1 && outcome2
+ | [],found ->
+ print_endline "### Too many interpretations found:" ;
+ List.iter print_interpretation found;
+ false
+ | expected,[] ->
+ print_endline "### Too few interpretations found:" ;
+ List.iter print_interpretation expected;
+ false