linol/submodules/lev/lev-fiber/test/util/bip_buffer_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

180 lines
4.8 KiB
OCaml

open Stdune
module Bytes = BytesLabels
open Lev_fiber_util
module B = Bip_buffer
let%expect_test "is_empty" =
let len = 100 in
assert (B.is_empty (B.create (Bytes.create len) ~len));
[%expect {||}]
let%expect_test "read empty" =
let b = B.create (Bytes.create 0) ~len:1 in
assert (B.peek b = None);
[%expect {||}]
let peek_str b ~len =
match B.peek b with
| None -> assert false
| Some s ->
assert (s.len >= len);
printfn "Requested %d. Available %d" len s.len;
let get len =
let dst = Bytes.create len in
let src = B.buffer b in
Bytes.blit ~dst ~dst_pos:0 ~src ~src_pos:s.pos ~len;
Bytes.to_string dst
in
let peek = get len in
if len = s.len then printfn "Peek: %S" peek
else printfn "Peek: %S (full: %S)" peek (get s.len);
peek
let print b =
let pp_slice fmt (b, { B.Slice.pos; len }) =
Format.fprintf fmt "%S" (Bytes.sub_string b ~pos ~len)
in
Format.printf "%a@." (B.pp pp_slice) b
let write_str b src =
let len = String.length src in
match B.reserve b ~len with
| None -> assert false
| Some dst_pos ->
let dst = B.buffer b in
Bytes.blit_string ~dst ~dst_pos ~src ~src_pos:0 ~len;
B.commit b ~len
let%expect_test "bip buffers" =
let buf_size = 16 in
let b = B.create (Bytes.create buf_size) ~len:buf_size in
assert (B.is_empty b);
[%expect {| |}];
let () =
let mystr = "Test Foo|Bar" in
let mystr_len = String.length mystr in
write_str b mystr;
assert (B.length b = mystr_len)
in
[%expect {| |}];
(* Now we try to read 4 characters *)
let () =
let read_len = 8 in
print b;
B.junk b ~len:read_len
in
[%expect {|
"Test Foo|Bar" |}];
print b;
[%expect {|
"|Bar" |}]
let%expect_test "fill buffer" =
let str = "foo bar baz foo" in
let len = String.length str in
let b = B.create (Bytes.create len) ~len in
write_str b str;
let str' = peek_str b ~len in
assert (String.equal str str');
[%expect {|
Requested 15. Available 15
Peek: "foo bar baz foo" |}]
let%expect_test "reserve overflow" =
let buf_size = 16 in
let b = B.create (Bytes.create buf_size) ~len:buf_size in
let len = 17 in
(match B.reserve b ~len with None -> () | Some _ -> assert false);
[%expect {||}]
let%expect_test "unused space" =
let buf_size = 16 in
let half = buf_size / 2 in
let b = B.create (Bytes.create buf_size) ~len:buf_size in
let unused = B.unused_space b in
printfn "unused space: %d" unused;
[%expect {|
unused space: 16 |}];
assert (unused = buf_size);
write_str b (String.make half 'a');
assert (B.unused_space b = half);
write_str b (String.make (pred half) 'b');
B.junk b ~len:half;
let unused = B.unused_space b in
printfn "unused space: %d" unused;
assert (unused = 9);
[%expect {|
unused space: 9 |}];
let b = B.create (Bytes.create buf_size) ~len:buf_size in
write_str b (String.make half 'a');
assert (B.length b = half);
B.junk b ~len:1;
assert (B.length b = pred half);
let unused = B.unused_space b in
printfn "unused space: %d" unused;
assert (unused = 9);
[%expect {| unused space: 9 |}]
let blit ~src ~src_pos ~dst ~dst_pos ~len =
Bytes.blit ~src ~src_pos ~dst ~dst_pos ~len
let%expect_test "resize" =
let buf_size = 16 in
let b = B.create (Bytes.make buf_size '0') ~len:buf_size in
write_str b "00000";
print b;
[%expect {|
"00000" |}];
B.resize b blit (Bytes.make (buf_size * 2) '1') ~len:(buf_size * 2);
print b;
[%expect {|
"00000" |}]
let%expect_test "compression - a only" =
let buf_size = 8 in
let b = B.create (Bytes.make buf_size '0') ~len:buf_size in
write_str b "00000";
B.junk b ~len:2;
printfn "available: %d" (B.max_available b);
[%expect {| available: 3 |}];
B.compress b blit;
print b;
[%expect {|
"000" |}];
printfn "available: %d" (B.max_available b);
[%expect {|
available: 5 |}]
let%expect_test "compression - a & b" =
let buf_size = 8 in
let b = B.create (Bytes.make buf_size '0') ~len:buf_size in
write_str b (String.make 7 '1');
B.junk b ~len:6;
print b;
[%expect {| "1" |}];
write_str b (String.make 3 '2');
print b;
[%expect {| "1""222" |}];
printfn "available: %d" (B.max_available b);
[%expect {| available: 3 |}];
B.compress b blit;
printfn "available: %d" (B.max_available b);
[%expect {| available: 4 |}];
print b;
[%expect {| "1222" |}]
let%expect_test "reserve and commit b" =
let buf_size = 8 in
let b = B.create (Bytes.make buf_size '0') ~len:buf_size in
write_str b (String.make 4 '1');
write_str b (String.make 2 '1');
assert (B.reserve b ~len:4 = None);
B.junk b ~len:4;
print b;
[%expect {| "11" |}];
write_str b (String.make 3 '2');
print b;
[%expect {| "11""222" |}];
write_str b (String.make 1 '3');
print b;
[%expect {| "11""2223" |}]