diff options
-rw-r--r-- | src/vytree.ml | 5 | ||||
-rw-r--r-- | src/vytree.mli | 2 | ||||
-rw-r--r-- | test/vyconf_tree_test.ml | 7 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/vytree.ml b/src/vytree.ml index de482ce..89743fb 100644 --- a/src/vytree.ml +++ b/src/vytree.ml @@ -86,6 +86,11 @@ let rec insert default_data node path data = let delete node path = do_with_child delete_immediate node path +let update node path data = + let update_data data' node' dummy = + {node' with data=data'} + in do_with_child (update_data data) node path + let rec get node path = match path with | [] -> raise Empty_path diff --git a/src/vytree.mli b/src/vytree.mli index 9b91c80..fbe7ac1 100644 --- a/src/vytree.mli +++ b/src/vytree.mli @@ -15,6 +15,8 @@ val insert : 'a -> 'a t -> string list -> 'a -> 'a t val delete : 'a t -> string list -> 'a t +val update : 'a t -> string list -> 'a -> 'a t + val list_children : 'a t -> string list val get : 'a t -> string list -> 'a t diff --git a/test/vyconf_tree_test.ml b/test/vyconf_tree_test.ml index 51707a8..eca40ce 100644 --- a/test/vyconf_tree_test.ml +++ b/test/vyconf_tree_test.ml @@ -90,6 +90,12 @@ let test_get_child_nonexistent test_ctxt = let node = make "root" () in assert_raises Nonexistent_path (fun () -> get node ["foo"; "bar"]) +(* update works *) +let test_update test_ctxt = + let node = make "root" 0 in + let node = insert 0 node ["foo"] 1 in + assert_equal (data_of_node (update node ["foo"] 9)) 9 + let suite = "VyConf tree tests" >::: [ "test_make_node" >:: test_make_node; @@ -104,6 +110,7 @@ let suite = "test_get_immediate_child" >:: test_get_immediate_child; "test_get_child_multilevel" >:: test_get_child_multilevel; "test_get_child_nonexistent" >:: test_get_child_nonexistent; + "test_update" >:: test_update; ] let () = |