open StdLabels module T = Translator let error = ref 0 let process (optional_line : string option) expected = match optional_line with | None -> () | Some line -> match T.Reader.process line with | Error result -> error := 1; Printf.fprintf stdout "%s : %s\n%!" line result | Ok response -> if String.equal response expected then () else ( error := 1; (Printf.fprintf stdout "%s : got %s / %s expected\n%!" line response expected) ) let rec repeat input expected = (* Attempt to read one line. *) let optional_line, continue = T.Lexer.line input in process optional_line expected; if continue then repeat input expected let tests = [ "abaca", "abaka" ; "abaissa", "abEsa" ; "abaissait", "abEsE(t)" ; "abaissant", "abEs@(t)" ; "abaissées", "abEse(s)" ; "abaissera", "abEs°Ra" ; "achat", "aSa(t)" ; "astiqué", "astike" ; "casait", "kazE(t)" ; "cassait", "kasE(t)" ; "chanci", "S@si" ; "chat", "Sa(t)" ; "chipant", "Sip@(t)" ; "pacha", "paSa" ; "péché", "peSe" ; "persai", "pERse" ; "asia", "azia" ; "ani", "ani" ; "anta", "@ta" ; "plat", "pLa(t)" ] let () = let () = List.iter tests ~f:(fun (input, expected) -> repeat (Lexing.from_string input) expected) in exit !error