1- open Saturn_lockfree.Queue
1+ module Queue = Saturn_lockfree. Queue
22
33let tests_sequential =
44 QCheck.
@@ -7,57 +7,59 @@ let tests_sequential =
77 Test. make ~name: " push" (list int ) (fun lpush ->
88 assume (lpush <> [] );
99 (* Building a random queue *)
10- let queue = create () in
11- List. iter (push queue) lpush;
10+ let queue = Queue. create () in
11+ List. iter (Queue. push queue) lpush;
1212
1313 (* Testing property *)
14- not (is_empty queue));
14+ not (Queue. is_empty queue));
1515 (* TEST 2 - push, pop until empty *)
1616 Test. make ~name: " push_pop_opt_until_empty" (list int ) (fun lpush ->
1717 (* Building a random queue *)
18- let queue = create () in
19- List. iter (push queue) lpush;
18+ let queue = Queue. create () in
19+ List. iter (Queue. push queue) lpush;
2020
2121 (* Popping until [is_empty q] is true *)
2222 let count = ref 0 in
23- while not (is_empty queue) do
23+ while not (Queue. is_empty queue) do
2424 incr count;
25- ignore (pop_opt queue)
25+ ignore (Queue. pop_opt queue)
2626 done ;
2727
2828 (* Testing property *)
29- pop_opt queue = None && ! count = List. length lpush);
29+ Queue. pop_opt queue = None && ! count = List. length lpush);
3030 (* TEST 3 - push, pop_opt, check FIFO *)
3131 Test. make ~name: " fifo" (list int ) (fun lpush ->
3232 (* Building a random queue *)
33- let queue = create () in
34- List. iter (push queue) lpush;
33+ let queue = Queue. create () in
34+ List. iter (Queue. push queue) lpush;
3535
3636 let out = ref [] in
3737 let insert v = out := v :: ! out in
3838
3939 for _ = 1 to List. length lpush do
40- match pop_opt queue with None -> assert false | Some v -> insert v
40+ match Queue. pop_opt queue with
41+ | None -> assert false
42+ | Some v -> insert v
4143 done ;
4244
4345 (* Testing property *)
4446 lpush = List. rev ! out);
4547 (* TEST 3 - push, pop_opt, peek_opt check FIFO *)
4648 Test. make ~name: " fifo_peek_opt" (list int ) (fun lpush ->
4749 (* Building a random queue *)
48- let queue = create () in
49- List. iter (push queue) lpush;
50+ let queue = Queue. create () in
51+ List. iter (Queue. push queue) lpush;
5052
5153 let pop = ref [] in
5254 let peek = ref [] in
5355 let insert out v = out := v :: ! out in
5456
5557 for _ = 1 to List. length lpush do
56- match peek_opt queue with
58+ match Queue. peek_opt queue with
5759 | None -> assert false
5860 | Some v -> (
5961 insert peek v;
60- match pop_opt queue with
62+ match Queue. pop_opt queue with
6163 | None -> assert false
6264 | Some v -> insert pop v)
6365 done ;
@@ -73,28 +75,31 @@ let tests_one_consumer_one_producer =
7375 Parallel [push] and [pop_opt]. *)
7476 Test. make ~name: " parallel_fifo" (list int ) (fun lpush ->
7577 (* Initialization *)
76- let queue = create () in
78+ let queue = Queue. create () in
7779 let barrier = Barrier. create 2 in
7880
7981 (* Producer pushes. *)
8082 let producer =
8183 Domain. spawn (fun () ->
8284 Barrier. await barrier;
83- List. iter (push queue) lpush)
85+ List. iter (Queue. push queue) lpush)
8486 in
8587
8688 Barrier. await barrier;
8789 let fifo =
8890 List. fold_left
8991 (fun acc item ->
90- let popped = ref None in
91- while Option. is_none ! popped do
92- popped := pop_opt queue
93- done ;
94- acc && item = Option. get ! popped)
92+ let rec pop_one () =
93+ match Queue. pop_opt queue with
94+ | None ->
95+ Domain. cpu_relax () ;
96+ pop_one ()
97+ | Some item' -> acc && item = item'
98+ in
99+ pop_one () )
95100 true lpush
96101 in
97- let empty = is_empty queue in
102+ let empty = Queue. is_empty queue in
98103
99104 (* Ensure nothing is left behind. *)
100105 Domain. join producer;
@@ -104,22 +109,22 @@ let tests_one_consumer_one_producer =
104109 Test. make ~name: " parallel_peek" (list int ) (fun pushed ->
105110 (* Initialization *)
106111 let npush = List. length pushed in
107- let queue = create () in
112+ let queue = Queue. create () in
108113 let barrier = Barrier. create 2 in
109114
110115 (* Producer pushes. *)
111116 let producer =
112117 Domain. spawn (fun () ->
113118 Barrier. await barrier;
114- List. iter (push queue) pushed)
119+ List. iter (Queue. push queue) pushed)
115120 in
116121
117122 let peeked = ref [] in
118123 let popped = ref [] in
119124 Barrier. await barrier;
120125 for _ = 1 to npush do
121- peeked := peek_opt queue :: ! peeked;
122- popped := pop_opt queue :: ! popped
126+ peeked := Queue. peek_opt queue :: ! peeked;
127+ popped := Queue. pop_opt queue :: ! popped
123128 done ;
124129
125130 Domain. join producer;
@@ -147,7 +152,7 @@ let tests_two_domains =
147152 Test. make ~name: " parallel_pop_opt_push" (pair small_nat small_nat)
148153 (fun (npush1 , npush2 ) ->
149154 (* Initialization *)
150- let queue = create () in
155+ let queue = Queue. create () in
151156 let barrier = Barrier. create 2 in
152157
153158 (* Using these lists instead of a random one enables to
@@ -158,9 +163,9 @@ let tests_two_domains =
158163 let work lpush =
159164 List. map
160165 (fun elt ->
161- push queue elt;
166+ Queue. push queue elt;
162167 Domain. cpu_relax () ;
163- pop_opt queue)
168+ Queue. pop_opt queue)
164169 lpush
165170 in
166171
@@ -205,7 +210,7 @@ let tests_two_domains =
205210 Test. make ~name: " parallel_pop_opt_push_random" (pair small_nat small_nat)
206211 (fun (npush1 , npush2 ) ->
207212 (* Initialization *)
208- let queue = create () in
213+ let queue = Queue. create () in
209214 let barrier = Barrier. create 2 in
210215
211216 let lpush1 = List. init npush1 (fun i -> i) in
@@ -222,11 +227,11 @@ let tests_two_domains =
222227 match lpush with
223228 | [] -> popped
224229 | elt :: xs ->
225- push queue elt;
230+ Queue. push queue elt;
226231 loop xs popped)
227232 else (
228233 incr consecutive_pop;
229- let p = pop_opt queue in
234+ let p = Queue. pop_opt queue in
230235 loop lpush (p :: popped))
231236 in
232237 loop lpush []
@@ -256,7 +261,7 @@ let tests_two_domains =
256261 (* Pop everything that is still on the queue *)
257262 let popped3 =
258263 let rec loop popped =
259- match pop_opt queue with
264+ match Queue. pop_opt queue with
260265 | None -> popped
261266 | Some v -> loop (v :: popped)
262267 in
0 commit comments