Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
result.ml
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
(**************************************************************************) (* *) (* This file is part of the why3find. *) (* *) (* Copyright (C) 2022-2024 *) (* CEA (Commissariat à l'énergie atomique et aux énergies *) (* alternatives) *) (* *) (* you can redistribute it and/or modify it under the terms of the GNU *) (* Lesser General Public License as published by the Free Software *) (* Foundation, version 2.1. *) (* *) (* It is distributed in the hope that it will be useful, *) (* but WITHOUT ANY WARRANTY; without even the implied warranty of *) (* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) (* GNU Lesser General Public License for more details. *) (* *) (* See the enclosed LICENSE.md for details. *) (* *) (**************************************************************************) (* -------------------------------------------------------------------------- *) (* --- Prover Result --- *) (* -------------------------------------------------------------------------- *) type t = | NoResult | Failed | Unknown of float | Timeout of float | Valid of float let merge a b = match a,b with | NoResult,c | c,NoResult -> c | Failed,c | c,Failed -> c | Valid ta , Valid tb -> Valid (min ta tb) | Valid _ , (Unknown _ | Timeout _) -> a | (Unknown _ | Timeout _) , Valid _ -> b | Unknown ta , Unknown tb -> Unknown (min ta tb) | Unknown _ , Timeout _ -> a | Timeout _ , Unknown _ -> b | Timeout ta , Timeout tb -> Timeout (max ta tb) let map f = function | NoResult -> NoResult | Failed -> Failed | Valid t -> Valid (f t) | Unknown t -> Unknown (f t) | Timeout t -> Timeout (f t) let pp_result fmt = function | NoResult -> Format.pp_print_string fmt "No Result" | Failed -> Format.pp_print_string fmt "Failed" | Unknown t -> Format.fprintf fmt "Unknown (%a)" Utils.pp_time t | Timeout t -> Format.fprintf fmt "Timeout (%a)" Utils.pp_time t | Valid t -> Format.fprintf fmt "Valid (%a)" Utils.pp_time t let pp_verdict fmt = function | NoResult -> Format.pp_print_string fmt "No Result" | Failed -> Format.pp_print_string fmt "Failed" | Unknown _ -> Format.pp_print_string fmt "Unknown" | Timeout _ -> Format.pp_print_string fmt "Timeout" | Valid _ -> Format.pp_print_string fmt "Valid" let of_json (js : Json.t) = let open Json in let status = jfield "status" js |> jstring in let time = jfield "time" js |> jfloat in match status with | "Failed" -> Failed | "Unknown" -> Unknown time | "Timeout" -> Timeout time | "Valid" -> Valid time | _ -> NoResult let to_json (r : t) : Json.t = let status st = `Assoc [ "status", `String st ] in let timed st t = `Assoc [ "status", `String st ; "time", `Float t ] in match r with | NoResult -> status "NoResult" | Failed -> status "Failed" | Unknown t -> timed "Unknown" t | Timeout t -> timed "Timeout" t | Valid t -> timed "Valid" t (* -------------------------------------------------------------------------- *) (* --- Promotion --- *) (* -------------------------------------------------------------------------- *) let crop ~timeout result = match result with | NoResult -> None | Failed | Unknown _ -> Some result | Timeout t -> if timeout <= t then Some result else None | Valid t -> if t <= timeout then Some result else Some (Timeout timeout)