From c2931edb4e9fbfdc6c7caf22c3f0107f846a7a57 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 29 Oct 2013 00:59:34 +0100 Subject: [PATCH] some more tests --- tests/run_tests.ml | 3 +++ tests/test_BV.ml | 25 +++++++++++++++++++++++ tests/test_bencode.ml | 24 ++++++++++++++++++++++ tests/test_vector.ml | 47 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 tests/test_BV.ml diff --git a/tests/run_tests.ml b/tests/run_tests.ml index 6f11dd98..8a60d681 100644 --- a/tests/run_tests.ml +++ b/tests/run_tests.ml @@ -30,6 +30,9 @@ let suite = let props = QCheck.flatten [ Test_PersistentHashtbl.props + ; Test_BV.props + ; Test_bencode.props + ; Test_vector.props ] let _ = diff --git a/tests/test_BV.ml b/tests/test_BV.ml new file mode 100644 index 00000000..289e0728 --- /dev/null +++ b/tests/test_BV.ml @@ -0,0 +1,25 @@ + +open QCheck + +let check_create_cardinal = + let gen = Arbitrary.small_int in + let prop n = BV.cardinal (BV.create ~size:n true) = n in + let name = "bv_create_cardinal" in + mk_test ~name ~pp:string_of_int gen prop + +let pp bv = PP.(list string) (List.map string_of_int (BV.to_list bv)) + +let check_iter_true = + let gen = Arbitrary.(lift BV.of_list (list small_int)) in + let prop bv = + let l' = Sequence.to_rev_list (BV.iter_true bv) in + let bv' = BV.of_list l' in + BV.cardinal bv = BV.cardinal bv' + in + let name = "bv_iter_true" in + mk_test ~pp ~size:BV.cardinal ~name gen prop + +let props = + [ check_create_cardinal + ; check_iter_true + ] diff --git a/tests/test_bencode.ml b/tests/test_bencode.ml index 17ebfd8c..0a5ec637 100644 --- a/tests/test_bencode.ml +++ b/tests/test_bencode.ml @@ -44,3 +44,27 @@ let suite = "test2" >:: test2; "test3" >:: test3; ] + +open QCheck + +let check_decode_encode = + let gen = Arbitrary.( + let base = choose + [ lift (fun i -> B.I i) small_int + ; lift (fun s -> B.S s) string + ] + in + fix ~max:3 ~base (fun sub -> + choose + [ lift B.dict_of_list (list (pair string sub)) + ; lift (fun l -> B.L l) (list sub) + ; sub + ])) + in + let prop b = B.eq (B.of_string (B.to_string b)) b in + let name = "bencode_decode_encode_bij" in + mk_test ~name gen prop + +let props = + [ check_decode_encode + ] diff --git a/tests/test_vector.ml b/tests/test_vector.ml index 4032b2ae..f3798bbd 100644 --- a/tests/test_vector.ml +++ b/tests/test_vector.ml @@ -43,3 +43,50 @@ let suite = "test_copy" >:: test_copy; "test_shrink" >:: test_shrink; ] + +open QCheck +module V = Vector + +let gen sub = Arbitrary.(lift V.from_list (list sub)) +let pp v = PP.(list string) (List.map string_of_int (V.to_list v)) + +let check_append = + let gen = Arbitrary.(pair (gen small_int) (gen small_int)) in + let prop (v1, v2) = + let l1 = V.to_list v1 in + V.append v1 v2; + Sequence.to_list (V.to_seq v1) = + Sequence.(to_list (append (of_list l1) (V.to_seq v2))) + in + let name = "vector_append" in + mk_test ~name ~pp:PP.(pair pp pp) gen prop + +let check_sort = + let gen = Arbitrary.(gen small_int) in + let prop v = + let v' = V.copy v in + V.sort v'; + let l = V.to_list v' in + List.sort compare l = l + in + let name = "vector_sort" in + mk_test ~name ~pp gen prop + +let check_shrink = + let gen = Arbitrary.(gen small_int) in + let prop v = + let n = V.size v / 2 in + let l = V.to_list v in + let h = Sequence.(to_list (take n (of_list l))) in + let v' = V.copy v in + V.shrink v' n; + h = V.to_list v' + in + let name = "vector_shrink" in + mk_test ~name ~pp gen prop + +let props = + [ check_append + ; check_sort + ; check_shrink + ]