Skip to content

Commit 736f20d

Browse files
alleystoughtonstrub
authored andcommitted
Added prover quorum to project files and command line.
1 parent e2d5000 commit 736f20d

5 files changed

Lines changed: 35 additions & 3 deletions

File tree

src/ec.ml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,11 @@ let main () =
249249
|> List.map (fun prover -> ["-p"; prover])
250250
|> List.flatten in
251251

252+
let quorum =
253+
input.runo_provers.prvo_quorum
254+
|> omap (fun i -> ["-quorum"; string_of_int i])
255+
|> odfl [] in
256+
252257
let pragmas =
253258
input.runo_provers.prvo_pragmas
254259
|> List.map (fun pragmas -> ["-pragmas"; pragmas])
@@ -305,9 +310,9 @@ let main () =
305310

306311
List.flatten [
307312
maxjobs; timeout; cpufactor; ppwidth;
308-
provers; pragmas; checkall ; profile;
309-
iterate; why3srv; why3 ; reloc ;
310-
noevict; boot ; idirs ;
313+
provers; quorum ; pragmas ; checkall;
314+
profile; iterate; why3srv ; why3 ;
315+
reloc ; noevict; boot ; idirs ;
311316
]
312317
in
313318

@@ -584,6 +589,7 @@ let main () =
584589
prvo_timeout = None;
585590
prvo_cpufactor = None;
586591
prvo_provers = None;
592+
prvo_quorum = None;
587593
prvo_pragmas = [];
588594
prvo_ppwidth = None;
589595
prvo_checkall = false;
@@ -734,6 +740,7 @@ let main () =
734740
EcCommands.cm_cpufactor = odfl 1 (state.prvopts.prvo_cpufactor);
735741
EcCommands.cm_nprovers = odfl 4 (state.prvopts.prvo_maxjobs);
736742
EcCommands.cm_provers = state.prvopts.prvo_provers;
743+
EcCommands.cm_quorum = state.prvopts.prvo_quorum;
737744
EcCommands.cm_profile = state.prvopts.prvo_profile;
738745
EcCommands.cm_iterate = state.prvopts.prvo_iterate;
739746
} in

src/ecCommands.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,7 @@ type checkmode = {
827827
cm_cpufactor : int;
828828
cm_nprovers : int;
829829
cm_provers : string list option;
830+
cm_quorum : int option;
830831
cm_profile : bool;
831832
cm_iterate : bool;
832833
}
@@ -839,6 +840,7 @@ let initial ~checkmode ~boot ~checkproof =
839840
EcScope.Prover.po_cpufactor = Some checkmode.cm_cpufactor;
840841
EcScope.Prover.po_nprovers = Some checkmode.cm_nprovers;
841842
EcScope.Prover.po_provers = (checkmode.cm_provers, []);
843+
EcScope.Prover.po_quorum = checkmode.cm_quorum;
842844
EcScope.Prover.pl_iterate = Some (checkmode.cm_iterate);
843845
} in
844846

src/ecCommands.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ type checkmode = {
2020
cm_cpufactor: int;
2121
cm_nprovers : int;
2222
cm_provers : string list option;
23+
cm_quorum : int option;
2324
cm_profile : bool;
2425
cm_iterate : bool;
2526
}

