linol/submodules/lev/lev-fiber/test/util/removable_queue_tests.ml
Simon Cruanes 7fbc187548 Squashed 'thirdparty/lsp/' content from commit aae69863
git-subtree-dir: thirdparty/lsp
git-subtree-split: aae6986391a8519de3da6a7a341f2bd3376e0d2f
2025-04-10 15:44:25 -04:00

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 |}]