mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 19:25:28 -05:00
add test and bugfix for CCBV
This commit is contained in:
parent
81ed6139ca
commit
43bccceac7
1 changed files with 32 additions and 12 deletions
|
|
@ -229,28 +229,48 @@ let clear bv =
|
||||||
*)
|
*)
|
||||||
|
|
||||||
let iter bv f =
|
let iter bv f =
|
||||||
let len = Array.length bv.a in
|
let len = array_length_of_size bv.size in
|
||||||
|
assert (len <= Array.length bv.a);
|
||||||
for n = 0 to len - 2 do
|
for n = 0 to len - 2 do
|
||||||
let j = width_ * n in
|
let j = width_ * n in
|
||||||
for i = 0 to width_ - 1 do
|
for i = 0 to width_ - 1 do
|
||||||
f (j+i) (bv.a.(n) land (1 lsl i) <> 0)
|
f (j+i) (bv.a.(n) land (1 lsl i) <> 0)
|
||||||
done
|
done
|
||||||
done;
|
done;
|
||||||
let j = width_ * (len - 1) in
|
if bv.size > 0 then (
|
||||||
let r = bv.size mod width_ in
|
let j = width_ * (len - 1) in
|
||||||
let final_length = if r = 0 then width_ else r in
|
let r = bv.size mod width_ in
|
||||||
for i = 0 to final_length - 1 do
|
let final_length = if r = 0 then width_ else r in
|
||||||
f (j + i) (bv.a.(len - 1) land (1 lsl i) <> 0)
|
for i = 0 to final_length - 1 do
|
||||||
done
|
f (j + i) (bv.a.(len - 1) land (1 lsl i) <> 0)
|
||||||
|
done
|
||||||
|
)
|
||||||
|
|
||||||
(*$R
|
(*$R
|
||||||
let bv = create ~size:30 false in
|
List.iter
|
||||||
set bv 5;
|
(fun size ->
|
||||||
let n = ref 0 in
|
let bv = create ~size false in
|
||||||
iter bv (fun i b -> incr n; assert_equal b (i=5));
|
set bv 5;
|
||||||
assert_bool "at least 30" (!n >= 30)
|
let n = ref 0 in
|
||||||
|
iter bv (fun i b -> incr n; assert_equal b (i=5));
|
||||||
|
assert_bool "exactly size" (!n = size))
|
||||||
|
[30; 100; 255; 256;10_000]
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
(*$= & ~printer:Q.Print.(list (pair int bool))
|
||||||
|
[] (iter (create ~size:0 false) |> Sequence.zip |> Sequence.to_list)
|
||||||
|
[0, false; 1, true; 2, false] \
|
||||||
|
(iter (let bv = create ~size:3 false in set bv 1; bv) |> Sequence.zip |> Sequence.to_list)
|
||||||
|
*)
|
||||||
|
|
||||||
|
(*$Q
|
||||||
|
Q.(small_int) (fun n -> \
|
||||||
|
assert (n >= 0); \
|
||||||
|
let bv = create ~size:n true in \
|
||||||
|
let l = iter bv |> Sequence.zip |> Sequence.to_list in \
|
||||||
|
List.length l = n && List.for_all (fun (_,b) -> b) l)
|
||||||
|
*)
|
||||||
|
|
||||||
let iter_true bv f =
|
let iter_true bv f =
|
||||||
iter bv (fun i b -> if b then f i else ())
|
iter bv (fun i b -> if b then f i else ())
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue