Skip to content

Commit c9da8fe

Browse files
another conditional test
1 parent e27d6ba commit c9da8fe

File tree

3 files changed

+50
-4
lines changed

3 files changed

+50
-4
lines changed

src/tracedAtomic.ml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,8 @@ let _set_to_str s =
290290
IntSet.to_seq s |> List.of_seq |> List.map Int.to_string |> String.concat ", "
291291

292292
let rec explore_source depth func state sleep_sets =
293-
let sleep = last_element sleep_sets in
293+
let _sleep = last_element sleep_sets in
294+
let sleep = ref IntSet.empty in
294295
let s = last_element state in
295296
(* Printf.printf "[depth=%d] explore (backtrack=[%s], sleep=[%s], enabled=[%s])\n%!" depth
296297
(set_to_str s.backtrack) (set_to_str !sleep) (set_to_str s.enabled); *)
@@ -442,17 +443,17 @@ let rec explore_source depth func state sleep_sets =
442443
(List.length prefix - 1)
443444
prefix_top.run_proc
444445
(atomic_op_str prefix_top.run_op); *)
445-
let prefix_top_sleep =
446+
let _prefix_top_sleep =
446447
!(List.nth sleep_sets (List.length prefix - 1))
447448
in
448449
if
449450
IntSet.(
450451
cardinal
451-
(inter prefix_top.backtrack (diff initials prefix_top_sleep)))
452+
(inter prefix_top.backtrack ( initials )))
452453
= 0
453454
then (
454455
let _initial =
455-
match IntSet.(min_elt_opt (diff initials prefix_top_sleep)) with
456+
match IntSet.(min_elt_opt ( initials )) with
456457
| Some initial -> initial
457458
| None -> IntSet.min_elt initials
458459
in

tests/test_conditional1.ml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module Atomic = Dscheck.TracedAtomic
2+
3+
let test () =
4+
let c = Atomic.make 0 in
5+
let b = Atomic.make 0 in
6+
let ok = Atomic.make false in
7+
8+
Atomic.spawn (fun () -> Atomic.set b 1);
9+
Atomic.spawn (fun () ->
10+
Atomic.set c 1;
11+
Atomic.set b 2);
12+
Atomic.spawn (fun () ->
13+
if Atomic.get c = 0 then if Atomic.get b = 0 then Atomic.set ok true);
14+
15+
Atomic.final (fun () ->
16+
Format.printf "b=%i c=%i ok=%b@." (Atomic.get b) (Atomic.get c)
17+
(Atomic.get ok))
18+
19+
20+
let () = Atomic.trace test

tests/test_conditional2.ml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module Atomic = Dscheck.TracedAtomic
2+
3+
let test () =
4+
let x = Atomic.make 0 in
5+
let y = Atomic.make 0 in
6+
let z = Atomic.make 0 in
7+
8+
let tmp = ref (-1) in
9+
Atomic.spawn (fun () -> tmp := Atomic.get x);
10+
Atomic.spawn (fun () -> Atomic.set y 1);
11+
12+
Atomic.spawn (fun () ->
13+
let m = Atomic.get y in
14+
if m = 0 then Atomic.set z 1);
15+
16+
Atomic.spawn (fun () ->
17+
let n = Atomic.get z in
18+
let l = Atomic.get y in
19+
if n = 1 then if l = 0 then Atomic.set x 1);
20+
21+
Atomic.final (fun () ->
22+
Format.printf "tmp=%d x=%d y=%d z=%d\n%!" !tmp (Atomic.get x)
23+
(Atomic.get y) (Atomic.get z))
24+
25+
let () = Atomic.trace test

0 commit comments

Comments
 (0)