diff --git a/src/plugins/wp/Cache.ml b/src/plugins/wp/Cache.ml index d08034e93ca7bd84a44ba06bb4d5b340ad474e75..65da7ca4b528daae67654b0f7d37fdcc9eb24103 100644 --- a/src/plugins/wp/Cache.ml +++ b/src/plugins/wp/Cache.ml @@ -136,6 +136,11 @@ module MODE = WpContext.StaticGenerator(Datatype.Unit) let get_mode = MODE.get let set_mode m = MODE.clear () ; Wp_parameters.Cache.set (mode_name m) +let is_updating () = + match MODE.get () with + | NoCache | Replay | Offline -> false + | Update | Rebuild | Cleanup -> true + let task_hash wpo drv prover task = lazy begin diff --git a/src/plugins/wp/Cache.mli b/src/plugins/wp/Cache.mli index 39af510514147e3d227b1a69b7b02ca38789e2b9..85130ef5bbf06c648b9bd4bd09b4dd50ed1735c9 100644 --- a/src/plugins/wp/Cache.mli +++ b/src/plugins/wp/Cache.mli @@ -30,6 +30,8 @@ val get_hits : unit -> int val get_miss : unit -> int val get_removed : unit -> int +val is_updating : unit -> bool + val cleanup_cache : unit -> unit type runner = diff --git a/src/plugins/wp/VCS.ml b/src/plugins/wp/VCS.ml index 1a855c3bbbe474b41d5fb2df7d0fc903235b27e0..50507c33c3974e967750caf41b168e317e152ccb 100644 --- a/src/plugins/wp/VCS.ml +++ b/src/plugins/wp/VCS.ml @@ -317,31 +317,35 @@ let pp_result fmt r = | Stepout -> Format.fprintf fmt "Step limit%a" pp_perf r | Timeout -> Format.fprintf fmt "Timeout%a" pp_perf r -let pp_cache_miss fmt st prover r = - let qualified = - match prover with - | Qed | Tactical -> true - | NativeAltErgo | NativeCoq -> r.verdict <> Timeout - | Why3 _ -> r.cached || r.prover_time < Rformat.epsilon - in - if not qualified && Wp_parameters.has_dkey dkey_shell then - Format.fprintf fmt "%s%a (unqualified)" st pp_perf r +let is_qualified prover result = + match prover with + | Qed | Tactical -> true + | NativeAltErgo | NativeCoq -> result.verdict <> Timeout + | Why3 _ -> result.cached || result.prover_time < Rformat.epsilon + +let pp_cache_miss fmt st updating prover result = + if not updating + && not (is_qualified prover result) + && Wp_parameters.has_dkey dkey_shell + then + Format.fprintf fmt "%s%a (missing cache)" st pp_perf result else - Format.pp_print_string fmt (if is_valid r then "Valid" else "Unsuccess") + Format.pp_print_string fmt @@ + if is_valid result then "Valid" else "Unsuccess" -let pp_result_qualif prover fmt r = +let pp_result_qualif ?(updating=true) prover result fmt = if Wp_parameters.has_dkey dkey_shell then - match r.verdict with + match result.verdict with | NoResult -> Format.pp_print_string fmt "No Result" | Computing _ -> Format.pp_print_string fmt "Computing" | Invalid -> Format.pp_print_string fmt "Invalid" - | Failed -> Format.fprintf fmt "Failed@ %s" r.prover_errmsg - | Valid -> pp_cache_miss fmt "Valid" prover r - | Unknown -> pp_cache_miss fmt "Unsuccess" prover r - | Timeout -> pp_cache_miss fmt "Timeout" prover r - | Stepout -> pp_cache_miss fmt "Stepout" prover r + | Failed -> Format.fprintf fmt "Failed@ %s" result.prover_errmsg + | Valid -> pp_cache_miss fmt "Valid" updating prover result + | Unknown -> pp_cache_miss fmt "Unsuccess" updating prover result + | Timeout -> pp_cache_miss fmt "Timeout" updating prover result + | Stepout -> pp_cache_miss fmt "Stepout" updating prover result else - pp_result fmt r + pp_result fmt result let compare p q = let rank = function diff --git a/src/plugins/wp/VCS.mli b/src/plugins/wp/VCS.mli index 0e869ebea1458ef899c8e8ea6ff4b563cf224644..54b34f23ef850f4e974c4a2e18034c035d510ec4 100644 --- a/src/plugins/wp/VCS.mli +++ b/src/plugins/wp/VCS.mli @@ -119,7 +119,8 @@ val configure : result -> config val autofit : result -> bool (** Result that fits the default configuration *) val pp_result : Format.formatter -> result -> unit -val pp_result_qualif : prover -> Format.formatter -> result -> unit +val pp_result_qualif : ?updating:bool -> prover -> result -> + Format.formatter -> unit val compare : result -> result -> int (* best is minimal *) val merge : result -> result -> result diff --git a/src/plugins/wp/register.ml b/src/plugins/wp/register.ml index 6cb8afbc7c0ed22294ae6d0c2bec466ce0d261b6..58c0b6ab08ba24e487a3d5de3182d46d467661a9 100644 --- a/src/plugins/wp/register.ml +++ b/src/plugins/wp/register.ml @@ -391,19 +391,21 @@ let results g = (Wpo.get_results g) let do_wpo_failed goal = + let updating = Cache.is_updating () in match results goal with | [p,r] -> - Wp_parameters.result "[%a] Goal %s : %a%a" + Wp_parameters.result "[%a] Goal %s : %t%a" VCS.pp_prover p (Wpo.get_gid goal) - (VCS.pp_result_qualif p) r pp_warnings goal + (VCS.pp_result_qualif ~updating p r) pp_warnings goal | pres -> Wp_parameters.result "[Failed] Goal %s%t" (Wpo.get_gid goal) begin fun fmt -> pp_warnings fmt goal ; List.iter (fun (p,r) -> - Format.fprintf fmt "@\n%8s: @[<hv>%a@]" - (VCS.title_of_prover p) (VCS.pp_result_qualif p) r + Format.fprintf fmt "@\n%8s: @[<hv>%t@]" + (VCS.title_of_prover p) + (VCS.pp_result_qualif ~updating p r) ) pres ; end @@ -416,11 +418,12 @@ let do_wpo_smoke status goal = (Wpo.get_gid goal) begin fun fmt -> pp_warnings fmt goal ; + let updating = Cache.is_updating () in List.iter (fun (p,r) -> - Format.fprintf fmt "@\n%8s: @[<hv>%a@]" + Format.fprintf fmt "@\n%8s: @[<hv>%t@]" (VCS.title_of_prover p) - (VCS.pp_result_qualif p) r + (VCS.pp_result_qualif ~updating p r) ) (results goal) ; end @@ -453,10 +456,11 @@ let do_wpo_success goal s = VCS.pp_prover script (Wpo.get_gid goal) | Some prover -> let result = Wpo.get_result goal prover in + let updating = Cache.is_updating () in Wp_parameters.feedback ~ontty:`Silent - "[%a] Goal %s : %a" + "[%a] Goal %s : %t" VCS.pp_prover prover (Wpo.get_gid goal) - (VCS.pp_result_qualif prover) result + (VCS.pp_result_qualif ~updating prover result) end let do_report_time fmt s = diff --git a/src/plugins/wp/tests/wp/stmtcompiler_test.ml b/src/plugins/wp/tests/wp/stmtcompiler_test.ml index 7d61b014274483fc8f0d3e8782735b9a3c84b10d..07e77bf23093eb5c0ec694eecf32ac30f6317f15 100644 --- a/src/plugins/wp/tests/wp/stmtcompiler_test.ml +++ b/src/plugins/wp/tests/wp/stmtcompiler_test.ml @@ -28,8 +28,8 @@ let run () = let spawn goal = let result _ prv res = - Format.printf "[%a] %a@.@\n" - VCS.pp_prover prv (VCS.pp_result_qualif prv) res + Format.printf "[%a] %t@.@\n" + VCS.pp_prover prv (VCS.pp_result_qualif prv res) in let server = ProverTask.server () in Prover.spawn goal ~delayed:true ~result provers; diff --git a/src/plugins/wp/tests/wp/stmtcompiler_test_rela.ml b/src/plugins/wp/tests/wp/stmtcompiler_test_rela.ml index 513c205deeacdeef55bdc3c3f05713a9800eb399..f38450c4501df76ed0fdbe6cbebbee247a3431d8 100644 --- a/src/plugins/wp/tests/wp/stmtcompiler_test_rela.ml +++ b/src/plugins/wp/tests/wp/stmtcompiler_test_rela.ml @@ -27,8 +27,8 @@ let run () = let spawn goal = let result _ prv res = - Format.printf "[%a] %a@.@\n" - VCS.pp_prover prv (VCS.pp_result_qualif prv) res + Format.printf "[%a] %t@.@\n" + VCS.pp_prover prv (VCS.pp_result_qualif prv res) in let server = ProverTask.server () in Prover.spawn goal ~delayed:true ~result provers; diff --git a/src/plugins/wp/wpo.ml b/src/plugins/wp/wpo.ml index 1e5cc14b71bfb9a0432824d9cc734f81d514c387..0574facb577f4e77dfa37fbe2ebb334da8594cbc 100644 --- a/src/plugins/wp/wpo.ml +++ b/src/plugins/wp/wpo.ml @@ -283,8 +283,8 @@ struct List.iter (fun (prover,result) -> if result.verdict <> NoResult then - Format.fprintf fmt "Prover %a returns %a@\n" - pp_prover prover (pp_result_qualif prover) result + Format.fprintf fmt "Prover %a returns %t@\n" + pp_prover prover (pp_result_qualif prover result) ) results ; end @@ -347,9 +347,9 @@ struct List.iter (fun (prover,result) -> if result.verdict <> NoResult then - Format.fprintf fmt "Prover %a returns %a@\n" + Format.fprintf fmt "Prover %a returns %t@\n" pp_prover prover - (pp_result_qualif prover) result + (pp_result_qualif prover result) ) results ; end