more tests for CCVector

This commit is contained in:
Simon Cruanes 2014-11-10 00:49:29 +01:00
parent be08237d61
commit 1debe08645
2 changed files with 33 additions and 5 deletions

View file

@ -139,6 +139,11 @@ let append a b =
a.size <- a.size + b.size a.size <- a.size + b.size
) )
(*$T
let v1 = init 5 (fun i->i) and v2 = init 5 (fun i->i+5) in \
append v1 v2; to_list v1 = CCList.(0--9)
*)
let get v i = let get v i =
if i < 0 || i >= v.size then failwith "Vector.get"; if i < 0 || i >= v.size then failwith "Vector.get";
Array.unsafe_get v.vec i Array.unsafe_get v.vec i
@ -159,8 +164,14 @@ let append_seq a seq =
seq (fun x -> push a x) seq (fun x -> push a x)
let append_array a b = let append_array a b =
ensure a (a.size + Array.length b);
Array.iter (push a) b Array.iter (push a) b
(*$T
let v1 = init 5 (fun i->i) and v2 = Array.init 5 (fun i->i+5) in \
append_array v1 v2; to_list v1 = CCList.(0--9)
*)
let equal eq v1 v2 = let equal eq v1 v2 =
let n = min v1.size v2.size in let n = min v1.size v2.size in
let rec check i = let rec check i =
@ -243,6 +254,11 @@ let uniq_sort cmp v =
then traverse v.vec.(0) 1 1 then traverse v.vec.(0) 1 1
(* start at 1, to get the first element in hand *) (* start at 1, to get the first element in hand *)
(*$T
let v = of_list [1;4;5;3;2;4;1] in \
uniq_sort Pervasives.compare v; to_list v = [1;2;3;4;5]
*)
let iter k v = let iter k v =
for i = 0 to v.size -1 do for i = 0 to v.size -1 do
k (Array.unsafe_get v.vec i) k (Array.unsafe_get v.vec i)
@ -256,10 +272,18 @@ let iteri k v =
let map f v = let map f v =
if _empty_array v if _empty_array v
then create () then create ()
else { else (
size=v.size; let vec = Array.init v.size (fun i -> f (Array.unsafe_get v.vec i)) in
vec=Array.map f v.vec {
} size=v.size;
vec;
}
)
(*$T
let v = create() in push v 1; push v 2; push v 3; \
to_list (map string_of_int v) = ["1"; "2"; "3"]
*)
let filter' p v = let filter' p v =
let i = ref (v.size - 1) in let i = ref (v.size - 1) in
@ -464,6 +488,10 @@ let to_gen v =
Some x Some x
) else None ) else None
(*$T
let v = (1--10) in to_list v = CCGen.to_list (to_gen v)
*)
let of_klist ?(init=create ()) l = let of_klist ?(init=create ()) l =
let rec aux l = match l() with let rec aux l = match l() with
| `Nil -> init | `Nil -> init

View file

@ -90,7 +90,7 @@ val append_seq : ('a, rw) t -> 'a sequence -> unit
val equal : 'a equal -> ('a,_) t equal val equal : 'a equal -> ('a,_) t equal
val compare : 'a ord -> ('a,_) t ord val compare : 'a ord -> ('a,_) t ord
(** Lexicographic comparison *) (** Total ordering on vectors: Lexicographic comparison. *)
val pop : ('a, rw) t -> 'a option val pop : ('a, rw) t -> 'a option
(** Remove last element, or [None] *) (** Remove last element, or [None] *)