mirror of
https://github.com/c-cube/linol.git
synced 2025-12-12 14:00:47 -05:00
git-subtree-dir: thirdparty/lsp git-subtree-split: aae6986391a8519de3da6a7a341f2bd3376e0d2f
77 lines
1.8 KiB
OCaml
77 lines
1.8 KiB
OCaml
open Stdune
|
|
open Lev_fiber_util
|
|
module Q = Removable_queue
|
|
|
|
let printf = Printf.printf
|
|
|
|
let print_all q f =
|
|
while not (Q.is_empty q) do
|
|
let elem = Option.value_exn (Q.pop q) in
|
|
printf "elem: %s\n" (f elem)
|
|
done
|
|
|
|
let add_all q xs = List.iter xs ~f:(fun x -> ignore (Q.push q x))
|
|
|
|
let%expect_test "create is empty" =
|
|
let q = Q.create () in
|
|
printf "new queue is empty: %b" (Q.is_empty q);
|
|
[%expect {| new queue is empty: true |}]
|
|
|
|
let%expect_test "pushing adds an element" =
|
|
let q = Q.create () in
|
|
let (_ : int Q.node) = Q.push q 100 in
|
|
printf "empty: %b\n" (Q.is_empty q);
|
|
[%expect {| empty: false |}]
|
|
|
|
let%expect_test "remove works with a 1 element queue" =
|
|
let q = Q.create () in
|
|
let node = Q.push q 100 in
|
|
printf "empty: %b\n" (Q.is_empty q);
|
|
Q.remove node;
|
|
printf "empty: %b\n" (Q.is_empty q);
|
|
[%expect {|
|
|
empty: false
|
|
empty: true |}]
|
|
|
|
let%expect_test "remove works with a 1 element queue" =
|
|
let q = Q.create () in
|
|
let (_ : int Q.node) = Q.push q 100 in
|
|
printf "empty: %b\n" (Q.is_empty q);
|
|
print_all q Int.to_string;
|
|
printf "empty: %b\n" (Q.is_empty q);
|
|
[%expect {|
|
|
empty: false
|
|
elem: 100
|
|
empty: true |}]
|
|
|
|
let%expect_test "deque all" =
|
|
let q = Q.create () in
|
|
add_all q [ 1; 2; 3 ];
|
|
print_all q Int.to_string;
|
|
[%expect {|
|
|
elem: 1
|
|
elem: 2
|
|
elem: 3 |}]
|
|
|
|
let%expect_test "remove in the middle" =
|
|
let q = Q.create () in
|
|
add_all q [ 100; 200 ];
|
|
let elem = Q.push q 300 in
|
|
add_all q [ 400 ];
|
|
Q.remove elem;
|
|
print_all q Int.to_string;
|
|
[%expect {|
|
|
elem: 100
|
|
elem: 200
|
|
elem: 400 |}]
|
|
|
|
let%expect_test "push; push; remove; push -- head & tail are set correctly" =
|
|
let q = Q.create () in
|
|
ignore @@ Q.push q 0;
|
|
let n = Q.push q 1 in
|
|
Q.remove n;
|
|
ignore @@ Q.push q 2;
|
|
print_all q Int.to_string;
|
|
[%expect {|
|
|
elem: 0
|
|
elem: 2 |}]
|