From 3133538403d43df455c414b35a4a069afe6a6008 Mon Sep 17 00:00:00 2001 From: swrup Date: Tue, 3 Mar 2026 10:45:39 +0100 Subject: [PATCH] add amount compare --- src/amount.ml | 8 ++++++++ src/amount.mli | 2 ++ src/denomination.ml | 11 +---------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/amount.ml b/src/amount.ml index 7ff74514..696ed9af 100644 --- a/src/amount.ml +++ b/src/amount.ml @@ -47,6 +47,14 @@ let make ~sign ~currency ~value ~fraction = let currency = String.uppercase_ascii currency in Ok { sign; currency; value; fraction } +let compare a b = + match String.equal a.currency b.currency with + | false -> Fmt.failwith "amount compare on different currencies" + | true -> ( + match Int64.unsigned_compare a.value b.value with + | 0 -> Int32.unsigned_compare a.fraction b.fraction + | n -> n) + module Parser = struct open Angstrom diff --git a/src/amount.mli b/src/amount.mli index 7ffeba71..75b6773f 100644 --- a/src/amount.mli +++ b/src/amount.mli @@ -16,6 +16,8 @@ val make : fraction:Int32.t -> (t, string) result +(* fail on differents currencies *) +val compare : t -> t -> int val pp : Format.formatter -> t -> unit val to_string : t -> string val of_string : string -> (t, string) result diff --git a/src/denomination.ml b/src/denomination.ml index fc5e1545..5a07ae5d 100644 --- a/src/denomination.ml +++ b/src/denomination.ml @@ -99,16 +99,7 @@ let make_denom_group_sorted denominations = let open RsaDenomGroup in let open RsaDenom in let cmp_denom b a = Timestamp.compare a.stamp_start b.stamp_start in - let cmp_group = - let cmp_amount a b = - (* TODO amount *) - let open Amount in - match Int64.unsigned_compare a.value b.value with - | 0 -> Int32.unsigned_compare a.fraction b.fraction - | n -> n - in - fun (Rsa a) (Rsa b) -> cmp_amount a.value b.value - in + let cmp_group = fun (Rsa a) (Rsa b) -> Amount.compare a.value b.value in let l = l |> List.map