renamed tests/tests.ml into tests/run_tests.ml;

added some tests for Vector;
added Sequence functions to Vector
This commit is contained in:
Simon Cruanes 2013-03-17 18:36:51 +01:00
parent 9d556cb106
commit ef08010c6f
5 changed files with 64 additions and 6 deletions

View file

@ -9,7 +9,7 @@ all:
ocamlbuild $(OPTIONS) $(TARGETS_LIB) ocamlbuild $(OPTIONS) $(TARGETS_LIB)
tests: tests:
ocamlbuild $(OPTIONS) -package oUnit -I . tests/tests.native ocamlbuild $(OPTIONS) -package oUnit -I . tests/run_tests.native
bench: bench:
ocamlbuild $(OPTIONS) -package bench -package unix -I . tests/benchs.native ocamlbuild $(OPTIONS) -package bench -package unix -I . tests/benchs.native

View file

@ -5,6 +5,7 @@ open OUnit
let suite = let suite =
"all_tests" >::: "all_tests" >:::
[ Test_pHashtbl.suite; [ Test_pHashtbl.suite;
Test_vector.suite;
Test_deque.suite; Test_deque.suite;
Test_fHashtbl.suite; Test_fHashtbl.suite;
Test_fQueue.suite; Test_fQueue.suite;

45
tests/test_vector.ml Normal file
View file

@ -0,0 +1,45 @@
open OUnit
open Sequence.Infix
let test_clear () =
let v = Vector.of_seq (1 -- 10) in
OUnit.assert_equal 10 (Vector.size v);
Vector.clear v;
OUnit.assert_equal 0 (Vector.size v);
OUnit.assert_bool "empty_after_clear" (Sequence.is_empty (Vector.to_seq v));
()
let test_append () =
let a = Vector.of_seq (1 -- 5) in
let b = Vector.of_seq (6 -- 10) in
Vector.append a b;
OUnit.assert_equal 10 (Vector.size a);
OUnit.assert_equal (Sequence.to_array (1 -- 10)) (Vector.to_array a);
OUnit.assert_equal (Sequence.to_array (6 -- 10)) (Vector.to_array b);
()
let test_copy () =
let v = Vector.of_seq (1 -- 100) in
OUnit.assert_equal 100 (Vector.size v);
let v' = Vector.copy v in
OUnit.assert_equal 100 (Vector.size v');
Vector.clear v';
OUnit.assert_bool "empty" (Vector.is_empty v');
OUnit.assert_bool "not_empty" (not (Vector.is_empty v));
()
let test_shrink () =
let v = Vector.of_seq (1 -- 10) in
Vector.shrink v 5;
OUnit.assert_equal [1;2;3;4;5] (Vector.to_list v);
()
let suite =
"test_vector" >:::
[ "test_clear" >:: test_clear;
"test_append" >:: test_append;
"test_copy" >:: test_copy;
"test_shrink" >:: test_shrink;
]

View file

@ -23,7 +23,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*) *)
(** Growable, mutable vector *) (** {1 Growable, mutable vector} *)
(** a vector of 'a. *) (** a vector of 'a. *)
type 'a t = { type 'a t = {
@ -186,6 +186,15 @@ let set v i x =
let size v = v.size let size v = v.size
let unsafe_get_array v = v.vec
let of_seq ?(init=create 10) seq =
Sequence.iter (fun x -> push init x) seq;
init
let to_seq t =
Sequence.from_iter (fun k -> iter t k)
let from_array a = let from_array a =
let c = Array.length a in let c = Array.length a in
let v = create c in let v = create c in
@ -201,8 +210,6 @@ let from_list l =
let to_array v = let to_array v =
Array.sub v.vec 0 v.size Array.sub v.vec 0 v.size
let get_array v = v.vec
let to_list v = let to_list v =
let l = ref [] in let l = ref [] in
for i = 0 to v.size - 1 do for i = 0 to v.size - 1 do

View file

@ -23,7 +23,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*) *)
(** Growable, mutable vector *) (** {1 Growable, mutable vector} *)
type 'a t type 'a t
(** the type of a vector of 'a *) (** the type of a vector of 'a *)
@ -97,9 +97,14 @@ val set : 'a t -> int -> 'a -> unit
val size : 'a t -> int val size : 'a t -> int
(** number of elements in vector *) (** number of elements in vector *)
val unsafe_get_array : 'a t -> 'a array
(** Access the underlying *shared* array (do not modify!) *)
val of_seq : ?init:'a t -> 'a Sequence.t -> 'a t
val to_seq : 'a t -> 'a Sequence.t
val from_array : 'a array -> 'a t val from_array : 'a array -> 'a t
val from_list : 'a list -> 'a t val from_list : 'a list -> 'a t
val to_array : 'a t -> 'a array val to_array : 'a t -> 'a array
val get_array : 'a t -> 'a array (* get underlying *shared* array *)
val to_list : 'a t -> 'a list val to_list : 'a t -> 'a list