diff --git a/containers.mllib b/containers.mllib index 4706fe33..b7256789 100644 --- a/containers.mllib +++ b/containers.mllib @@ -4,10 +4,10 @@ Gen FHashtbl FQueue FlatHashtbl -Graph Hashset Heap LazyGraph +PersistentGraph PersistentHashtbl PHashtbl Sequence diff --git a/containers.odocl b/containers.odocl index 4706fe33..b7256789 100644 --- a/containers.odocl +++ b/containers.odocl @@ -4,10 +4,10 @@ Gen FHashtbl FQueue FlatHashtbl -Graph Hashset Heap LazyGraph +PersistentGraph PersistentHashtbl PHashtbl Sequence diff --git a/graph.ml b/persistentGraph.ml similarity index 100% rename from graph.ml rename to persistentGraph.ml diff --git a/graph.mli b/persistentGraph.mli similarity index 100% rename from graph.mli rename to persistentGraph.mli diff --git a/tests/test_graph.ml b/tests/test_graph.ml index bafc88e7..82116451 100644 --- a/tests/test_graph.ml +++ b/tests/test_graph.ml @@ -4,38 +4,40 @@ open OUnit open Helpers +module G = PersistentGraph + (* build a graph from a list of pairs of ints *) let mk_graph l = - let g = Graph.empty 5 in - Graph.add_seq g + let g = G.empty 5 in + G.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; + let g' = G.copy g in + G.add g 1 1 3; + G.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)); + [1;2] (List.sort compare (Sequence.to_list (G.between g 1 3))); + OUnit.assert_bool "copy" (Sequence.is_empty (G.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 + let roots = Sequence.to_list (G.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 + let leaves = Sequence.to_list (G.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; 1,4; 1,5; 5,6; 4,6; 6,0] in let l = ref [] in - Graph.dfs g 0 (fun (v,i) -> l := (v,i) :: !l); + G.dfs g 0 (fun (v,i) -> l := (v,i) :: !l); (* get index of vertex [v] in DFS traversal *) let get_idx v = List.assoc v !l in OUnit.assert_bool "order" (get_idx 0 < get_idx 1); @@ -49,7 +51,7 @@ let test_dfs () = let test_bfs () = let g = mk_graph [0,1; 1,2; 2,3; 2,4; 3,0; 1,4; 1,5; 5,6; 4,6; 6,0] in let l = Sequence.to_list - (Sequence.mapi (fun i v -> (v,i)) (Graph.bfs_seq g 0)) in + (Sequence.mapi (fun i v -> (v,i)) (G.bfs_seq g 0)) in (* get index of vertex [v] in DFS traversal *) let get_idx v = List.assoc v l in OUnit.assert_bool "order" (get_idx 0 < get_idx 1); @@ -71,8 +73,8 @@ and pp_edge formatter (v1,e,v2) = let test_dijkstra () = let g = mk_graph [0,1; 1,2; 2,3; 3,4; 3,0; 4,5; 1,5; 5,6; 4,6; 6,0] in - let path = Graph.min_path g ~cost:(fun x -> x) 0 6 in - let path = Graph.rev_path path in + let path = G.min_path g ~cost:(fun x -> x) 0 6 in + let path = G.rev_path path in OUnit.assert_equal ~printer:pp_path [0,1,1; 1,1,5; 5,1,6] path; ()