From 9376ca48ea92d8881eb60d78150845058902f662 Mon Sep 17 00:00:00 2001 From: Matthieu Dubuget Date: Mon, 11 Apr 2022 15:54:09 +0200 Subject: [PATCH] Seems to work --- dune-project | 7 ++++- lib/dune | 6 +++- lib/nombres.ml | 78 ++++++++++++++++++++++++++++++++++++------------- lib/nombres.mli | 8 +++++ nombres.opam | 2 ++ 5 files changed, 78 insertions(+), 23 deletions(-) create mode 100644 lib/nombres.mli diff --git a/dune-project b/dune-project index c36e81f..512a452 100644 --- a/dune-project +++ b/dune-project @@ -19,4 +19,9 @@ "\| - https://leconjugueur.lefigaro.fr/frlesnombres.php "\| - https://www.miakinen.net/vrac/nombres "\| - https://www.dcode.fr/ecriture-nombre-lettres -)) + ) + (depends + fmt + (qtest :with-test) + ) +) diff --git a/lib/dune b/lib/dune index 82a22d0..3a124c3 100644 --- a/lib/dune +++ b/lib/dune @@ -1,4 +1,8 @@ (library (name nombres) (public_name nombres) - (libraries fmt)) + (libraries fmt) + (inline_tests + (backend qtest.lib) + (executable + (flags :standard -warn-error -a -w -33)))) diff --git a/lib/nombres.ml b/lib/nombres.ml index b8cc54a..90a6dac 100644 --- a/lib/nombres.ml +++ b/lib/nombres.ml @@ -5,29 +5,29 @@ type options = | Belgique (* Septante Nonante *) | VVF (* Septante Huitante Nonante *) -let int_of_options = function - | Septante -> 0x1 - | Huitante -> 0x2 - | Nonante -> 0x8 - | Belgique -> 0x1 lor 0x8 - | VVF -> 0x1 lor 0x2 lor 0x8 +(* let int_of_options = function *) +(* | Septante -> 0x1 *) +(* | Huitante -> 0x2 *) +(* | Nonante -> 0x8 *) +(* | Belgique -> 0x1 lor 0x8 *) +(* | VVF -> 0x1 lor 0x2 lor 0x8 *) -type mode = [ `Belgique | `VVF | `France ] +(* type mode = [ `Belgique | `VVF | `France ] *) -let options_of_mode = function - | `Belgique -> [ Belgique ] - | `VVF -> [ VVF ] - | `France -> [] +(* let options_of_mode = function *) +(* | `Belgique -> [ Belgique ] *) +(* | `VVF -> [ VVF ] *) +(* | `France -> [] *) -let int_of_mode m = - m |> options_of_mode |> List.map int_of_options - |> ListLabels.fold_left ~f:( + ) ~init:0 +(* let int_of_mode m = *) +(* m |> options_of_mode |> List.map int_of_options *) +(* |> ListLabels.fold_left ~f:( + ) ~init:0 *) -let mode_of_int = function - | 0 -> `France - | 1 -> `Belgique - | 2 -> `VVF - | _ -> assert false +(* let mode_of_int = function *) +(* | 0 -> `France *) +(* | 1 -> `Belgique *) +(* | 2 -> `VVF *) +(* | _ -> assert false *) let opts options lst = List.exists (fun opt -> List.mem opt options) lst @@ -70,8 +70,7 @@ let nombre ?(options = []) n = and nombre_of_int ?(singular = false) ?(accu = []) current () = match current with | 0 -> - if accu <> [] then accu |> List.rev |> String.concat " " - else "zéro" + if accu <> [] then accu |> List.rev |> String.concat " " else "zéro" | n when n < 0 -> nombre_of_int ~accu (-n) () | n when n < 17 -> unroll (schu.(n) :: accu) | n when n mod 10 = 0 && n < 61 -> unroll (schd.(n / 10) :: accu) @@ -186,3 +185,40 @@ let nombre ?(options = []) n = in nombre_of_int n () + +(*$= nombre & ~printer:(fun x -> "\"" ^ x ^ "\"") + "zéro" (nombre 0) + "un" (nombre 1) + "deux" (nombre 2) + "trois" (nombre 3) + "trente et un" (nombre 31) + "trente-deux" (nombre 32) + "soixante-dix" (nombre 70) + "quatre-vingts" (nombre 80) + "quatre-vingt-un" (nombre 81) + "quatre-vingt-trois" (nombre 83) + "quatre-vingt-dix" (nombre 90) + "quatre-vingt-onze" (nombre 91) + "cent" (nombre 100) + "quatre cents" (nombre 400) + "quatre cent vingt et un" (nombre 421) + "mille" (nombre 1000) + "mille cent" (nombre 1100) + "mille deux cents" (nombre 1200) + "mille deux cent trente" (nombre (-1230)) + "mille deux cent trente" (nombre 1230) + "quatre-vingt mille" (nombre 80_000) + "deux cent mille" (nombre 200_000) + "deux cent mille trois cent quarante" (nombre 200_340) + "quatre-vingts millions" (nombre 80_000_000) + "quatre-vingts millions un" (nombre 80_000_001) + "deux cents millions" (nombre 200_000_000) + "deux cents millions trois cent quarante" (nombre 200_000_340) + "deux cents milliards" (nombre 200_000_000_000) + "deux cents billiards" (nombre 200_000_000_000_000_000) + "deux trillions" (nombre 2_000_000_000_000_000_000) + "deux trillions un" (nombre 2_000_000_000_000_000_001) + "deux trillions quatre cent mille un" (nombre 2_000_000_000_000_400_001) + "deux trillions quatre cents millions un" (nombre 2_000_000_000_400_000_001) + "deux trillions cent billions quatre cents millions un" (nombre 2_000_100_000_400_000_001) +*) diff --git a/lib/nombres.mli b/lib/nombres.mli new file mode 100644 index 0000000..cdb0129 --- /dev/null +++ b/lib/nombres.mli @@ -0,0 +1,8 @@ +type options = + | Septante + | Huitante + | Nonante + | Belgique (* Septante Nonante *) + | VVF (* Septante Huitante Nonante *) + +val nombre : ?options:options list -> int -> string diff --git a/nombres.opam b/nombres.opam index 7d1231d..11aded4 100644 --- a/nombres.opam +++ b/nombres.opam @@ -17,6 +17,8 @@ homepage: "https://github.com/ttamttam/nombres" bug-reports: "https://github.com/ttamttam/nombres/issues" depends: [ "dune" {>= "3.0"} + "fmt" + "qtest" {with-test} "odoc" {with-doc} ] build: [