File: quickChickToolTypes.ml

package info (click to toggle)
coq-quickchick 2.1.1-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,432 kB
  • sloc: ml: 4,367; ansic: 789; makefile: 388; sh: 27; python: 4; lisp: 2; perl: 2
file content (62 lines) | stat: -rw-r--r-- 1,801 bytes parent folder | download | duplicates (5)
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
type mutant_info =
  { file_name   : string
  ; line_number : int
  ; tag         : string option } 

let default_info =
  { file_name = "" ; line_number = -1 ; tag = None }
  
type mutant =
  { mut_info  : mutant_info
  ; mut_begin : string
  ; mut_body  : string
  ; mut_end   : string }

type node =
  (* Base chunk of text *)
  | Text of string 
  (* Commented out QuickChick call *)
  | QuickChick of
      { qc_begin : string
      ; qc_body  : string
      ; qc_end   : string }
  (* Mutant: start of mutant, base, list of mutants *)
  | Mutants of
      { ms_begin   : string
      ; ms_base    : string
      ; ms_mutants : mutant list }

type extend =
  { ext_begin   : string
  ; ext_extends : string list
  ; ext_end     : string }

type section = 
  (* Sections: Start comment, section name, end comment, extends, contents *)
  { sec_begin   : string
  ; sec_name    : string
  ; sec_end     : string
  ; sec_extends : extend option
  ; sec_nodes   : node list }
  
let output_mutant (m : mutant) : string =
  m.mut_begin ^ m.mut_body ^ m.mut_end

let output_node (n : node) : string =
  match n with
  | Text s -> s 
  | QuickChick qc ->
     (qc.qc_begin ^ qc.qc_body ^ qc.qc_end)
  | Mutants ms ->
     Printf.sprintf "%s%s%s" ms.ms_begin ms.ms_base (String.concat "" (List.map output_mutant ms.ms_mutants))

let output_extends (me : extend option) : string =
  match me with 
  | Some ext -> ext.ext_begin ^ String.concat "" ext.ext_extends ^ ext.ext_end
  | None -> ""

let output_section (sec : section) : string =
     let qual s = if sec.sec_name = "" || sec.sec_name.[0] = '_' then "" else s in
     Printf.sprintf "%s%s%s%s%s" (qual sec.sec_begin) (qual sec.sec_name) (qual sec.sec_end) (output_extends sec.sec_extends) (String.concat "" (List.map output_node sec.sec_nodes))