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 () (* (Printf.fprintf stdout "%s : %s OK \n%!" line expected) *) 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)" ; "ani", "ani" ; "anta", "@ta" ; "arachide", "aRaSid°" ; "as", "a(s)" ; "asia", "azia" ; "astiqué", "astike" ; "autruche", "otRyS°" ; "casait", "kazE(t)" ; "cassait", "kasE(t)" ; "chanci", "S@si" ; "chat", "Sa(t)" ; "chipant", "Sip@(t)" ; "co|incidant", "ko5sid@(t)" ; "croire", "kRwaR°" ; "ébrouas", "ebRua(s)" ; "loin", "Lw5" ; "groin", "gRw5" ; "pacha", "paSa" ; "péché", "peSe" ; "persai", "pERsE" ; "plan", "pL@" ; "plat", "pLa(t)" ; "platte", "pLat°" ; "toiture", "twatyR°" ; "trois", "tRwa(s)" ; "wèb", "wE(b)" ] let () = let () = List.iter tests ~f:(fun (input, expected) -> repeat (Lexing.from_string input) expected) in exit !error