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
type fail_mode =
| Trap_only
| Assertion_only
| Both
module Exploration_strategy = struct
type t =
| FIFO
| LIFO
| Random
| Random_unseen_then_random
| Rarity
| Hot_path_penalty
| Rarity_aging
| Rarity_depth_aging
| Rarity_depth_loop_aging
| Rarity_depth_loop_aging_random
let to_priority_module : t -> (module Prio.T) = function
| LIFO -> (module Prio.LIFO)
| FIFO -> (module Prio.FIFO)
| Random -> (module Prio.Random_prio)
| Random_unseen_then_random -> (module Prio.Random_unseen_then_random)
| Rarity -> (module Prio.Rarity)
| Hot_path_penalty -> (module Prio.Hot_path_penalty)
| Rarity_aging -> (module Prio.Rarity_aging)
| Rarity_depth_aging -> (module Prio.Rarity_depth_aging)
| Rarity_depth_loop_aging -> (module Prio.Rarity_depth_loop_aging)
| Rarity_depth_loop_aging_random -> (module Prio.Rarity_depth_loop_aging)
let to_work_ds_module strategy : (module Prio.S) =
let module M = (val to_priority_module strategy) in
if M.requires_random then Random.init 42;
(module Prio.Make (M))
let pp fmt v =
Fmt.string fmt
@@
match v with
| FIFO -> "fifo"
| LIFO -> "lifo"
| Random -> "random"
| Random_unseen_then_random -> "random-unseen-then-random"
| Rarity -> "rarity"
| Hot_path_penalty -> "hot-path-penalty"
| Rarity_aging -> "rarity-aging"
| Rarity_depth_aging -> "rarity-depth-aging"
| Rarity_depth_loop_aging -> "rarity-depth-loop-aging"
| Rarity_depth_loop_aging_random -> "rarity-depth-loop-aging"
let of_string s =
match String.lowercase_ascii s with
| "fifo" -> Ok FIFO
| "lifo" -> Ok LIFO
| "random" -> Ok Random
| "random-unseen-then-random" -> Ok Random_unseen_then_random
| "rarity" -> Ok Rarity
| "hot-path-penalty" -> Ok Hot_path_penalty
| "rarity-aging" -> Ok Rarity_aging
| "rarity-depth-aging" -> Ok Rarity_depth_aging
| "rarity-depth-loop-aging" -> Ok Rarity_depth_loop_aging
| "rarity-depth-loop-aging-random" -> Ok Rarity_depth_loop_aging_random
| s -> Fmt.error_msg "unknown exploration strategy %s" s
end
type t =
{ unsafe : bool
; workers : int
; no_stop_at_failure : bool
; no_value : bool
; no_assert_failure_expression_printing : bool
; deterministic_result_order : bool
; fail_mode : fail_mode
; exploration_strategy : Exploration_strategy.t
; workspace : Fpath.t option
; solver : Smtml.Solver_type.t
; model_format : Model.output_format
; entry_point : string option
; invoke_with_symbols : bool
; model_out_file : Fpath.t option
; with_breadcrumbs : bool
; use_ite_for_select : bool
}