src/ecOptions.ml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ and prv_options = {
6060
prvo_timeout : int option;
6161
prvo_cpufactor : int option;
6262
prvo_provers : string list option;
63+
prvo_quorum : int option;
6364
prvo_pragmas : string list;
6465
prvo_ppwidth : int option;
6566
prvo_checkall : bool;
@@ -86,6 +87,7 @@ type ini_options = {
8687
ini_why3 : string option;
8788
ini_ovrevict : string list;
8889
ini_provers : string list;
90+
ini_quorum : int option;
8991
ini_timeout : int option;
9092
ini_idirs : (string option * string) list;
9193
ini_rdirs : (string option * string) list;
@@ -107,6 +109,8 @@ module Ini : sig
107109

108110
val get_provers : ini_context -> string list
109111

112+
val get_quorum : ini_context -> int option
113+
110114
val get_timeout : ini_context -> int option
111115

112116
val get_idirs : ini_context -> (string option * string) list
@@ -122,6 +126,8 @@ module Ini : sig
122126

123127
val get_all_provers : ini_context list -> string list
124128

129+
val get_all_quorum : ini_context list -> int option
130+
125131
val get_all_timeout : ini_context list -> int option
126132

127133
val get_all_idirs : ini_context list -> (string option * string) list
@@ -153,6 +159,9 @@ end = struct
153159
let get_provers (ini : ini_context) =
154160
ini.inic_ini.ini_provers
155161

162+
let get_quorum (ini : ini_context) =
163+
ini.inic_ini.ini_quorum
164+
156165
let get_timeout (ini : ini_context) =
157166
ini.inic_ini.ini_timeout
158167

@@ -179,6 +188,9 @@ end = struct
179188
let get_all_provers (ini : ini_context list) =
180189
List.flatten (List.map get_provers ini)
181190

191+
let get_all_quorum (ini : ini_context list) =
192+
List.find_map_opt get_quorum ini
193+
182194
let get_all_timeout (ini : ini_context list) =
183195
List.find_map_opt get_timeout ini
184196

@@ -391,6 +403,7 @@ let specs = {
391403
("provers", "Options related to provers", [
392404
`Spec ("p" , `String, "Add a prover to the set of provers");
393405
`Spec ("max-provers", `Int , "Maximum number of prover running in the same time");
406+
`Spec ("quorum", `Int , "Set prover quorum");
394407
`Spec ("timeout" , `Int , "Set the SMT timeout");
395408
`Spec ("cpu-factor" , `Int , "Set the timeout CPU factor");
396409
`Spec ("check-all" , `Flag , "Force checking all files");
@@ -509,6 +522,11 @@ let prv_options_of_values ini values =
509522
end;
510523
prvo_cpufactor = get_int "cpu-factor" values;
511524
prvo_provers = provers;
525+
prvo_quorum = begin
526+
match get_int "quorum" values with
527+
| None -> Ini.get_all_quorum ini
528+
| Some _ as i -> i
529+
end;
512530
prvo_pragmas = get_string_list "pragmas" values;
513531
prvo_ppwidth = begin
514532
match get_int "pp-width" values with
@@ -729,6 +747,7 @@ let read_ini_file (filename : string) =
729747
ini_why3 = tryget "why3conf";
730748
ini_ovrevict = trylist "no-evict";
731749
ini_provers = trylist "provers" ;
750+
ini_quorum = tryint "quorum" ;
732751
ini_timeout = tryint "timeout" ;
733752
ini_idirs = List.map parse_idir (trylist "idirs");
734753
ini_rdirs = List.map parse_idir (trylist "rdirs"); } in
@@ -737,6 +756,7 @@ let read_ini_file (filename : string) =
737756
ini_why3 = omap expand ini.ini_why3;
738757
ini_ovrevict = ini.ini_ovrevict;
739758
ini_provers = ini.ini_provers;
759+
ini_quorum = ini.ini_quorum;
740760
ini_timeout = ini.ini_timeout;
741761
ini_idirs = ini.ini_idirs;
742762
ini_rdirs = ini.ini_rdirs; }

src/ecOptions.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ and prv_options = {
5656
prvo_timeout : int option;
5757
prvo_cpufactor : int option;
5858
prvo_provers : string list option;
59+
prvo_quorum : int option;
5960
prvo_pragmas : string list;
6061
prvo_ppwidth : int option;
6162
prvo_checkall : bool;
@@ -82,6 +83,7 @@ type ini_options = {
8283
ini_why3 : string option;
8384
ini_ovrevict : string list;
8485
ini_provers : string list;
86+
ini_quorum : int option;
8587
ini_timeout : int option;
8688
ini_idirs : (string option * string) list;
8789
ini_rdirs : (string option * string) list;

0 commit comments

Comments
 (0)