Skip to content

Commit d6ebdaf

Browse files
authored
Merge pull request #414 from ocaml-multicore/stm-array-extend
Extend STM Array tests
2 parents 07fa898 + affbb37 commit d6ebdaf

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

src/array/stm_tests.ml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ open STM
55

66
module AConf =
77
struct
8+
type char_bool_fun = (char -> bool) fun_
9+
10+
let pp_char_bool_fun par fmt f =
11+
Format.fprintf fmt (if par then "(%s)" else "%s") (Fn.print f)
12+
813
type cmd =
914
| Length
1015
| Get of int
@@ -13,8 +18,14 @@ struct
1318
| Copy
1419
| Fill of int * int * char
1520
| To_list
21+
| For_all of char_bool_fun
22+
| Exists of char_bool_fun
1623
| Mem of char
24+
| Find_opt of char_bool_fun
25+
(*| Find_index of char_bool_fun since 5.1*)
1726
| Sort
27+
| Stable_sort
28+
| Fast_sort
1829
| To_seq
1930

2031
let pp_cmd par fmt x =
@@ -27,8 +38,14 @@ struct
2738
| Copy -> cst0 "Copy" fmt
2839
| Fill (x, y, z) -> cst3 pp_int pp_int pp_char "Fill" par fmt x y z
2940
| To_list -> cst0 "To_list" fmt
41+
| For_all f -> cst1 pp_char_bool_fun "For_all" par fmt f
42+
| Exists f -> cst1 pp_char_bool_fun "Exists" par fmt f
3043
| Mem x -> cst1 pp_char "Mem" par fmt x
44+
| Find_opt f -> cst1 pp_char_bool_fun "Find_opt" par fmt f
45+
(*| Find_index f -> cst1 pp_char_bool_fun "Find_index" par fmt f*)
3146
| Sort -> cst0 "Sort" fmt
47+
| Stable_sort -> cst0 "Stable_sort" fmt
48+
| Fast_sort -> cst0 "Fast_sort" fmt
3249
| To_seq -> cst0 "To_seq" fmt
3350

3451
let show_cmd = Util.Pp.to_show pp_cmd
@@ -48,8 +65,14 @@ struct
4865
return Copy;
4966
map3 (fun i len c -> Fill (i,len,c)) int_gen int_gen char_gen; (* hack: reusing int_gen for length *)
5067
return To_list;
68+
map (fun f -> For_all f) (fun1 Observable.char QCheck.bool).gen;
69+
map (fun f -> Exists f) (fun1 Observable.char QCheck.bool).gen;
5170
map (fun c -> Mem c) char_gen;
71+
map (fun f -> Find_opt f) (fun1 Observable.char QCheck.bool).gen;
72+
(*map (fun f -> Find_index f) (fun1 Observable.char QCheck.bool).gen;*)
5273
return Sort;
74+
return Stable_sort;
75+
return Fast_sort;
5376
return To_seq;
5477
])
5578

@@ -70,8 +93,14 @@ struct
7093
List.mapi (fun j c' -> if i <= j && j <= i+l-1 then c else c') s
7194
else s
7295
| To_list -> s
96+
| For_all _ -> s
97+
| Exists _ -> s
7398
| Mem _ -> s
99+
| Find_opt _ -> s
100+
(*| Find_index _ -> s*)
74101
| Sort -> List.sort Char.compare s
102+
| Stable_sort -> List.stable_sort Char.compare s
103+
| Fast_sort -> List.fast_sort Char.compare s
75104
| To_seq -> s
76105

77106
let init_sut () = Array.make array_size 'a'
@@ -88,8 +117,14 @@ struct
88117
| Copy -> Res (array char, Array.copy a)
89118
| Fill (i,l,c) -> Res (result unit exn, protect (Array.fill a i l) c)
90119
| To_list -> Res (list char, Array.to_list a)
120+
| For_all (Fun (_,f)) -> Res (bool, Array.for_all f a)
121+
| Exists (Fun (_,f)) -> Res (bool, Array.exists f a)
91122
| Mem c -> Res (bool, Array.mem c a)
123+
| Find_opt (Fun (_,f)) -> Res (option char, Array.find_opt f a)
124+
(*| Find_index (Fun (_,f)) -> Res (option int, Array.find_index f a)*)
92125
| Sort -> Res (unit, Array.sort Char.compare a)
126+
| Stable_sort -> Res (unit, Array.stable_sort Char.compare a)
127+
| Fast_sort -> Res (unit, Array.fast_sort Char.compare a)
93128
| To_seq -> Res (seq char, List.to_seq (List.of_seq (Array.to_seq a))) (* workaround: Array.to_seq is lazy and will otherwise see and report later Array.set state changes... *)
94129

95130
let postcond c (s:char list) res = match c, res with
@@ -112,8 +147,14 @@ struct
112147
then r = Error (Invalid_argument "Array.fill")
113148
else r = Ok ()
114149
| To_list, Res ((List Char,_),cs) -> cs = s
150+
| For_all (Fun (_,f)), Res ((Bool,_),r) -> r = List.for_all f s
151+
| Exists (Fun (_,f)), Res ((Bool,_),r) -> r = List.exists f s
115152
| Mem c, Res ((Bool,_),r) -> r = List.mem c s
153+
| Find_opt (Fun (_,f)), Res ((Option Char,_),r) -> r = List.find_opt f s
154+
(*| Find_index (Fun (_,f)), Res ((Option Int,_),r) -> r = List.find_index f s*)
116155
| Sort, Res ((Unit,_),r) -> r = ()
156+
| Stable_sort, Res ((Unit,_),r) -> r = ()
157+
| Fast_sort, Res ((Unit,_),r) -> r = ()
117158
| To_seq, Res ((Seq Char,_),r) -> Seq.equal (=) r (List.to_seq s)
118159
| _, _ -> false
119160
end

0 commit comments

Comments
 (0)