diff options
-rw-r--r-- | src/vytree.ml | 4 | ||||
-rw-r--r-- | src/vytree.mli | 2 | ||||
-rw-r--r-- | test/vyconf_tree_test.ml | 15 |
3 files changed, 21 insertions, 0 deletions
diff --git a/src/vytree.ml b/src/vytree.ml index 3177e24..ed5efd2 100644 --- a/src/vytree.ml +++ b/src/vytree.ml @@ -93,6 +93,10 @@ let rec get node path = | [name] -> find_or_fail node name | name :: names -> get (find_or_fail node name) names +let exists node path = + try ignore (get node path); true + with Nonexistent_path -> false + let get_existent_path node path = let rec aux node path acc = match path with diff --git a/src/vytree.mli b/src/vytree.mli index 4f57a0e..4b52727 100644 --- a/src/vytree.mli +++ b/src/vytree.mli @@ -30,3 +30,5 @@ val list_children : 'a t -> string list val get : 'a t -> string list -> 'a t val get_existent_path : 'a t -> string list -> string list + +val exists : 'a t -> string list -> bool diff --git a/test/vyconf_tree_test.ml b/test/vyconf_tree_test.ml index 2aa100e..24a6d1e 100644 --- a/test/vyconf_tree_test.ml +++ b/test/vyconf_tree_test.ml @@ -106,6 +106,19 @@ let test_get_existent_path test_ctxt = let node = insert node ["foo"; "bar"] () in assert_equal (get_existent_path node ["foo"; "bar"; "baz"]) ["foo"; "bar"] +let test_exists_existent test_ctxt = + let node = make () "root" in + let node = insert node ["foo"] () in + let node = insert node ["foo"; "bar"] () in + assert_equal (exists node ["foo"; "bar"]) true + +let test_exists_nonexistent test_ctxt = + let node = make () "root" in + let node = insert node ["foo"] () in + let node = insert node ["foo"; "bar"] () in + assert_equal (exists node ["foo"; "bar"; "baz"]) false + + let suite = "VyConf tree tests" >::: [ "test_make_node" >:: test_make_node; @@ -122,6 +135,8 @@ let suite = "test_get_child_nonexistent" >:: test_get_child_nonexistent; "test_update" >:: test_update; "test_get_existent_path" >:: test_get_existent_path; + "test_exists_existent" >:: test_exists_existent; + "test_exists_nonexistent" >:: test_exists_nonexistent; ] let () = |