aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/test/dict_test_lib.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2016-12-16 12:50:28 +0100
committerBjörn Gustavsson <[email protected]>2016-12-19 11:54:06 +0100
commita2d92dff3a8acc534daeeb3dea5edda406a6ab0d (patch)
treea61765af69f9cca94879083422571be3c959bd8c /lib/stdlib/test/dict_test_lib.erl
parent8362491325db87bd7d561399f8ef8c849df22d33 (diff)
downloadotp-a2d92dff3a8acc534daeeb3dea5edda406a6ab0d.tar.gz
otp-a2d92dff3a8acc534daeeb3dea5edda406a6ab0d.tar.bz2
otp-a2d92dff3a8acc534daeeb3dea5edda406a6ab0d.zip
Add take/2 to all dictionary modules
Similar to maps:take/2, add take/2 to the other dictionary modules in STDLIB: orddict:take(Key, Dict) -> {Val,NewDict} | 'error'. dict:take(Key, Dict) -> {Val,NewDict} | 'error'. gb_trees:take(Key, Dict) -> {Val,NewDict}. For gb_trees also add: gb_trees:take_any(Key, Dict) -> {Val,NewDict} | 'error'. gb_trees already has delete() and delete_any(), so we will follow that design pattern. Suggested by Boris Bochkaryov in https://github.com/erlang/otp/pull/1209.
Diffstat (limited to 'lib/stdlib/test/dict_test_lib.erl')
-rw-r--r--lib/stdlib/test/dict_test_lib.erl20
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/stdlib/test/dict_test_lib.erl b/lib/stdlib/test/dict_test_lib.erl
index 7c4c3572ae..f6fef7bdf4 100644
--- a/lib/stdlib/test/dict_test_lib.erl
+++ b/lib/stdlib/test/dict_test_lib.erl
@@ -33,7 +33,9 @@ new(Mod, Eq) ->
(iterator, S) -> Mod:iterator(S);
(iterator_from, {Start, S}) -> Mod:iterator_from(Start, S);
(next, I) -> Mod:next(I);
- (to_list, D) -> to_list(Mod, D)
+ (to_list, D) -> to_list(Mod, D);
+ (erase, {K,D}) -> erase(Mod, K, D);
+ (take, {K,D}) -> take(Mod, K, D)
end.
empty(Mod) ->
@@ -67,3 +69,19 @@ enter(Mod, Key, Val, Dict) ->
true ->
Mod:store(Key, Val, Dict)
end.
+
+erase(Mod, Key, Val) when Mod =:= dict; Mod =:= orddict ->
+ Mod:erase(Key, Val);
+erase(gb_trees, Key, Val) ->
+ gb_trees:delete_any(Key, Val).
+
+take(gb_trees, Key, Val) ->
+ Res = try
+ gb_trees:take(Key, Val)
+ catch
+ error:_ ->
+ error
+ end,
+ Res = gb_trees:take_any(Key, Val);
+take(Mod, Key, Val) ->
+ Mod:take(Key, Val).