1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
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)"
; "aiment", "Em°(t)"
; "anniversaire", "anivERsER°"
; "anta", "@ta"
; "anneaux", "ano(s)"
; "arachide", "aRaSid°"
; "as", "a(s)"
; "asia", "azia"
; "astiqué", "astike"
; "autruche", "otRyS°"
; "besoin", "b°zw5"
; "beaumont", "bom§(t)"
; "bisoux", "bizu(s)"
; "casait", "kazE(t)"
; "cassait", "kasE(t)"
; "célibat", "seLiba(t)"
; "chanci", "S@si"
; "chat", "Sa(t)"
; "chipant", "Sip@(t)"
; "co|incidant", "ko5sid@(t)"
; "croire", "kR[wa]R°"
; "ébrouas", "ebRua(s)"
; "em|magasinais","@magazinE(s)"
; "extra", "EkstRa"
; "famille", "famij°"
; "loin", "Lw5"
; "groin", "gR[w5]"
; "hirondelle", "iR§dEL°"
; "joues", "Zu°(s)"
; "libellule", "LibELyL°"
; "main", "m5"
; "merci", "mERsi"
; "ménageais", "menaZE(s)"
; "neige", "nEZ°"
; "neuf", "n9f"
; "nerf", "nE(R)"
; "pacha", "paSa"
; "péché", "peSe"
; "persai", "pERsE"
; "personne", "pERson°"
; "plan", "pL@"
; "plat", "pLa(t)"
; "platte", "pLat°"
; "soin", "sw5"
; "souris", "suRi(s)"
; "toiture", "twatyR°"
; "trois", "tR[wa](s)"
; "veillons", "vEj§(s)"
; "vil|le", "viLL°"
; "wèb", "wEb"
]
let () =
let () = List.iter tests
~f:(fun (input, expected) ->
repeat (Lexing.from_string input) expected)
in
exit !error
|