diff --git a/graph.ml b/graph.ml index 3346463d..c721fbee 100644 --- a/graph.ml +++ b/graph.ml @@ -92,7 +92,7 @@ let prev t v = Sequence.of_list (PHashtbl.find t v).n_prev let between t v1 v2 = - let edges = Sequence.of_list (PHashtbl.find t v1).n_prev in + let edges = Sequence.of_list (PHashtbl.find t v1).n_next in let edges = Sequence.filter (fun (e, v2') -> (PHashtbl.get_eq t) v2 v2') edges in Sequence.map fst edges diff --git a/tests/helpers.ml b/tests/helpers.ml new file mode 100644 index 00000000..28f71b3a --- /dev/null +++ b/tests/helpers.ml @@ -0,0 +1,9 @@ + +(** Some helpers for tests *) + +let print_int_list l = + let b = Buffer.create 20 in + Format.bprintf b "@[[%a]@]" + (Sequence.pp_seq ~sep:", " Format.pp_print_int) + (Sequence.of_list l); + Buffer.contents b diff --git a/tests/test_graph.ml b/tests/test_graph.ml new file mode 100644 index 00000000..1a07898d --- /dev/null +++ b/tests/test_graph.ml @@ -0,0 +1,50 @@ + +(** Tests on graphs *) + +open OUnit +open Helpers + +(* build a graph from a list of pairs of ints *) +let mk_graph l = + let g = Graph.empty 5 in + Graph.add_seq g + (Sequence.map (fun (x,y) -> x,1,y) + (Sequence.of_list l)); + g + +let test_copy () = + let g = mk_graph [0,1; 1,2; 2,3; 3,0] in + let g' = Graph.copy g in + Graph.add g 1 1 3; + Graph.add g 1 2 3; + OUnit.assert_equal ~printer:print_int_list + [1;2] (List.sort compare (Sequence.to_list (Graph.between g 1 3))); + OUnit.assert_bool "copy" (Sequence.is_empty (Graph.between g' 1 3)); + () + +let test_roots () = + let g = mk_graph [0,1; 1,2; 2,3; 4,1; 5,1; 6,5; 3,5] in + let roots = Sequence.to_list (Graph.roots g) in + OUnit.assert_equal (List.sort compare roots) [0;4;6] + +let test_leaves () = + let g = mk_graph [0,1; 1,2; 2,3; 4,1; 6,5; 3,5; 3,7] in + let leaves = Sequence.to_list (Graph.leaves g) in + OUnit.assert_equal (List.sort compare leaves) [5;7] + +let test_dfs () = + let g = mk_graph [0,1; 1,2; 2,3; 3,0] in + + () + +let test_dijkstra () = + () + +let suite = + "test_graph" >::: + [ "test_copy" >:: test_copy; + "test_leaves" >:: test_leaves; + "test_roots" >:: test_roots; + "test_dfs" >:: test_dfs; + "test_dijkstra" >:: test_dijkstra; + ] diff --git a/tests/test_heap.ml b/tests/test_heap.ml index 3b10cd94..3b24fcdb 100644 --- a/tests/test_heap.ml +++ b/tests/test_heap.ml @@ -1,13 +1,7 @@ (** Test heaps *) open OUnit - -let print_int_list l = - let b = Buffer.create 20 in - Format.bprintf b "@[[%a]@]" - (Sequence.pp_seq ~sep:", " Format.pp_print_int) - (Sequence.of_list l); - Buffer.contents b +open Helpers let test_empty () = let h = Heap.empty ~cmp:(fun x y -> x - y) in diff --git a/tests/tests.ml b/tests/tests.ml index 09e6a200..7c157b36 100644 --- a/tests/tests.ml +++ b/tests/tests.ml @@ -6,6 +6,7 @@ let suite = "all_tests" >::: [ Test_pHashtbl.suite; Test_heap.suite; + Test_graph.suite; ] let _ =